[llvm] c1fe147 - [llvm-mca] Print InstructionInfoView using Instrument information.

Michael Maitland via llvm-commits llvm-commits at lists.llvm.org
Mon May 22 16:41:49 PDT 2023


Author: Michael Maitland
Date: 2023-05-22T16:41:19-07:00
New Revision: c1fe1474d27f6fe7b8e5bfedcc9066e9a90ad85e

URL: https://github.com/llvm/llvm-project/commit/c1fe1474d27f6fe7b8e5bfedcc9066e9a90ad85e
DIFF: https://github.com/llvm/llvm-project/commit/c1fe1474d27f6fe7b8e5bfedcc9066e9a90ad85e.diff

LOG: [llvm-mca] Print InstructionInfoView using Instrument information.

Previous reports calculated the overall report using Instrument
information but did not print out per-instruction data using
Instrument information. This patch fixes that.

Differential Revision: https://reviews.llvm.org/D150459

Added: 
    

Modified: 
    llvm/test/tools/llvm-mca/RISCV/different-instruments.s
    llvm/test/tools/llvm-mca/RISCV/instrument-at-start.s
    llvm/test/tools/llvm-mca/RISCV/instrument-in-middle.s
    llvm/test/tools/llvm-mca/RISCV/instrument-in-region.s
    llvm/test/tools/llvm-mca/RISCV/instrument-straddles-region.s
    llvm/test/tools/llvm-mca/RISCV/multiple-same-instruments.s
    llvm/tools/llvm-mca/Views/InstructionInfoView.cpp
    llvm/tools/llvm-mca/Views/InstructionInfoView.h
    llvm/tools/llvm-mca/llvm-mca.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-mca/RISCV/
diff erent-instruments.s b/llvm/test/tools/llvm-mca/RISCV/
diff erent-instruments.s
index ced206a923e1b..947b5dbbef1f7 100644
--- a/llvm/test/tools/llvm-mca/RISCV/
diff erent-instruments.s
+++ b/llvm/test/tools/llvm-mca/RISCV/
diff erent-instruments.s
@@ -28,7 +28,7 @@ vadd.vv v12, v12, v12
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m1, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vadd.vv	v12, v12, v12
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m8, tu, mu
 # CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
 

diff  --git a/llvm/test/tools/llvm-mca/RISCV/instrument-at-start.s b/llvm/test/tools/llvm-mca/RISCV/instrument-at-start.s
index fd33e2adacb8c..b4aa433967054 100644
--- a/llvm/test/tools/llvm-mca/RISCV/instrument-at-start.s
+++ b/llvm/test/tools/llvm-mca/RISCV/instrument-at-start.s
@@ -25,7 +25,7 @@ vadd.vv v12, v12, v12
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m1, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vadd.vv	v12, v12, v12
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SiFive7FDiv

diff  --git a/llvm/test/tools/llvm-mca/RISCV/instrument-in-middle.s b/llvm/test/tools/llvm-mca/RISCV/instrument-in-middle.s
index 90fe5c655fbe9..0279de01f0472 100644
--- a/llvm/test/tools/llvm-mca/RISCV/instrument-in-middle.s
+++ b/llvm/test/tools/llvm-mca/RISCV/instrument-in-middle.s
@@ -27,7 +27,7 @@ vadd.vv v12, v12, v12
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m8, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     1.00                        vadd.vv	v12, v12, v12
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SiFive7FDiv

diff  --git a/llvm/test/tools/llvm-mca/RISCV/instrument-in-region.s b/llvm/test/tools/llvm-mca/RISCV/instrument-in-region.s
index f33ae272f310f..966531028a9c2 100644
--- a/llvm/test/tools/llvm-mca/RISCV/instrument-in-region.s
+++ b/llvm/test/tools/llvm-mca/RISCV/instrument-in-region.s
@@ -29,7 +29,7 @@ vadd.vv v12, v12, v12
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m1, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vadd.vv	v12, v12, v12
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SiFive7FDiv

diff  --git a/llvm/test/tools/llvm-mca/RISCV/instrument-straddles-region.s b/llvm/test/tools/llvm-mca/RISCV/instrument-straddles-region.s
index c2187a3838f6c..160d01a5fae68 100644
--- a/llvm/test/tools/llvm-mca/RISCV/instrument-straddles-region.s
+++ b/llvm/test/tools/llvm-mca/RISCV/instrument-straddles-region.s
@@ -30,7 +30,7 @@ vadd.vv v12, v12, v12
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m1, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vadd.vv	v12, v12, v12
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SiFive7FDiv

diff  --git a/llvm/test/tools/llvm-mca/RISCV/multiple-same-instruments.s b/llvm/test/tools/llvm-mca/RISCV/multiple-same-instruments.s
index 585908e760961..621953deac4de 100644
--- a/llvm/test/tools/llvm-mca/RISCV/multiple-same-instruments.s
+++ b/llvm/test/tools/llvm-mca/RISCV/multiple-same-instruments.s
@@ -33,13 +33,13 @@ vsub.vv v12, v12, v12
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m1, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vadd.vv	v12, v12, v12
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m1, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
-# CHECK-NEXT:  1      4     16.00                       vsub.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     2.00                        vsub.vv	v12, v12, v12
 # CHECK-NEXT:  1      3     1.00                  U     vsetvli	zero, a0, e8, m2, tu, mu
-# CHECK-NEXT:  1      4     16.00                       vadd.vv	v12, v12, v12
-# CHECK-NEXT:  1      4     16.00                       vsub.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     8.00                        vadd.vv	v12, v12, v12
+# CHECK-NEXT:  1      4     8.00                        vsub.vv	v12, v12, v12
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SiFive7FDiv

