LLVM 20.0.0git
|
Scheduling unit. This is a node in the scheduling DAG. More...
#include "llvm/CodeGen/ScheduleDAG.h"
Public Types | |
typedef SmallVectorImpl< SDep >::iterator | pred_iterator |
typedef SmallVectorImpl< SDep >::iterator | succ_iterator |
typedef SmallVectorImpl< SDep >::const_iterator | const_pred_iterator |
typedef SmallVectorImpl< SDep >::const_iterator | const_succ_iterator |
Public Member Functions | |
SUnit (SDNode *node, unsigned nodenum) | |
Constructs an SUnit for pre-regalloc scheduling to represent an SDNode and any nodes flagged to it. | |
SUnit (MachineInstr *instr, unsigned nodenum) | |
Constructs an SUnit for post-regalloc scheduling to represent a MachineInstr. | |
SUnit () | |
Constructs a placeholder SUnit. | |
bool | isBoundaryNode () const |
Boundary nodes are placeholders for the boundary of the scheduling region. | |
void | setNode (SDNode *N) |
Assigns the representative SDNode for this SUnit. | |
SDNode * | getNode () const |
Returns the representative SDNode for this SUnit. | |
bool | isInstr () const |
Returns true if this SUnit refers to a machine instruction as opposed to an SDNode. | |
void | setInstr (MachineInstr *MI) |
Assigns the instruction for the SUnit. | |
MachineInstr * | getInstr () const |
Returns the representative MachineInstr for this SUnit. | |
bool | addPred (const SDep &D, bool Required=true) |
Adds the specified edge as a pred of the current node if not already. | |
bool | addPredBarrier (SUnit *SU) |
Adds a barrier edge to SU by calling addPred(), with latency 0 generally or latency 1 for a store followed by a load. | |
void | removePred (const SDep &D) |
Removes the specified edge as a pred of the current node if it exists. | |
unsigned | getDepth () const |
Returns the depth of this node, which is the length of the maximum path up to any node which has no predecessors. | |
unsigned | getHeight () const |
Returns the height of this node, which is the length of the maximum path down to any node which has no successors. | |
void | setDepthToAtLeast (unsigned NewDepth) |
If NewDepth is greater than this node's depth value, sets it to be the new depth value. | |
void | setHeightToAtLeast (unsigned NewHeight) |
If NewHeight is greater than this node's height value, set it to be the new height value. | |
void | setDepthDirty () |
Sets a flag in this node to indicate that its stored Depth value will require recomputation the next time getDepth() is called. | |
void | setHeightDirty () |
Sets a flag in this node to indicate that its stored Height value will require recomputation the next time getHeight() is called. | |
bool | isPred (const SUnit *N) const |
Tests if node N is a predecessor of this node. | |
bool | isSucc (const SUnit *N) const |
Tests if node N is a successor of this node. | |
bool | isTopReady () const |
bool | isBottomReady () const |
void | biasCriticalPath () |
Orders this node's predecessor edges such that the critical path edge occurs first. | |
void | dumpAttributes () const |
Public Attributes | |
SUnit * | OrigNode = nullptr |
If not this, the node from which this node was cloned. | |
const MCSchedClassDesc * | SchedClass |
nullptr or resolved SchedClass. | |
const TargetRegisterClass * | CopyDstRC |
Is a special copy node if != nullptr. | |
const TargetRegisterClass * | CopySrcRC = nullptr |
SmallVector< SDep, 4 > | Preds |
All sunit predecessors. | |
SmallVector< SDep, 4 > | Succs |
All sunit successors. | |
unsigned | NodeNum = BoundaryID |
Entry # of node in the node vector. | |
unsigned | NodeQueueId = 0 |
Queue id of node. | |
unsigned | NumPreds = 0 |
unsigned | NumSuccs = 0 |
unsigned | NumPredsLeft = 0 |
unsigned | NumSuccsLeft = 0 |
unsigned | WeakPredsLeft = 0 |
unsigned | WeakSuccsLeft = 0 |
unsigned | TopReadyCycle = 0 |
Cycle relative to start when node is ready. | |
unsigned | BotReadyCycle = 0 |
Cycle relative to end when node is ready. | |
bool | isVRegCycle: 1 |
May use and def the same vreg. | |
bool | isCall: 1 |
Is a function call. | |
bool | isCallOp: 1 |
Is a function call operand. | |
bool | isTwoAddress: 1 |
Is a two-address instruction. | |
bool | isCommutable: 1 |
Is a commutable instruction. | |
bool | hasPhysRegUses: 1 |
Has physreg uses. | |
bool | hasPhysRegDefs: 1 |
Has physreg defs that are being used. | |
bool | hasPhysRegClobbers: 1 |
Has any physreg defs, used or not. | |
bool | isPending: 1 |
True once pending. | |
bool | isAvailable: 1 |
True once available. | |
bool | isScheduled: 1 |
True once scheduled. | |
bool | isScheduleHigh: 1 |
True if preferable to schedule high. | |
bool | isScheduleLow: 1 |
True if preferable to schedule low. | |
bool | isCloned: 1 |
True if this node has been cloned. | |
bool | isUnbuffered: 1 |
Uses an unbuffered resource. | |
bool | hasReservedResource: 1 |
Uses a reserved resource. | |
unsigned short | NumRegDefsLeft = 0 |
unsigned short | Latency = 0 |
Node latency. | |
Sched::Preference | SchedulingPref: 4 |
Scheduling preference. | |
SDNode * | Node |
Representative node. | |
MachineInstr * | Instr |
Alternatively, a MachineInstr. | |
Scheduling unit. This is a node in the scheduling DAG.
Definition at line 242 of file ScheduleDAG.h.
Definition at line 267 of file ScheduleDAG.h.
Definition at line 268 of file ScheduleDAG.h.
typedef SmallVectorImpl<SDep>::iterator llvm::SUnit::pred_iterator |
Definition at line 265 of file ScheduleDAG.h.
typedef SmallVectorImpl<SDep>::iterator llvm::SUnit::succ_iterator |
Definition at line 266 of file ScheduleDAG.h.
Constructs an SUnit for pre-regalloc scheduling to represent an SDNode and any nodes flagged to it.
Definition at line 318 of file ScheduleDAG.h.
|
inline |
Constructs an SUnit for post-regalloc scheduling to represent a MachineInstr.
Definition at line 330 of file ScheduleDAG.h.
|
inline |
Constructs a placeholder SUnit.
Definition at line 341 of file ScheduleDAG.h.
Adds the specified edge as a pred of the current node if not already.
It also adds the current node as a successor of the specified node.
Definition at line 106 of file ScheduleDAG.cpp.
References assert(), D, llvm::SDep::Data, llvm::SDep::getSUnit(), isScheduled, N, NumPreds, NumPredsLeft, P, Preds, setDepthDirty(), setHeightDirty(), llvm::SDep::setLatency(), llvm::SDep::setSUnit(), Succs, and WeakPredsLeft.
Referenced by llvm::ScheduleDAGInstrs::addChainDependency(), llvm::ScheduleDAGInstrs::addEdge(), llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), addPredBarrier(), llvm::ScheduleDAGInstrs::addVRegDefDeps(), llvm::ScheduleDAGInstrs::buildSchedGraph(), and swapAntiDependences().
Adds a barrier edge to SU by calling addPred(), with latency 0 generally or latency 1 for a store followed by a load.
Definition at line 402 of file ScheduleDAG.h.
References addPred(), llvm::SDep::Barrier, getInstr(), llvm::MachineInstr::mayLoad(), llvm::MachineInstr::mayStore(), and llvm::SDep::setLatency().
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph(), and llvm::ScheduleDAGInstrs::reduceHugeMemNodeMaps().
void SUnit::biasCriticalPath | ( | ) |
Orders this node's predecessor edges such that the critical path edge occurs first.
Definition at line 325 of file ScheduleDAG.cpp.
References llvm::SDep::Data, I, MaxDepth, NumPreds, Preds, and std::swap().
Referenced by llvm::ScheduleDAGMI::findRootsAndBiasEdges().
LLVM_DUMP_METHOD void SUnit::dumpAttributes | ( | ) | const |
Definition at line 343 of file ScheduleDAG.cpp.
References llvm::dbgs(), getDepth(), getHeight(), Latency, NumPredsLeft, NumRegDefsLeft, NumSuccsLeft, WeakPredsLeft, and WeakSuccsLeft.
Referenced by llvm::ScheduleDAG::dumpNodeAll().
|
inline |
Returns the depth of this node, which is the length of the maximum path up to any node which has no predecessors.
Definition at line 416 of file ScheduleDAG.h.
References llvm::Depth.
Referenced by llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(), BUCompareLatency(), llvm::SchedBoundary::bumpNode(), BURRSort(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), CriticalPathStep(), dumpAttributes(), llvm::SchedDFSResult::getILP(), llvm::SchedBoundary::getUnscheduledLatency(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::isLatencyBound(), llvm::GenericScheduler::registerRoots(), llvm::PostGenericScheduler::registerRoots(), llvm::ConvergingVLIWScheduler::SchedulingCost(), setDepthToAtLeast(), llvm::GenericSchedulerBase::traceCandidate(), llvm::tryLatency(), and llvm::ScheduleDAG::VerifyScheduledDAG().
|
inline |
Returns the height of this node, which is the length of the maximum path down to any node which has no successors.
Definition at line 424 of file ScheduleDAG.h.
Referenced by BUCompareLatency(), llvm::SchedBoundary::bumpNode(), BURRSort(), closestSucc(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), dumpAttributes(), llvm::SchedBoundary::getUnscheduledLatency(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::isLatencyBound(), llvm::ConvergingVLIWScheduler::SchedulingCost(), setHeightToAtLeast(), llvm::ResourcePriorityQueue::SUSchedulingCost(), llvm::GenericSchedulerBase::traceCandidate(), llvm::tryLatency(), and llvm::ScheduleDAG::VerifyScheduledDAG().
|
inline |
Returns the representative MachineInstr for this SUnit.
This may be used during post-regalloc scheduling.
Definition at line 390 of file ScheduleDAG.h.
References assert(), and Instr.
Referenced by llvm::ScheduleDAGInstrs::addChainDependency(), llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), addPredBarrier(), llvm::ScheduleDAGInstrs::addVRegDefDeps(), llvm::ScheduleDAGInstrs::addVRegUseDeps(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), llvm::HexagonSubtarget::BankConflictMutation::apply(), llvm::RISCVVectorMaskDAGMutation::apply(), llvm::ARMOverrideBypasses::apply(), llvm::biasPhysReg(), llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(), llvm::CriticalAntiDepBreaker::BreakAntiDependencies(), llvm::SchedBoundary::bumpNode(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::bumpNode(), llvm::WindowScheduler::calculateMaxCycle(), llvm::ResourceManager::calculateResMII(), llvm::HexagonPacketizerList::canPromoteToDotCur(), llvm::HexagonPacketizerList::canPromoteToDotNew(), llvm::HexagonPacketizerList::canPromoteToNewValue(), llvm::HexagonPacketizerList::canPromoteToNewValueStore(), llvm::ResourceManager::canReserveResources(), canUsePressureDiffs(), llvm::SchedBoundary::checkHazard(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::checkHazard(), llvm::ScheduleDAGMILive::collectVRegUses(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), computeLiveOuts(), computeScheduledInsts(), llvm::SMSchedule::computeStart(), llvm::SMSchedule::computeUnpipelineableNodes(), llvm::ScheduleDAGMILive::dump(), llvm::ScheduleDAGInstrs::dump(), llvm::ScheduleDAGInstrs::dumpNode(), llvm::SystemZHazardRecognizer::dumpSU(), llvm::HexagonHazardRecognizer::EmitInstruction(), llvm::GCNHazardRecognizer::EmitInstruction(), llvm::ARMHazardRecognizerFPMLx::EmitInstruction(), llvm::ARMBankConflictHazardRecognizer::EmitInstruction(), llvm::PPCHazardRecognizer970::EmitInstruction(), llvm::SystemZHazardRecognizer::EmitInstruction(), llvm::SMSchedule::finalizeSchedule(), llvm::SwingSchedulerDAG::fixupRegisterOverlaps(), llvm::fuseInstructionPair(), llvm::ScheduleDAGInstrs::getGraphNodeLabel(), llvm::GCNHazardRecognizer::getHazardType(), llvm::ARMHazardRecognizerFPMLx::getHazardType(), llvm::ARMBankConflictHazardRecognizer::getHazardType(), llvm::HexagonHazardRecognizer::getHazardType(), llvm::PPCHazardRecognizer970::getHazardType(), llvm::ScheduleDAG::getInstrDesc(), getMachineInstr(), getRegisterPressures(), llvm::ScheduleDAGInstrs::getSchedClass(), llvm::SystemZHazardRecognizer::getSchedClass(), llvm::GCNSchedStage::getScheduleMetrics(), llvm::SystemZHazardRecognizer::groupingCost(), llvm::HexagonVLIWResourceModel::hasDependence(), llvm::SchedRemainder::init(), llvm::GenericScheduler::initCandidate(), llvm::ScheduleDAGInstrs::initSUnits(), llvm::SMSchedule::insert(), isADDIInstr(), llvm::SwingSchedulerDAG::isBackedge(), llvm::HexagonPacketizerList::isLegalToPacketizeTogether(), llvm::HexagonPacketizerList::isLegalToPruneDependencies(), llvm::SMSchedule::isLoopCarried(), llvm::SwingSchedulerDAG::isLoopCarriedDep(), llvm::VLIWResourceModel::isResourceAvailable(), llvm::ARMOverrideBypasses::makeBundleAssumptions(), llvm::ARMOverrideBypasses::memoryRAWHazard(), multipleIterations(), llvm::SMSchedule::normalizeNonPipelinedInstructions(), llvm::SMSchedule::orderDependence(), llvm::VLIWPacketizerList::PacketizeMIs(), llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::GCNSchedStrategy::pickNode(), llvm::SMSchedule::print(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::R600SchedStrategy::releaseBottomNode(), llvm::SchedBoundary::releaseNode(), llvm::SMSchedule::reorderInstructions(), llvm::GenericScheduler::reschedulePhysReg(), llvm::ResourceManager::reserveResources(), llvm::VLIWResourceModel::reserveResources(), llvm::GCNSchedStrategy::schedNode(), llvm::R600SchedStrategy::schedNode(), llvm::ScheduleDAGMI::schedule(), llvm::SIScheduleDAGMI::schedule(), llvm::SIScheduleBlock::schedule(), llvm::ScheduleDAGMILive::scheduleMI(), llvm::ConvergingVLIWScheduler::SchedulingCost(), llvm::HexagonConvergingVLIWScheduler::SchedulingCost(), llvm::HexagonHazardRecognizer::ShouldPreferAnother(), llvm::GCNHazardRecognizer::ShouldPreferAnother(), llvm::AArch64PostRASchedStrategy::tryCandidate(), llvm::GCNMaxMemoryClauseSchedStrategy::tryCandidate(), llvm::HexagonPacketizerList::updateOffset(), llvm::ScheduleDAGMILive::updatePressureDiffs(), llvm::SchedDFSImpl::visitPostorderNode(), and llvm::SchedDFSImpl::visitPreorder().
|
inline |
Returns the representative SDNode for this SUnit.
This may be used during pre-regalloc scheduling.
Definition at line 370 of file ScheduleDAG.h.
References assert(), Instr, and Node.
Referenced by BURRSort(), canClobberPhysRegDefs(), canClobberReachingPhysRegUse(), canEnableCoalescing(), llvm::ScheduleDAGSDNodes::Clone(), closestSucc(), llvm::ScheduleDAGSDNodes::computeLatency(), llvm::ScheduleDAGSDNodes::dump(), llvm::ScheduleDAGSDNodes::dumpNode(), llvm::ScheduleDAGSDNodes::EmitSchedule(), llvm::ScheduleDAGSDNodes::getGraphNodeLabel(), llvm::ScheduleDAG::getInstrDesc(), hasOnlyLiveInOpers(), hasOnlyLiveOutUses(), hasVRegCycleUse(), llvm::ResourcePriorityQueue::initNumRegDefsLeft(), isOperandOf(), llvm::ResourcePriorityQueue::isResourceAvailable(), llvm::ResourcePriorityQueue::rawRegPressureDelta(), llvm::ResourcePriorityQueue::regPressureDelta(), llvm::ResourcePriorityQueue::reserveResources(), resetVRegCycle(), llvm::ResourcePriorityQueue::scheduledNode(), and llvm::ResourcePriorityQueue::SUSchedulingCost().
|
inline |
Definition at line 467 of file ScheduleDAG.h.
References NumSuccsLeft.
Referenced by llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::ConvergingVLIWScheduler::pickNode(), llvm::GCNSchedStrategy::pickNode(), llvm::ScheduleDAGMI::schedule(), and llvm::ScheduleDAGMILive::scheduleMI().
|
inline |
Boundary nodes are placeholders for the boundary of the scheduling region.
BoundaryNodes can have DAG edges, including Data edges, but they do not correspond to schedulable entities (e.g. instructions) and do not have a valid ID. Consequently, always check for boundary nodes before accessing an associative data structure keyed on node ID.
Definition at line 358 of file ScheduleDAG.h.
References NodeNum.
Referenced by llvm::ARMOverrideBypasses::apply(), llvm::SchedDFSResult::compute(), computePath(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), hasDataSucc(), llvm::SwingSchedulerDAG::isLoopCarriedDep(), and llvm::SMSchedule::latestCycleInChain().
|
inline |
Returns true if this SUnit refers to a machine instruction as opposed to an SDNode.
Definition at line 378 of file ScheduleDAG.h.
References Instr.
Referenced by llvm::HexagonSubtarget::UsrOverflowMutation::apply(), canUsePressureDiffs(), llvm::SMSchedule::computeUnpipelineableNodes(), llvm::ScheduleDAG::getInstrDesc(), llvm::SMSchedule::normalizeNonPipelinedInstructions(), llvm::HexagonConvergingVLIWScheduler::SchedulingCost(), llvm::HexagonHazardRecognizer::ShouldPreferAnother(), llvm::GCNHazardRecognizer::ShouldPreferAnother(), and llvm::GCNMaxMemoryClauseSchedStrategy::tryCandidate().
Tests if node N is a predecessor of this node.
Definition at line 449 of file ScheduleDAG.h.
Referenced by llvm::SMSchedule::computeStart(), and llvm::fuseInstructionPair().
Tests if node N is a successor of this node.
Definition at line 457 of file ScheduleDAG.h.
Referenced by llvm::HexagonPacketizerList::arePredicatesComplements(), llvm::fuseInstructionPair(), llvm::HexagonPacketizerList::isLegalToPacketizeTogether(), and llvm::HexagonPacketizerList::restrictingDepExistInPacket().
|
inline |
Definition at line 464 of file ScheduleDAG.h.
References NumPredsLeft.
Referenced by llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::ConvergingVLIWScheduler::pickNode(), llvm::GCNSchedStrategy::pickNode(), llvm::ScheduleDAGMI::schedule(), and llvm::ScheduleDAGMILive::scheduleMI().
Removes the specified edge as a pred of the current node if it exists.
It also removes the current node as a successor of the specified node.
Definition at line 175 of file ScheduleDAG.cpp.
References assert(), D, llvm::SDep::Data, llvm::find(), I, isScheduled, N, NumPreds, NumPredsLeft, P, Preds, setDepthDirty(), setHeightDirty(), and WeakPredsLeft.
Referenced by llvm::HexagonSubtarget::UsrOverflowMutation::apply(), and swapAntiDependences().
void SUnit::setDepthDirty | ( | ) |
Sets a flag in this node to indicate that its stored Depth value will require recomputation the next time getDepth() is called.
Definition at line 217 of file ScheduleDAG.cpp.
References llvm::SmallVectorBase< Size_T >::empty(), llvm::SDep::getSUnit(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and Succs.
Referenced by addPred(), removePred(), llvm::ARMOverrideBypasses::setBidirLatencies(), and setDepthToAtLeast().
void SUnit::setDepthToAtLeast | ( | unsigned | NewDepth | ) |
If NewDepth is greater than this node's depth value, sets it to be the new depth value.
This also recursively marks successor nodes dirty.
Definition at line 247 of file ScheduleDAG.cpp.
References getDepth(), and setDepthDirty().
void SUnit::setHeightDirty | ( | ) |
Sets a flag in this node to indicate that its stored Height value will require recomputation the next time getHeight() is called.
Definition at line 232 of file ScheduleDAG.cpp.
References llvm::SmallVectorBase< Size_T >::empty(), llvm::SDep::getSUnit(), llvm::SmallVectorImpl< T >::pop_back_val(), Preds, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by addPred(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), removePred(), llvm::ARMOverrideBypasses::setBidirLatencies(), and setHeightToAtLeast().
void SUnit::setHeightToAtLeast | ( | unsigned | NewHeight | ) |
If NewHeight is greater than this node's height value, set it to be the new height value.
This also recursively marks predecessor nodes dirty.
Definition at line 255 of file ScheduleDAG.cpp.
References getHeight(), and setHeightDirty().
|
inline |
Assigns the instruction for the SUnit.
This may be used during post-regalloc scheduling.
Definition at line 382 of file ScheduleDAG.h.
References assert(), Instr, and MI.
Referenced by llvm::ScheduleDAGInstrs::addSchedBarrierDeps(), llvm::SwingSchedulerDAG::applyInstrChange(), and llvm::SwingSchedulerDAG::fixupRegisterOverlaps().
|
inline |
unsigned llvm::SUnit::BotReadyCycle = 0 |
Cycle relative to end when node is ready.
Definition at line 279 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::ScheduleDAGInstrs::dumpNode(), llvm::ScheduleDAGMI::dumpScheduleTraceBottomUp(), llvm::SchedBoundary::getLatencyStallCycles(), llvm::GenericScheduler::releaseBottomNode(), llvm::PostGenericScheduler::releaseBottomNode(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::SchedBoundary::releasePending(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::releasePending(), llvm::ScheduleDAGMI::releasePred(), llvm::GenericScheduler::schedNode(), llvm::PostGenericScheduler::schedNode(), and llvm::ConvergingVLIWScheduler::schedNode().
const TargetRegisterClass* llvm::SUnit::CopyDstRC |
Is a special copy node if != nullptr.
Definition at line 258 of file ScheduleDAG.h.
const TargetRegisterClass* llvm::SUnit::CopySrcRC = nullptr |
Definition at line 260 of file ScheduleDAG.h.
bool llvm::SUnit::hasPhysRegClobbers |
Has any physreg defs, used or not.
Definition at line 293 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::hasPhysRegDefs |
Has physreg defs that are being used.
Definition at line 292 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), BURRSort(), llvm::ScheduleDAGSDNodes::Clone(), llvm::SMSchedule::isValidSchedule(), and llvm::GenericScheduler::schedNode().
bool llvm::SUnit::hasPhysRegUses |
Has physreg uses.
Definition at line 291 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDeps(), and llvm::GenericScheduler::schedNode().
bool llvm::SUnit::hasReservedResource |
Uses a reserved resource.
Definition at line 301 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::SchedBoundary::checkHazard(), llvm::SystemZHazardRecognizer::emitInstruction(), and llvm::ScheduleDAGInstrs::initSUnits().
MachineInstr* llvm::SUnit::Instr |
Alternatively, a MachineInstr.
Definition at line 248 of file ScheduleDAG.h.
Referenced by getInstr(), getNode(), isInstr(), and setInstr().
bool llvm::SUnit::isAvailable |
True once available.
Definition at line 295 of file ScheduleDAG.h.
bool llvm::SUnit::isCall |
Is a function call.
Definition at line 287 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::SchedBoundary::bumpNode(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::bumpNode(), BURRSort(), llvm::ScheduleDAGSDNodes::Clone(), llvm::SystemZHazardRecognizer::emitInstruction(), llvm::SystemZHazardRecognizer::EmitInstruction(), and llvm::ScheduleDAGInstrs::initSUnits().
bool llvm::SUnit::isCallOp |
Is a function call operand.
Definition at line 288 of file ScheduleDAG.h.
Referenced by BURRSort(), and llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::isCloned |
True if this node has been cloned.
Definition at line 299 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), and llvm::ScheduleDAGSDNodes::EmitSchedule().
bool llvm::SUnit::isCommutable |
Is a commutable instruction.
Definition at line 290 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), and llvm::ScheduleDAGInstrs::initSUnits().
bool llvm::SUnit::isPending |
True once pending.
Definition at line 294 of file ScheduleDAG.h.
bool llvm::SUnit::isScheduled |
True once scheduled.
Definition at line 296 of file ScheduleDAG.h.
Referenced by addPred(), llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::GCNSchedStrategy::pickNode(), llvm::R600SchedStrategy::pickNode(), llvm::GCNSchedStrategy::pickNodeBidirectional(), llvm::GenericScheduler::releaseBottomNode(), llvm::PostGenericScheduler::releaseBottomNode(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::GenericScheduler::releaseTopNode(), llvm::PostGenericScheduler::releaseTopNode(), llvm::ConvergingVLIWScheduler::releaseTopNode(), removePred(), llvm::ScheduleDAGMI::schedule(), llvm::ScheduleDAGMILive::schedule(), llvm::ConvergingVLIWScheduler::SchedulingCost(), llvm::HexagonConvergingVLIWScheduler::SchedulingCost(), llvm::ResourcePriorityQueue::SUSchedulingCost(), llvm::ScheduleDAGMILive::updatePressureDiffs(), llvm::ScheduleDAGMI::updateQueues(), and llvm::ScheduleDAG::VerifyScheduledDAG().
bool llvm::SUnit::isScheduleHigh |
True if preferable to schedule high.
Definition at line 297 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), llvm::SystemZPostRASchedStrategy::releaseTopNode(), llvm::ConvergingVLIWScheduler::SchedulingCost(), and llvm::ResourcePriorityQueue::SUSchedulingCost().
bool llvm::SUnit::isScheduleLow |
True if preferable to schedule low.
Definition at line 298 of file ScheduleDAG.h.
Referenced by checkSpecialNodes(), and llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::isTwoAddress |
Is a two-address instruction.
Definition at line 289 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::isUnbuffered |
Uses an unbuffered resource.
Definition at line 300 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::SystemZHazardRecognizer::dumpSU(), llvm::SystemZHazardRecognizer::emitInstruction(), llvm::SystemZHazardRecognizer::EmitInstruction(), llvm::SchedBoundary::getLatencyStallCycles(), llvm::ScheduleDAGInstrs::initSUnits(), llvm::SystemZPostRASchedStrategy::releaseTopNode(), and llvm::SystemZHazardRecognizer::resourcesCost().
bool llvm::SUnit::isVRegCycle |
May use and def the same vreg.
Definition at line 286 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), hasVRegCycleUse(), initVRegCycle(), and resetVRegCycle().
unsigned short llvm::SUnit::Latency = 0 |
Node latency.
Definition at line 303 of file ScheduleDAG.h.
Referenced by llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(), BUCompareLatency(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::ScheduleDAGSDNodes::Clone(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), llvm::ScheduleDAGSDNodes::computeLatency(), dumpAttributes(), llvm::ScheduleDAGInstrs::initSUnits(), and llvm::GCNMaxMemoryClauseSchedStrategy::tryCandidate().
SDNode* llvm::SUnit::Node |
unsigned llvm::SUnit::NodeNum = BoundaryID |
Entry # of node in the node vector.
Definition at line 270 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGTopologicalSort::AddSUnitWithoutPredecessors(), llvm::SIScheduleBlock::addUnit(), BUCompareLatency(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::SchedBoundary::bumpNode(), BURRSort(), CalcNodeSethiUllmanNumber(), llvm::SchedBoundary::checkHazard(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), llvm::GCNSchedStage::computeSUnitReadyCycle(), llvm::SMSchedule::computeUnpipelineableNodes(), llvm::ScheduleDAG::dumpNodeName(), llvm::ScheduleDAGMI::dumpScheduleTraceBottomUp(), llvm::ScheduleDAGMI::dumpScheduleTraceTopDown(), llvm::SystemZHazardRecognizer::dumpSU(), llvm::SIScheduleBlock::finalizeUnits(), llvm::SchedBoundary::findMaxLatency(), llvm::ScheduleDAGSDNodes::getGraphNodeLabel(), llvm::SchedDFSResult::getILP(), llvm::DOTGraphTraits< ScheduleDAGMI * >::getNodeLabel(), llvm::SchedDFSResult::getNumInstrs(), llvm::ScheduleDAGMILive::getPressureDiff(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), llvm::SchedDFSResult::getSubtreeID(), hasVRegCycleUse(), llvm::GenericScheduler::initCandidate(), llvm::ScheduleDAGTopologicalSort::InitDAGTopologicalSorting(), initVRegCycle(), llvm::ScheduleDAGInstrs::insertBarrierChain(), isBoundaryNode(), llvm::ScheduleDAGTopologicalSort::IsReachable(), llvm::SIScheduleBlockCreator::isSUInBlock(), llvm::SchedDFSImpl::isVisited(), llvm::SchedDFSImpl::joinPredSubtree(), llvm::SMSchedule::normalizeNonPipelinedInstructions(), llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::GCNSchedStrategy::pickNode(), llvm::ConvergingVLIWScheduler::pickNodeFromQueue(), llvm::SMSchedule::print(), llvm::LatencyPriorityQueue::push(), llvm::ResourcePriorityQueue::push(), llvm::ScheduleDAGInstrs::reduceHugeMemNodeMaps(), llvm::SystemZPostRASchedStrategy::schedNode(), llvm::SIScheduleDAGMI::schedule(), llvm::SIScheduler::scheduleVariant(), llvm::ResourcePriorityQueue::SUSchedulingCost(), llvm::GenericSchedulerBase::traceCandidate(), llvm::PostGenericScheduler::tryCandidate(), llvm::PPCPostRASchedStrategy::tryCandidate(), llvm::GenericScheduler::tryCandidate(), llvm::GCNMaxILPSchedStrategy::tryCandidate(), llvm::GCNMaxMemoryClauseSchedStrategy::tryCandidate(), llvm::PPCPreRASchedStrategy::tryCandidate(), llvm::ScheduleDAGMILive::updatePressureDiffs(), llvm::SchedDFSImpl::visitPostorderEdge(), llvm::SchedDFSImpl::visitPostorderNode(), and llvm::SchedDFSImpl::visitPreorder().
unsigned llvm::SUnit::NodeQueueId = 0 |
Queue id of node.
Definition at line 271 of file ScheduleDAG.h.
Referenced by BURRSort(), llvm::ResourcePriorityQueue::initNodes(), llvm::ReadyQueue::isInQueue(), and llvm::ReadyQueue::push().
unsigned llvm::SUnit::NumPreds = 0 |
Definition at line 272 of file ScheduleDAG.h.
Referenced by addPred(), llvm::ScheduleDAGTopologicalSort::AddSUnitWithoutPredecessors(), biasCriticalPath(), canEnableCoalescing(), removePred(), llvm::ResourcePriorityQueue::scheduledNode(), and llvm::ScheduleDAG::VerifyScheduledDAG().
unsigned llvm::SUnit::NumPredsLeft = 0 |
Definition at line 274 of file ScheduleDAG.h.
Referenced by addPred(), llvm::biasPhysReg(), dumpAttributes(), isSingleUnscheduledPred(), isTopReady(), llvm::ScheduleDAGMI::releaseSucc(), removePred(), and llvm::ScheduleDAG::VerifyScheduledDAG().
unsigned short llvm::SUnit::NumRegDefsLeft = 0 |
Definition at line 302 of file ScheduleDAG.h.
Referenced by dumpAttributes(), llvm::ResourcePriorityQueue::initNumRegDefsLeft(), llvm::ScheduleDAGSDNodes::InitNumRegDefsLeft(), and llvm::ResourcePriorityQueue::scheduledNode().
unsigned llvm::SUnit::NumSuccs = 0 |
Definition at line 273 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph(), canEnableCoalescing(), and llvm::ScheduleDAG::VerifyScheduledDAG().
unsigned llvm::SUnit::NumSuccsLeft = 0 |
Definition at line 275 of file ScheduleDAG.h.
Referenced by llvm::biasPhysReg(), dumpAttributes(), isBottomReady(), isSingleUnscheduledSucc(), llvm::ScheduleDAGMI::releasePred(), and llvm::ScheduleDAG::VerifyScheduledDAG().
SUnit* llvm::SUnit::OrigNode = nullptr |
If not this, the node from which this node was cloned.
(SD scheduling only)
Definition at line 252 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), and llvm::ScheduleDAGSDNodes::EmitSchedule().
SmallVector<SDep, 4> llvm::SUnit::Preds |
All sunit predecessors.
Definition at line 262 of file ScheduleDAG.h.
Referenced by addPred(), AntiDepEdges(), llvm::HexagonSubtarget::UsrOverflowMutation::apply(), biasCriticalPath(), llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(), llvm::CriticalAntiDepBreaker::BreakAntiDependencies(), calcMaxScratches(), CalcNodeSethiUllmanNumber(), llvm::HexagonPacketizerList::calcStall(), canClobberReachingPhysRegUse(), computePath(), llvm::SMSchedule::computeStart(), llvm::GCNSchedStage::computeSUnitReadyCycle(), llvm::SMSchedule::computeUnpipelineableNodes(), CriticalPathStep(), llvm::ScheduleDAG::dumpNodeAll(), llvm::SMSchedule::earliestCycleInChain(), llvm::fuseInstructionPair(), getPredClusterSU(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), hasDataDependencyPred(), hasOnlyLiveInOpers(), hasVRegCycleUse(), llvm::ScheduleDAGTopologicalSort::InitDAGTopologicalSorting(), initVRegCycle(), isPred(), isSingleUnscheduledPred(), multipleIterations(), llvm::NodeSet::NodeSet(), llvm::SMSchedule::normalizeNonPipelinedInstructions(), numberCtrlPredInSU(), llvm::SMSchedule::onlyHasLoopCarriedOutputOrOrderPreds(), llvm::SMSchedule::orderDependence(), llvm::ConvergingVLIWScheduler::pickNodeFromQueue(), pred_L(), llvm::ScheduleDAGMI::releasePredecessors(), llvm::ConvergingVLIWScheduler::releaseTopNode(), removePred(), llvm::GenericScheduler::reschedulePhysReg(), resetVRegCycle(), llvm::ResourcePriorityQueue::scheduledNode(), llvm::ConvergingVLIWScheduler::SchedulingCost(), llvm::ARMOverrideBypasses::setBidirLatencies(), setHeightDirty(), succ_L(), swapAntiDependences(), llvm::HexagonPacketizerList::updateOffset(), llvm::SchedDFSImpl::visitPostorderNode(), and llvm::ScheduleDAGTopologicalSort::WillCreateCycle().
const MCSchedClassDesc* llvm::SUnit::SchedClass |
nullptr or resolved SchedClass.
Definition at line 255 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::getSchedClass(), and llvm::SystemZHazardRecognizer::getSchedClass().
Sched::Preference llvm::SUnit::SchedulingPref |
Scheduling preference.
Definition at line 312 of file ScheduleDAG.h.
Referenced by BUCompareLatency(), llvm::ScheduleDAGSDNodes::Clone(), and llvm::ScheduleDAGSDNodes::newSUnit().
SmallVector<SDep, 4> llvm::SUnit::Succs |
All sunit successors.
Definition at line 263 of file ScheduleDAG.h.
Referenced by addPred(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), llvm::HexagonPacketizerList::arePredicatesComplements(), canClobberReachingPhysRegUse(), closestSucc(), computePath(), llvm::SMSchedule::computeStart(), llvm::SMSchedule::computeUnpipelineableNodes(), llvm::ScheduleDAG::dumpNodeAll(), llvm::HexagonHazardRecognizer::EmitInstruction(), llvm::fuseInstructionPair(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), hasDataSucc(), llvm::VLIWResourceModel::hasDependence(), hasOnlyLiveOutUses(), llvm::HexagonPacketizerList::isLegalToPacketizeTogether(), isSingleUnscheduledSucc(), isSucc(), isSuccOrder(), llvm::SMSchedule::isValidSchedule(), llvm::SchedDFSImpl::joinPredSubtree(), llvm::SMSchedule::latestCycleInChain(), numberCtrlDepsInSU(), llvm::SMSchedule::onlyHasLoopCarriedOutputOrOrderPreds(), llvm::SMSchedule::orderDependence(), llvm::ConvergingVLIWScheduler::pickNodeFromQueue(), pred_L(), llvm::LatencyPriorityQueue::push(), llvm::ResourcePriorityQueue::push(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::ScheduleDAGMI::releaseSuccessors(), llvm::GenericScheduler::reschedulePhysReg(), llvm::HexagonPacketizerList::restrictingDepExistInPacket(), llvm::LatencyPriorityQueue::scheduledNode(), llvm::ResourcePriorityQueue::scheduledNode(), llvm::ConvergingVLIWScheduler::SchedulingCost(), setDepthDirty(), and succ_L().
unsigned llvm::SUnit::TopReadyCycle = 0 |
Cycle relative to start when node is ready.
Definition at line 278 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::ScheduleDAGInstrs::dumpNode(), llvm::ScheduleDAGMI::dumpScheduleTraceTopDown(), llvm::SchedBoundary::getLatencyStallCycles(), llvm::SchedBoundary::releasePending(), llvm::ConvergingVLIWScheduler::VLIWSchedBoundary::releasePending(), llvm::ScheduleDAGMI::releaseSucc(), llvm::GenericScheduler::releaseTopNode(), llvm::PostGenericScheduler::releaseTopNode(), llvm::ConvergingVLIWScheduler::releaseTopNode(), llvm::GenericScheduler::schedNode(), llvm::PostGenericScheduler::schedNode(), and llvm::ConvergingVLIWScheduler::schedNode().
unsigned llvm::SUnit::WeakPredsLeft = 0 |
Definition at line 276 of file ScheduleDAG.h.
Referenced by addPred(), dumpAttributes(), llvm::getWeakLeft(), llvm::ScheduleDAGMI::releaseSucc(), and removePred().
unsigned llvm::SUnit::WeakSuccsLeft = 0 |
Definition at line 277 of file ScheduleDAG.h.
Referenced by dumpAttributes(), llvm::getWeakLeft(), and llvm::ScheduleDAGMI::releasePred().