From: Andrea Di Biagio Date: Sat, 27 Apr 2019 11:59:11 +0000 (+0000) Subject: [MCA] Add field `IsEliminated` to class Instruction. NFCI X-Git-Tag: llvmorg-10-init~6857 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d77dc9ada20655977d1f43494d686ed7f403f030;p=platform%2Fupstream%2Fllvm.git [MCA] Add field `IsEliminated` to class Instruction. NFCI llvm-svn: 359377 --- diff --git a/llvm/include/llvm/MCA/Instruction.h b/llvm/include/llvm/MCA/Instruction.h index 62453d3..0cb6f6c 100644 --- a/llvm/include/llvm/MCA/Instruction.h +++ b/llvm/include/llvm/MCA/Instruction.h @@ -457,10 +457,14 @@ class Instruction : public InstructionBase { // by a memory dependency. unsigned CriticalMemDep; + // True if this instruction has been optimized at register renaming stage. + bool IsEliminated; + public: Instruction(const InstrDesc &D) : InstructionBase(D), Stage(IS_INVALID), CyclesLeft(UNKNOWN_CYCLES), - RCUTokenID(0), CriticalResourceMask(0), CriticalMemDep(0) {} + RCUTokenID(0), CriticalResourceMask(0), CriticalMemDep(0), + IsEliminated(false) {} unsigned getRCUTokenID() const { return RCUTokenID; } int getCyclesLeft() const { return CyclesLeft; } @@ -490,15 +494,11 @@ public: bool isExecuting() const { return Stage == IS_EXECUTING; } bool isExecuted() const { return Stage == IS_EXECUTED; } bool isRetired() const { return Stage == IS_RETIRED; } - - bool isEliminated() const { - return isReady() && getDefs().size() && - all_of(getDefs(), - [](const WriteState &W) { return W.isEliminated(); }); - } + bool isEliminated() const { return IsEliminated; } // Forces a transition from state IS_DISPATCHED to state IS_EXECUTED. void forceExecuted(); + void setEliminated() { IsEliminated = true; } void retire() { assert(isExecuted() && "Instruction is in an invalid state!"); diff --git a/llvm/lib/MCA/Stages/DispatchStage.cpp b/llvm/lib/MCA/Stages/DispatchStage.cpp index b55ac70..80d6da0 100644 --- a/llvm/lib/MCA/Stages/DispatchStage.cpp +++ b/llvm/lib/MCA/Stages/DispatchStage.cpp @@ -95,11 +95,11 @@ Error DispatchStage::dispatch(InstRef IR) { AvailableEntries = 0; // Check if this is an optimizable reg-reg move. - bool IsEliminated = false; if (IS.isOptimizableMove()) { assert(IS.getDefs().size() == 1 && "Expected a single input!"); assert(IS.getUses().size() == 1 && "Expected a single output!"); - IsEliminated = PRF.tryEliminateMove(IS.getDefs()[0], IS.getUses()[0]); + if (PRF.tryEliminateMove(IS.getDefs()[0], IS.getUses()[0])) + IS.setEliminated(); } if (IS.isMemOp()) @@ -114,7 +114,7 @@ Error DispatchStage::dispatch(InstRef IR) { // // We also don't update data dependencies for instructions that have been // eliminated at register renaming stage. - if (!IsEliminated) { + if (!IS.isEliminated()) { for (ReadState &RS : IS.getUses()) PRF.addRegisterRead(RS, STI); }