diff  --git a/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp b/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp
index 3262de48d41e3..fea0c9b8455c4 100644
--- a/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp
+++ b/llvm/tools/llvm-mca/Views/InstructionInfoView.cpp
@@ -117,8 +117,13 @@ void InstructionInfoView::collectData(
     InstructionInfoViewData &IIVDEntry = std::get<1>(I);
     const MCInstrDesc &MCDesc = MCII.get(Inst.getOpcode());
 
-    // Obtain the scheduling class information from the instruction.
-    unsigned SchedClassID = MCDesc.getSchedClass();
+    // Obtain the scheduling class information from the instruction
+    // and instruments.
+    auto IVecIt = InstToInstruments.find(&Inst);
+    unsigned SchedClassID =
+        IVecIt == InstToInstruments.end()
+            ? MCDesc.getSchedClass()
+            : IM.getSchedClassID(MCII, Inst, IVecIt->second);
     unsigned CPUID = SM.getProcessorID();
 
     // Try to solve variant scheduling classes.

diff  --git a/llvm/tools/llvm-mca/Views/InstructionInfoView.h b/llvm/tools/llvm-mca/Views/InstructionInfoView.h
index bddd01a086b58..3befafda90a38 100644
--- a/llvm/tools/llvm-mca/Views/InstructionInfoView.h
+++ b/llvm/tools/llvm-mca/Views/InstructionInfoView.h
@@ -42,6 +42,7 @@
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCSubtargetInfo.h"
 #include "llvm/MCA/CodeEmitter.h"
+#include "llvm/MCA/CustomBehaviour.h"
 #include "llvm/Support/raw_ostream.h"
 
 #define DEBUG_TYPE "llvm-mca"
@@ -57,6 +58,10 @@ class InstructionInfoView : public InstructionView {
   bool PrintBarriers;
   using UniqueInst = std::unique_ptr<Instruction>;
   ArrayRef<UniqueInst> LoweredInsts;
+  const InstrumentManager &IM;
+  using InstToInstrumentsT =
+      DenseMap<const MCInst *, SmallVector<mca::Instrument *>>;
+  const InstToInstrumentsT &InstToInstruments;
 
   struct InstructionInfoViewData {
     unsigned NumMicroOpcodes = 0;
@@ -77,10 +82,12 @@ class InstructionInfoView : public InstructionView {
                       bool ShouldPrintEncodings, llvm::ArrayRef<llvm::MCInst> S,
                       llvm::MCInstPrinter &IP,
                       ArrayRef<UniqueInst> LoweredInsts,
-                      bool ShouldPrintBarriers)
+                      bool ShouldPrintBarriers, const InstrumentManager &IM,
+                      const InstToInstrumentsT &InstToInstruments)
       : InstructionView(ST, IP, S), MCII(II), CE(C),
         PrintEncodings(ShouldPrintEncodings),
-        PrintBarriers(ShouldPrintBarriers), LoweredInsts(LoweredInsts) {}
+        PrintBarriers(ShouldPrintBarriers), LoweredInsts(LoweredInsts), IM(IM),
+        InstToInstruments(InstToInstruments) {}
 
   void printView(llvm::raw_ostream &OS) const override;
   StringRef getNameAsString() const override { return "InstructionInfoView"; }

diff  --git a/llvm/tools/llvm-mca/llvm-mca.cpp b/llvm/tools/llvm-mca/llvm-mca.cpp
index 23b537e85cbd3..eb71cffba6dd2 100644
--- a/llvm/tools/llvm-mca/llvm-mca.cpp
+++ b/llvm/tools/llvm-mca/llvm-mca.cpp
@@ -571,11 +571,14 @@ int main(int argc, char **argv) {
 
     IPP->resetState();
 
+    DenseMap<const MCInst *, SmallVector<mca::Instrument *>>
+        InstToInstruments;
     SmallVector<std::unique_ptr<mca::Instruction>> LoweredSequence;
     for (const MCInst &MCI : Insts) {
       SMLoc Loc = MCI.getLoc();
       const SmallVector<mca::Instrument *> Instruments =
           InstrumentRegions.getActiveInstruments(Loc);
+      InstToInstruments.insert({&MCI, Instruments});
 
       Expected<std::unique_ptr<mca::Instruction>> Inst =
           IB.createInstruction(MCI, Instruments);
@@ -621,7 +624,7 @@ int main(int argc, char **argv) {
       if (PrintInstructionInfoView) {
         Printer.addView(std::make_unique<mca::InstructionInfoView>(
             *STI, *MCII, CE, ShowEncoding, Insts, *IP, LoweredSequence,
-            ShowBarriers));
+            ShowBarriers, *IM, InstToInstruments));
       }
       Printer.addView(
           std::make_unique<mca::ResourcePressureView>(*STI, *IP, Insts));
@@ -698,7 +701,7 @@ int main(int argc, char **argv) {
     if (PrintInstructionInfoView)
       Printer.addView(std::make_unique<mca::InstructionInfoView>(
           *STI, *MCII, CE, ShowEncoding, Insts, *IP, LoweredSequence,
-          ShowBarriers));
+          ShowBarriers, *IM, InstToInstruments));
 
     // Fetch custom Views that are to be placed after the InstructionInfoView.
     // Refer to the comment paired with the CB->getStartViews(*IP, Insts); line


        


More information about the llvm-commits mailing list