LLVM: llvm::ConvergingVLIWScheduler::VLIWSchedBoundary Struct Reference (original) (raw)

Each Scheduling boundary is associated with ready queues. More...

#include "[llvm/CodeGen/VLIWMachineScheduler.h](VLIWMachineScheduler%5F8h%5Fsource.html)"

Public Member Functions
VLIWSchedBoundary (unsigned ID, const Twine &Name)
Pending queues extend the ready queues with the same ID and the PendingFlag set.
~VLIWSchedBoundary ()
VLIWSchedBoundary & operator= (const VLIWSchedBoundary &other)=delete
VLIWSchedBoundary (const VLIWSchedBoundary &other)=delete
void init (VLIWMachineScheduler *dag, const TargetSchedModel *smodel)
bool isTop () const
bool checkHazard (SUnit *SU)
Does this SU have a hazard within the current instruction group.
void releaseNode (SUnit *SU, unsigned ReadyCycle)
void bumpCycle ()
Move the boundary of scheduled code by one cycle.
void bumpNode (SUnit *SU)
Move the boundary of scheduled code by one SUnit.
void releasePending ()
Release pending ready nodes in to the available queue.
void removeReady (SUnit *SU)
Remove SU from the ready set for this boundary.
SUnit * pickOnlyChoice ()
If this queue only has one ready candidate, return it.
bool isLatencyBound (SUnit *SU)
Public Attributes
VLIWMachineScheduler * DAG = nullptr
const TargetSchedModel * SchedModel = nullptr
ReadyQueue Available
ReadyQueue Pending
bool CheckPending = false
ScheduleHazardRecognizer * HazardRec = nullptr
VLIWResourceModel * ResourceModel = nullptr
unsigned CurrCycle = 0
unsigned IssueCount = 0
unsigned CriticalPathLength = 0
unsigned MinReadyCycle = std::numeric_limits<unsigned>::max()
MinReadyCycle - Cycle of the soonest available instruction.
unsigned MaxMinLatency = 0

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.

Definition at line 127 of file VLIWMachineScheduler.h.

llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::VLIWSchedBoundary ( unsigned ID, const Twine & Name ) inline

~VLIWSchedBoundary()

ConvergingVLIWScheduler::VLIWSchedBoundary::~VLIWSchedBoundary ( )

VLIWSchedBoundary() [2/2]

bumpCycle()

void ConvergingVLIWScheduler::VLIWSchedBoundary::bumpCycle ( )

Move the boundary of scheduled code by one cycle.

Definition at line 383 of file VLIWMachineScheduler.cpp.

References assert(), Available, CheckPending, CurrCycle, llvm::dbgs(), HazardRec, IssueCount, isTop(), LLVM_DEBUG, MinReadyCycle, and SchedModel.

Referenced by bumpNode(), and pickOnlyChoice().

bumpNode()

void ConvergingVLIWScheduler::VLIWSchedBoundary::bumpNode ( SUnit * SU )

Move the boundary of scheduled code by one SUnit.

Definition at line 410 of file VLIWMachineScheduler.cpp.

References bumpCycle(), CurrCycle, llvm::dbgs(), llvm::SUnit::getInstr(), HazardRec, llvm::SUnit::isCall, IssueCount, isTop(), LLVM_DEBUG, ResourceModel, and SchedModel.

checkHazard()

bool ConvergingVLIWScheduler::VLIWSchedBoundary::checkHazard ( SUnit * SU )

init()

isLatencyBound()

bool llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::isLatencyBound ( SUnit * SU) inline

isTop()

bool llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::isTop ( ) const inline

operator=()

pickOnlyChoice()

SUnit * ConvergingVLIWScheduler::VLIWSchedBoundary::pickOnlyChoice ( )

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.

Definition at line 480 of file VLIWMachineScheduler.cpp.

References assert(), Available, bumpCycle(), CheckPending, llvm::getWeakLeft(), HazardRec, isTop(), MaxMinLatency, Pending, releasePending(), and ResourceModel.

releaseNode()

void ConvergingVLIWScheduler::VLIWSchedBoundary::releaseNode ( SUnit * SU,
unsigned ReadyCycle )

releasePending()

void ConvergingVLIWScheduler::VLIWSchedBoundary::releasePending ( )

removeReady()

void ConvergingVLIWScheduler::VLIWSchedBoundary::removeReady ( SUnit * SU )

Available

ReadyQueue llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::Available

CheckPending

bool llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::CheckPending = false

CriticalPathLength

unsigned llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::CriticalPathLength = 0

CurrCycle

unsigned llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::CurrCycle = 0

DAG

HazardRec

IssueCount

unsigned llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::IssueCount = 0

MaxMinLatency

unsigned llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::MaxMinLatency = 0

MinReadyCycle

unsigned llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::MinReadyCycle = std::numeric_limits<unsigned>::max()

Pending

ReadyQueue llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::Pending

ResourceModel

VLIWResourceModel* llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::ResourceModel = nullptr

SchedModel


The documentation for this struct was generated from the following files: