[llvm-mca] Ensure that instructions with a schedule read-advance are always issued in the right order.
Normally, the Scheduler prioritizes older instructions over younger instructions
during the instruction issue stage. In one particular case where a dependent
instruction had a schedule read-advance associated to one of the input operands,
this rule was not correctly applied.
This patch fixes the issue and adds a test to verify that we don't regress that
particular case.
llvm-svn: 330032
diff --git a/llvm/tools/llvm-mca/Scheduler.h b/llvm/tools/llvm-mca/Scheduler.h
index f273220..4bc8c23 100644
--- a/llvm/tools/llvm-mca/Scheduler.h
+++ b/llvm/tools/llvm-mca/Scheduler.h
@@ -430,17 +430,16 @@
// Notify the Backend that buffered resources were freed.
void notifyReleasedBuffers(llvm::ArrayRef<uint64_t> Buffers);
- /// Issue instructions from the ReadyQueue by giving priority to older
- /// instructions. This method returns true if at least one instruction has
- /// been promoted in the process from the WaitQueue to the ReadyQueue.
+ /// Issue the next instruction from the ReadyQueue. This method gives priority
+ /// to older instructions.
bool issue();
- /// Scans the WaitQueue in search of instructions that can be moved to
- /// the ReadyQueue.
- bool promoteToReadyQueue();
+ /// Move instructions from the WaitQueue to the ReadyQueue if input operands
+ /// are all available.
+ void promoteToReadyQueue();
/// Issue an instruction without updating the ready queue.
- void issueInstruction(Instruction &IS, unsigned InstrIndex);
+ void issueInstruction(unsigned Index, Instruction &IS);
void updatePendingQueue();
void updateIssuedQueue();