diff options
Diffstat (limited to 'llvm/tools/llvm-mca/lib/Instruction.cpp')
-rw-r--r-- | llvm/tools/llvm-mca/lib/Instruction.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/llvm/tools/llvm-mca/lib/Instruction.cpp b/llvm/tools/llvm-mca/lib/Instruction.cpp index 511e7b20703..12b6e185ced 100644 --- a/llvm/tools/llvm-mca/lib/Instruction.cpp +++ b/llvm/tools/llvm-mca/lib/Instruction.cpp @@ -120,10 +120,10 @@ void Instruction::execute() { Stage = IS_EXECUTING; // Set the cycles left before the write-back stage. - CyclesLeft = Desc.MaxLatency; + CyclesLeft = getLatency(); - for (UniqueDef &Def : Defs) - Def->onInstructionIssued(); + for (WriteState &WS : getDefs()) + WS.onInstructionIssued(); // Transition to the "executed" stage if this is a zero-latency instruction. if (!CyclesLeft) @@ -139,21 +139,21 @@ void Instruction::forceExecuted() { void Instruction::update() { assert(isDispatched() && "Unexpected instruction stage found!"); - if (!all_of(Uses, [](const UniqueUse &Use) { return Use->isReady(); })) + if (!all_of(getUses(), [](const ReadState &Use) { return Use.isReady(); })) return; // A partial register write cannot complete before a dependent write. - auto IsDefReady = [&](const UniqueDef &Def) { - if (const WriteState *Write = Def->getDependentWrite()) { + auto IsDefReady = [&](const WriteState &Def) { + if (const WriteState *Write = Def.getDependentWrite()) { int WriteLatency = Write->getCyclesLeft(); if (WriteLatency == UNKNOWN_CYCLES) return false; - return static_cast<unsigned>(WriteLatency) < Desc.MaxLatency; + return static_cast<unsigned>(WriteLatency) < getLatency(); } return true; }; - if (all_of(Defs, IsDefReady)) + if (all_of(getDefs(), IsDefReady)) Stage = IS_READY; } @@ -162,8 +162,8 @@ void Instruction::cycleEvent() { return; if (isDispatched()) { - for (UniqueUse &Use : Uses) - Use->cycleEvent(); + for (ReadState &Use : getUses()) + Use.cycleEvent(); update(); return; @@ -171,8 +171,8 @@ void Instruction::cycleEvent() { assert(isExecuting() && "Instruction not in-flight?"); assert(CyclesLeft && "Instruction already executed?"); - for (UniqueDef &Def : Defs) - Def->cycleEvent(); + for (WriteState &Def : getDefs()) + Def.cycleEvent(); CyclesLeft--; if (!CyclesLeft) Stage = IS_EXECUTED; |