class ScheduleHazardRecognizer
Declaration
class ScheduleHazardRecognizer { /* full declaration omitted */ };
Description
HazardRecognizer - This determines whether or not an instruction can be issued this cycle, and whether or not a noop needs to be inserted to handle the hazard.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:25
Member Variables
- protected unsigned int MaxLookAhead = 0
- MaxLookAhead - Indicate the number of cycles in the scoreboard state. Important to restore the state after backtracking. Additionally, MaxLookAhead=0 identifies a fake recognizer, allowing the client to bypass virtual calls. Currently the PostRA scheduler ignores it.
Method Overview
- public virtual void AdvanceCycle()
- public virtual void EmitInstruction(llvm::SUnit *)
- public virtual void EmitInstruction(llvm::MachineInstr *)
- public virtual void EmitNoop()
- public virtual unsigned int PreEmitNoops(llvm::SUnit *)
- public virtual unsigned int PreEmitNoops(llvm::MachineInstr *)
- public virtual void RecedeCycle()
- public virtual void Reset()
- public ScheduleHazardRecognizer()
- public virtual bool ShouldPreferAnother(llvm::SUnit *)
- public virtual bool atIssueLimit() const
- public virtual llvm::ScheduleHazardRecognizer::HazardType getHazardType(llvm::SUnit * m, int Stalls = 0)
- public unsigned int getMaxLookAhead() const
- public bool isEnabled() const
- public virtual ~ScheduleHazardRecognizer()
Methods
¶virtual void AdvanceCycle()
virtual void AdvanceCycle()
Description
AdvanceCycle - This callback is invoked whenever the next top-down instruction to be scheduled cannot issue in the current cycle, either because of latency or resource conflicts. This should increment the internal state of the hazard recognizer so that previously "Hazard" instructions will now not be hazards.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:104
¶virtual void EmitInstruction(llvm::SUnit*)
virtual void EmitInstruction(llvm::SUnit*)
Description
EmitInstruction - This callback is invoked when an instruction is emitted, to advance the hazard state.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:71
Parameters
¶virtual void EmitInstruction(llvm::MachineInstr*)
virtual void EmitInstruction(llvm::MachineInstr*)
Description
This overload will be used when the hazard recognizer is being used by a non-scheduling pass, which does not use SUnits.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:75
Parameters
¶virtual void EmitNoop()
virtual void EmitNoop()
Description
EmitNoop - This callback is invoked when a noop was added to the instruction stream.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:113
¶virtual unsigned int PreEmitNoops(llvm::SUnit*)
virtual unsigned int PreEmitNoops(llvm::SUnit*)
Description
PreEmitNoops - This callback is invoked prior to emitting an instruction. It should return the number of noops to emit prior to the provided instruction. Note: This is only used during PostRA scheduling. EmitNoop is not called for these noops.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:82
Parameters
¶virtual unsigned int PreEmitNoops(
llvm::MachineInstr*)
virtual unsigned int PreEmitNoops(
llvm::MachineInstr*)
Description
This overload will be used when the hazard recognizer is being used by a non-scheduling pass, which does not use SUnits.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:88
Parameters
¶virtual void RecedeCycle()
virtual void RecedeCycle()
Description
RecedeCycle - This callback is invoked whenever the next bottom-up instruction to be scheduled cannot issue in the current cycle, either because of latency or resource conflicts.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:109
¶virtual void Reset()
virtual void Reset()
Description
Reset - This callback is invoked when a new block of instructions is about to be schedule. The hazard state should be set to an initialized state.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:67
¶ScheduleHazardRecognizer()
ScheduleHazardRecognizer()
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:34
¶virtual bool ShouldPreferAnother(llvm::SUnit*)
virtual bool ShouldPreferAnother(llvm::SUnit*)
Description
ShouldPreferAnother - This callback may be invoked if getHazardType returns NoHazard. If, even though there is no hazard, it would be better to schedule another available instruction, this callback should return true.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:95
Parameters
¶virtual bool atIssueLimit() const
virtual bool atIssueLimit() const
Description
atIssueLimit - Return true if no more instructions may be issued in this cycle. FIXME: remove this once MachineScheduler is the only client.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:51
¶virtual llvm::ScheduleHazardRecognizer::HazardType
getHazardType(llvm::SUnit* m, int Stalls = 0)
virtual llvm::ScheduleHazardRecognizer::HazardType
getHazardType(llvm::SUnit* m, int Stalls = 0)
Description
getHazardType - Return the hazard type of emitting this node. There are three possible results. Either: * NoHazard: it is legal to issue this instruction on this cycle. * Hazard: issuing this instruction would stall the machine. If some other instruction is available, issue it first. * NoopHazard: issuing this instruction would break the program. If some other instruction can be issued, do so, otherwise issue a noop.
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:60
Parameters
- llvm::SUnit* m
- int Stalls = 0
¶unsigned int getMaxLookAhead() const
unsigned int getMaxLookAhead() const
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:43
¶bool isEnabled() const
bool isEnabled() const
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:45
¶virtual ~ScheduleHazardRecognizer()
virtual ~ScheduleHazardRecognizer()
Declared at: llvm/include/llvm/CodeGen/ScheduleHazardRecognizer.h:35