summaryrefslogtreecommitdiff
path: root/llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp')
-rw-r--r--llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp b/llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp
index de519d7fd94a..9297f0c4fd7b 100644
--- a/llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp
+++ b/llvm/lib/MCA/HardwareUnits/RetireControlUnit.cpp
@@ -21,8 +21,10 @@ namespace mca {
RetireControlUnit::RetireControlUnit(const MCSchedModel &SM)
: NextAvailableSlotIdx(0), CurrentInstructionSlotIdx(0),
- NumROBEntries(SM.MicroOpBufferSize),
- AvailableEntries(SM.MicroOpBufferSize), MaxRetirePerCycle(0) {
+ AvailableEntries(SM.isOutOfOrder() ? SM.MicroOpBufferSize : 0),
+ MaxRetirePerCycle(0) {
+ assert(SM.isOutOfOrder() &&
+ "RetireControlUnit is not available for in-order processors");
// Check if the scheduling model provides extra information about the machine
// processor. If so, then use that information to set the reorder buffer size
// and the maximum number of instructions retired per cycle.
@@ -47,6 +49,7 @@ unsigned RetireControlUnit::dispatch(const InstRef &IR) {
Queue[NextAvailableSlotIdx] = {IR, Entries, false};
NextAvailableSlotIdx += std::max(1U, Entries);
NextAvailableSlotIdx %= Queue.size();
+ assert(TokenID < UnhandledTokenID && "Invalid token ID");
AvailableEntries -= Entries;
return TokenID;