mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-07 18:10:24 +00:00
[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
This commit is contained in:
parent
abba5de724
commit
c1fe1474d2
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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 @@ public:
|
||||
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"; }
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user