struct ConvergingVLIWScheduler::VLIWSchedBoundary
Declaration
struct ConvergingVLIWScheduler::VLIWSchedBoundary { /* full declaration omitted */ };
Description
Each Scheduling boundary is associated with ready queues. It tracks the current cycle in whichever direction at has moved, and maintains the state of "hazards" and other interlocks at the current cycle.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:126
Member Variables
- public llvm::VLIWMachineScheduler* DAG = nullptr
- public const llvm::TargetSchedModel* SchedModel = nullptr
- public llvm::ReadyQueue Available
- public llvm::ReadyQueue Pending
- public bool CheckPending = false
- public llvm::ScheduleHazardRecognizer* HazardRec = nullptr
- public llvm::VLIWResourceModel* ResourceModel = nullptr
- public unsigned int CurrCycle = 0
- public unsigned int IssueCount = 0
- public unsigned int CriticalPathLength = 0
- public unsigned int MinReadyCycle = std::numeric_limits<unsigned int>::max()
- MinReadyCycle - Cycle of the soonest available instruction.
- public unsigned int MaxMinLatency = 0
Method Overview
- public VLIWSchedBoundary(unsigned int ID, const llvm::Twine & Name)
- public void bumpCycle()
- public void bumpNode(llvm::SUnit * SU)
- public bool checkHazard(llvm::SUnit * SU)
- public void init(llvm::VLIWMachineScheduler * dag, const llvm::TargetSchedModel * smodel)
- public bool isLatencyBound(llvm::SUnit * SU)
- public bool isTop() const
- public llvm::SUnit * pickOnlyChoice()
- public void releaseNode(llvm::SUnit * SU, unsigned int ReadyCycle)
- public void releasePending()
- public void removeReady(llvm::SUnit * SU)
- public ~VLIWSchedBoundary()
Methods
¶VLIWSchedBoundary(unsigned int ID,
const llvm::Twine& Name)
VLIWSchedBoundary(unsigned int ID,
const llvm::Twine& Name)
Description
Pending queues extend the ready queues with the same ID and the PendingFlag set.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:149
Parameters
- unsigned int ID
- const llvm::Twine& Name
¶void bumpCycle()
void bumpCycle()
Description
Move the boundary of scheduled code by one cycle.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:189
¶void bumpNode(llvm::SUnit* SU)
void bumpNode(llvm::SUnit* SU)
Description
Move the boundary of scheduled code by one SUnit.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:191
Parameters
- llvm::SUnit* SU
¶bool checkHazard(llvm::SUnit* SU)
bool checkHazard(llvm::SUnit* SU)
Description
Does this SU have a hazard within the current instruction group. The scheduler supports two modes of hazard recognition. The first is the ScheduleHazardRecognizer API. It is a fully general hazard recognizer that supports highly complicated in-order reservation tables (ScoreboardHazardRecognizer) and arbitrary target-specific logic. The second is a streamlined mechanism that checks for hazards based on simple counters that the scheduler itself maintains. It explicitly checks for instruction dispatch limitations, including the number of micro-ops that can dispatch per cycle. TODO: Also check whether the SU must start a new group.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:185
Parameters
- llvm::SUnit* SU
¶void init(llvm::VLIWMachineScheduler* dag,
const llvm::TargetSchedModel* smodel)
void init(llvm::VLIWMachineScheduler* dag,
const llvm::TargetSchedModel* smodel)
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:155
Parameters
- llvm::VLIWMachineScheduler* dag
- const llvm::TargetSchedModel* smodel
¶bool isLatencyBound(llvm::SUnit* SU)
bool isLatencyBound(llvm::SUnit* SU)
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:199
Parameters
- llvm::SUnit* SU
¶bool isTop() const
bool isTop() const
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:181
¶llvm::SUnit* pickOnlyChoice()
llvm::SUnit* pickOnlyChoice()
Description
If this queue only has one ready candidate, return it. As a side effect, advance the cycle until at least one node is ready. If multiple instructions are ready, return NULL.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:197
¶void releaseNode(llvm::SUnit* SU,
unsigned int ReadyCycle)
void releaseNode(llvm::SUnit* SU,
unsigned int ReadyCycle)
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:187
Parameters
- llvm::SUnit* SU
- unsigned int ReadyCycle
¶void releasePending()
void releasePending()
Description
Release pending ready nodes in to the available queue. This makes them visible to heuristics.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:193
¶void removeReady(llvm::SUnit* SU)
void removeReady(llvm::SUnit* SU)
Description
Remove SU from the ready set for this boundary.
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:195
Parameters
- llvm::SUnit* SU
¶~VLIWSchedBoundary()
~VLIWSchedBoundary()
Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:153