19#define DEBUG_TYPE "llvm-mca"
21Error MicroOpQueueStage::moveInstructions() {
22 InstRef
IR = Buffer[CurrentInstructionSlotIdx];
27 Buffer[CurrentInstructionSlotIdx].invalidate();
28 unsigned NormalizedOpcodes = getNormalizedOpcodes(
IR);
29 CurrentInstructionSlotIdx += NormalizedOpcodes;
30 CurrentInstructionSlotIdx %= Buffer.size();
31 AvailableEntries += NormalizedOpcodes;
32 IR = Buffer[CurrentInstructionSlotIdx];
38MicroOpQueueStage::MicroOpQueueStage(
unsigned Size,
unsigned IPC,
39 bool ZeroLatencyStage)
40 : NextAvailableSlotIdx(0), CurrentInstructionSlotIdx(0), MaxIPC(IPC),
41 CurrentIPC(0), IsZeroLatencyStage(ZeroLatencyStage) {
43 AvailableEntries = Buffer.size();
47 Buffer[NextAvailableSlotIdx] =
IR;
48 unsigned NormalizedOpcodes = getNormalizedOpcodes(
IR);
49 NextAvailableSlotIdx += NormalizedOpcodes;
50 NextAvailableSlotIdx %= Buffer.size();
51 AvailableEntries -= NormalizedOpcodes;
58 if (!IsZeroLatencyStage)
59 return moveInstructions();
64 if (IsZeroLatencyStage)
65 return moveInstructions();
Legalize the Machine IR a function s Machine IR
This file defines a stage that implements a queue of micro opcodes.
Subclass of Error for the sole purpose of identifying the success path in the type system.
Lightweight error class with error context and mandatory checking.
An InstRef contains both a SourceMgr index and Instruction pair.
Error cycleEnd() override
Called once at the end of each cycle.
Error execute(InstRef &IR) override
The primary action that this stage performs on instruction IR.
Error cycleStart() override
Called once at the start of each cycle.
Error moveToTheNextStage(InstRef &IR)
Called when an instruction is ready to move the next pipeline stage.
bool checkNextStage(const InstRef &IR) const
This is an optimization pass for GlobalISel generic memory operations.