LLVM
8.0.1
|
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. More... | |
SUnit (MachineInstr *instr, unsigned nodenum) | |
Constructs an SUnit for post-regalloc scheduling to represent a MachineInstr. More... | |
SUnit () | |
Constructs a placeholder SUnit. More... | |
bool | isBoundaryNode () const |
Boundary nodes are placeholders for the boundary of the scheduling region. More... | |
void | setNode (SDNode *N) |
Assigns the representative SDNode for this SUnit. More... | |
SDNode * | getNode () const |
Returns the representative SDNode for this SUnit. More... | |
bool | isInstr () const |
Returns true if this SUnit refers to a machine instruction as opposed to an SDNode. More... | |
void | setInstr (MachineInstr *MI) |
Assigns the instruction for the SUnit. More... | |
MachineInstr * | getInstr () const |
Returns the representative MachineInstr for this SUnit. More... | |
bool | addPred (const SDep &D, bool Required=true) |
Adds the specified edge as a pred of the current node if not already. More... | |
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. More... | |
void | removePred (const SDep &D) |
Removes the specified edge as a pred of the current node if it exists. More... | |
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. More... | |
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. More... | |
void | setDepthToAtLeast (unsigned NewDepth) |
If NewDepth is greater than this node's depth value, sets it to be the new depth value. More... | |
void | setHeightToAtLeast (unsigned NewHeight) |
If NewDepth is greater than this node's depth value, set it to be the new height value. More... | |
void | setDepthDirty () |
Sets a flag in this node to indicate that its stored Depth value will require recomputation the next time getDepth() is called. More... | |
void | setHeightDirty () |
Sets a flag in this node to indicate that its stored Height value will require recomputation the next time getHeight() is called. More... | |
bool | isPred (const SUnit *N) const |
Tests if node N is a predecessor of this node. More... | |
bool | isSucc (const SUnit *N) const |
Tests if node N is a successor of this node. More... | |
bool | isTopReady () const |
bool | isBottomReady () const |
void | biasCriticalPath () |
Orders this node's predecessor edges such that the critical path edge occurs first. More... | |
void | dumpAttributes () const |
Public Attributes | |
SUnit * | OrigNode = nullptr |
If not this, the node from which this node was cloned. More... | |
const MCSchedClassDesc * | SchedClass |
nullptr or resolved SchedClass. More... | |
SmallVector< SDep, 4 > | Preds |
All sunit predecessors. More... | |
SmallVector< SDep, 4 > | Succs |
All sunit successors. More... | |
unsigned | NodeNum = BoundaryID |
Entry # of node in the node vector. More... | |
unsigned | NodeQueueId = 0 |
Queue id of node. More... | |
unsigned | NumPreds = 0 |
of SDep::Data preds.More... | |
unsigned | NumSuccs = 0 |
of SDep::Data sucss.More... | |
unsigned | NumPredsLeft = 0 |
of preds not scheduled.More... | |
unsigned | NumSuccsLeft = 0 |
of succs not scheduled.More... | |
unsigned | WeakPredsLeft = 0 |
of weak preds not scheduled.More... | |
unsigned | WeakSuccsLeft = 0 |
of weak succs not scheduled.More... | |
unsigned short | NumRegDefsLeft = 0 |
of reg defs with no scheduled use.More... | |
unsigned short | Latency = 0 |
Node latency. More... | |
bool | isVRegCycle: 1 |
May use and def the same vreg. More... | |
bool | isCall: 1 |
Is a function call. More... | |
bool | isCallOp: 1 |
Is a function call operand. More... | |
bool | isTwoAddress: 1 |
Is a two-address instruction. More... | |
bool | isCommutable: 1 |
Is a commutable instruction. More... | |
bool | hasPhysRegUses: 1 |
Has physreg uses. More... | |
bool | hasPhysRegDefs: 1 |
Has physreg defs that are being used. More... | |
bool | hasPhysRegClobbers: 1 |
Has any physreg defs, used or not. More... | |
bool | isPending: 1 |
True once pending. More... | |
bool | isAvailable: 1 |
True once available. More... | |
bool | isScheduled: 1 |
True once scheduled. More... | |
bool | isScheduleHigh: 1 |
True if preferable to schedule high. More... | |
bool | isScheduleLow: 1 |
True if preferable to schedule low. More... | |
bool | isCloned: 1 |
True if this node has been cloned. More... | |
bool | isUnbuffered: 1 |
Uses an unbuffered resource. More... | |
bool | hasReservedResource: 1 |
Uses a reserved resource. More... | |
Sched::Preference | SchedulingPref = Sched::None |
Scheduling preference. More... | |
unsigned | TopReadyCycle = 0 |
Cycle relative to start when node is ready. More... | |
unsigned | BotReadyCycle = 0 |
Cycle relative to end when node is ready. More... | |
const TargetRegisterClass * | CopyDstRC |
Is a special copy node if != nullptr. More... | |
const TargetRegisterClass * | CopySrcRC = nullptr |
Scheduling unit. This is a node in the scheduling DAG.
Definition at line 246 of file ScheduleDAG.h.
typedef SmallVectorImpl<SDep>::const_iterator llvm::SUnit::const_pred_iterator |
Definition at line 265 of file ScheduleDAG.h.
typedef SmallVectorImpl<SDep>::const_iterator llvm::SUnit::const_succ_iterator |
Definition at line 266 of file ScheduleDAG.h.
typedef SmallVectorImpl<SDep>::iterator llvm::SUnit::pred_iterator |
Definition at line 263 of file ScheduleDAG.h.
typedef SmallVectorImpl<SDep>::iterator llvm::SUnit::succ_iterator |
Definition at line 264 of file ScheduleDAG.h.
Constructs an SUnit for pre-regalloc scheduling to represent an SDNode and any nodes flagged to it.
Definition at line 312 of file ScheduleDAG.h.
|
inline |
Constructs an SUnit for post-regalloc scheduling to represent a MachineInstr.
Definition at line 323 of file ScheduleDAG.h.
|
inline |
Constructs a placeholder SUnit.
Definition at line 333 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 103 of file ScheduleDAG.cpp.
References assert(), D, llvm::SDep::Data, llvm::SDep::getKind(), llvm::SDep::getLatency(), llvm::SDep::getSUnit(), isScheduled, llvm::SDep::isWeak(), llvm::max(), N, NumSuccs, NumSuccsLeft, P, setHeightDirty(), llvm::SDep::setLatency(), llvm::SDep::setSUnit(), Succs, and WeakSuccsLeft.
Referenced by llvm::ScheduleDAGInstrs::addChainDependency(), llvm::ScheduleDAGMI::addEdge(), llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::ScheduleDAGInstrs::addVRegDefDeps(), llvm::HexagonSubtarget::BankConflictMutation::apply(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::GCNSubtarget::getMaxNumVGPRs(), getUnderlyingObjects(), 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 388 of file ScheduleDAG.h.
References llvm::SDep::Barrier, getInstr(), llvm::MachineInstr::mayStore(), and llvm::SDep::setLatency().
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::GCNSubtarget::getMaxNumVGPRs(), and llvm::ScheduleDAGInstrs::reduceHugeMemNodeMaps().
void SUnit::biasCriticalPath | ( | ) |
Orders this node's predecessor edges such that the critical path edge occurs first.
Definition at line 321 of file ScheduleDAG.cpp.
References llvm::SDep::Data, E, I, MaxDepth, and std::swap().
LLVM_DUMP_METHOD void SUnit::dumpAttributes | ( | ) | const |
Definition at line 337 of file ScheduleDAG.cpp.
References llvm::dbgs(), and llvm::Latency.
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 402 of file ScheduleDAG.h.
References llvm::Depth.
Referenced by BUCompareLatency(), llvm::SchedBoundary::bumpNode(), BURRSort(), canEnableCoalescing(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), CriticalPathStep(), llvm::SchedDFSResult::getILP(), llvm::SchedBoundary::getUnscheduledLatency(), INITIALIZE_PASS(), llvm::GenericScheduler::registerRoots(), llvm::PostGenericScheduler::registerRoots(), llvm::ConvergingVLIWScheduler::SchedulingCost(), 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 410 of file ScheduleDAG.h.
Referenced by BUCompareLatency(), llvm::SchedBoundary::bumpNode(), BURRSort(), canEnableCoalescing(), closestSucc(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), llvm::SchedBoundary::getUnscheduledLatency(), llvm::ConvergingVLIWScheduler::SchedulingCost(), 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 377 of file ScheduleDAG.h.
References assert(), D, and llvm::cl::Required.
Referenced by llvm::ScheduleDAGInstrs::addChainDependency(), llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), addPredBarrier(), llvm::ScheduleDAGInstrs::addVRegDefDeps(), llvm::ScheduleDAGInstrs::addVRegUseDeps(), llvm::HexagonSubtarget::adjustSchedDependency(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), llvm::HexagonSubtarget::BankConflictMutation::apply(), llvm::biasPhysReg(), llvm::SchedBoundary::bumpNode(), llvm::HexagonPacketizerList::canPromoteToDotCur(), llvm::HexagonPacketizerList::canPromoteToDotNew(), llvm::HexagonPacketizerList::canPromoteToNewValue(), llvm::HexagonPacketizerList::canPromoteToNewValueStore(), llvm::SchedBoundary::checkHazard(), llvm::ScheduleDAGMILive::collectVRegUses(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), llvm::createCopyConstrainDAGMutation(), llvm::ScheduleDAGInstrs::dump(), llvm::ScheduleDAGInstrs::dumpNode(), llvm::SystemZHazardRecognizer::dumpSU(), llvm::ARMHazardRecognizer::EmitInstruction(), llvm::HexagonHazardRecognizer::EmitInstruction(), llvm::PPCHazardRecognizer970::EmitInstruction(), llvm::GCNHazardRecognizer::EmitInstruction(), llvm::SystemZHazardRecognizer::EmitInstruction(), llvm::SMSchedule::finalizeSchedule(), llvm::SwingSchedulerDAG::fixupRegisterOverlaps(), fuseInstructionPair(), llvm::SwingSchedulerDAG::getDistance(), llvm::ScheduleDAGInstrs::getGraphNodeLabel(), llvm::ARMHazardRecognizer::getHazardType(), llvm::HexagonHazardRecognizer::getHazardType(), llvm::PPCHazardRecognizer970::getHazardType(), llvm::GCNHazardRecognizer::getHazardType(), llvm::ScheduleDAG::getInstrDesc(), getMachineInstr(), llvm::GCNSubtarget::getMaxNumVGPRs(), llvm::SystemZHazardRecognizer::getSchedClass(), llvm::ScheduleDAGInstrs::getSchedClass(), getZeroLatency(), llvm::SystemZHazardRecognizer::groupingCost(), hasDataDependencyPred(), hasDependence(), llvm::SchedRemainder::init(), llvm::GenericScheduler::initCandidate(), llvm::GCNMaxOccupancySchedStrategy::initialize(), INITIALIZE_PASS(), llvm::ScheduleDAGInstrs::initSUnits(), llvm::SMSchedule::insert(), llvm::SwingSchedulerDAG::isBackedge(), isIntersect(), llvm::HexagonPacketizerList::isLegalToPacketizeTogether(), llvm::HexagonPacketizerList::isLegalToPruneDependencies(), llvm::SwingSchedulerDAG::isLoopCarriedDep(), llvm::VLIWResourceModel::isResourceAvailable(), llvm::SMSchedule::isValidSchedule(), llvm::SMSchedule::orderDependence(), llvm::VLIWPacketizerList::PacketizeMIs(), llvm::GCNMaxOccupancySchedStrategy::pickNode(), llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::GCNHazardRecognizer::PreEmitNoops(), llvm::SMSchedule::print(), llvm::R600SchedStrategy::releaseBottomNode(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::SchedBoundary::releaseNode(), llvm::GenericScheduler::reschedulePhysReg(), llvm::VLIWResourceModel::reserveResources(), llvm::SystemZHazardRecognizer::Reset(), llvm::R600SchedStrategy::schedNode(), llvm::SIScheduleBlock::schedule(), llvm::ScheduleDAGMI::schedule(), llvm::SIScheduleDAGMI::schedule(), llvm::ScheduleDAGMILive::scheduleMI(), llvm::ConvergingVLIWScheduler::SchedulingCost(), llvm::HexagonHazardRecognizer::ShouldPreferAnother(), llvm::SIScheduleDAGMI::SIScheduleDAGMI(), swapAntiDependences(), llvm::HexagonPacketizerList::updateOffset(), llvm::ScheduleDAGMILive::updatePressureDiffs(), llvm::HexagonSubtarget::usePredicatedCalls(), 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 359 of file ScheduleDAG.h.
References assert().
Referenced by BURRSort(), CalcNodeSethiUllmanNumber(), 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::ResourcePriorityQueue(), llvm::ResourcePriorityQueue::scheduledNode(), and llvm::ResourcePriorityQueue::SUSchedulingCost().
|
inline |
Definition at line 453 of file ScheduleDAG.h.
Referenced by llvm::GCNMaxOccupancySchedStrategy::pickNode(), llvm::ConvergingVLIWScheduler::pickNode(), llvm::GenericScheduler::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 348 of file ScheduleDAG.h.
Referenced by llvm::SchedDFSResult::compute(), computePath(), fuseInstructionPair(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), getZeroLatency(), and hasDataSucc().
|
inline |
Returns true if this SUnit refers to a machine instruction as opposed to an SDNode.
Definition at line 366 of file ScheduleDAG.h.
Referenced by llvm::HexagonSubtarget::adjustSchedDependency(), llvm::HexagonSubtarget::UsrOverflowMutation::apply(), llvm::ScheduleDAG::getInstrDesc(), llvm::ConvergingVLIWScheduler::SchedulingCost(), and llvm::HexagonHazardRecognizer::ShouldPreferAnother().
Tests if node N is a predecessor of this node.
Definition at line 435 of file ScheduleDAG.h.
References N.
Referenced by fuseInstructionPair().
Tests if node N is a successor of this node.
Definition at line 443 of file ScheduleDAG.h.
References N.
Referenced by llvm::HexagonPacketizerList::arePredicatesComplements(), fuseInstructionPair(), llvm::HexagonPacketizerList::isLegalToPacketizeTogether(), and llvm::HexagonPacketizerList::restrictingDepExistInPacket().
|
inline |
Definition at line 450 of file ScheduleDAG.h.
Referenced by llvm::GCNMaxOccupancySchedStrategy::pickNode(), llvm::ConvergingVLIWScheduler::pickNode(), llvm::GenericScheduler::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 171 of file ScheduleDAG.cpp.
References assert(), D, llvm::SDep::Data, llvm::SmallVectorTemplateCommon< T >::end(), llvm::find(), llvm::SDep::getKind(), llvm::SDep::getSUnit(), I, isScheduled, llvm::SDep::isWeak(), N, NumSuccs, NumSuccsLeft, P, llvm::SDep::setSUnit(), Succs, and WeakSuccsLeft.
Referenced by llvm::HexagonSubtarget::UsrOverflowMutation::apply(), getUnderlyingObjects(), 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 213 of file ScheduleDAG.cpp.
References llvm::SmallVectorBase::empty(), llvm::SDep::getSUnit(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T >::push_back(), and Succs.
Referenced by llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), and setHeightToAtLeast().
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 243 of file ScheduleDAG.cpp.
References llvm::Depth.
Referenced by INITIALIZE_PASS().
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 228 of file ScheduleDAG.cpp.
References llvm::SmallVectorBase::empty(), llvm::SDep::getSUnit(), llvm::SmallVectorImpl< T >::pop_back_val(), Preds, and llvm::SmallVectorTemplateBase< T >::push_back().
Referenced by addPred(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), and setHeightToAtLeast().
void SUnit::setHeightToAtLeast | ( | unsigned | NewHeight | ) |
If NewDepth is greater than this node's depth value, set it to be the new height value.
This also recursively marks predecessor nodes dirty.
Definition at line 251 of file ScheduleDAG.cpp.
References llvm::SmallVectorTemplateCommon< T >::back(), llvm::SmallVectorBase::empty(), llvm::SDep::getLatency(), llvm::SDep::getSUnit(), llvm::max(), llvm::SmallVectorTemplateBase< T >::pop_back(), Preds, llvm::SmallVectorTemplateBase< T >::push_back(), setDepthDirty(), setHeightDirty(), and Succs.
|
inline |
Assigns the instruction for the SUnit.
This may be used during post-regalloc scheduling.
Definition at line 370 of file ScheduleDAG.h.
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 304 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::SchedBoundary::getLatencyStallCycles(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::GenericScheduler::releaseBottomNode(), llvm::SchedBoundary::releasePending(), llvm::ScheduleDAGMI::releasePred(), llvm::ConvergingVLIWScheduler::schedNode(), and llvm::GenericScheduler::schedNode().
const TargetRegisterClass* llvm::SUnit::CopyDstRC |
Is a special copy node if != nullptr.
Definition at line 306 of file ScheduleDAG.h.
Referenced by isOperandOf(), and ProcessSourceNode().
const TargetRegisterClass* llvm::SUnit::CopySrcRC = nullptr |
Definition at line 308 of file ScheduleDAG.h.
Referenced by isOperandOf().
bool llvm::SUnit::hasPhysRegClobbers |
Has any physreg defs, used or not.
Definition at line 285 of file ScheduleDAG.h.
Referenced by canClobberPhysRegDefs(), and llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::hasPhysRegDefs |
Has physreg defs that are being used.
Definition at line 284 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), BURRSort(), canClobberPhysRegDefs(), llvm::ScheduleDAGSDNodes::Clone(), llvm::SMSchedule::isValidSchedule(), and llvm::GenericScheduler::schedNode().
bool llvm::SUnit::hasPhysRegUses |
Has physreg uses.
Definition at line 283 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDeps(), and llvm::GenericScheduler::schedNode().
bool llvm::SUnit::hasReservedResource |
Uses a reserved resource.
Definition at line 293 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::SchedBoundary::checkHazard(), llvm::SystemZHazardRecognizer::emitInstruction(), and llvm::ScheduleDAGInstrs::initSUnits().
bool llvm::SUnit::isAvailable |
True once available.
Definition at line 287 of file ScheduleDAG.h.
Referenced by llvm::ResourcePriorityQueue::initNumRegDefsLeft(), isOperandOf(), and llvm::LatencyPriorityQueue::scheduledNode().
bool llvm::SUnit::isCall |
Is a function call.
Definition at line 279 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::SchedBoundary::bumpNode(), BURRSort(), canEnableCoalescing(), llvm::ScheduleDAGSDNodes::Clone(), llvm::SystemZHazardRecognizer::EmitInstruction(), llvm::SystemZHazardRecognizer::emitInstruction(), llvm::ScheduleDAGInstrs::initSUnits(), and llvm::ConvergingVLIWScheduler::releaseBottomNode().
bool llvm::SUnit::isCallOp |
Is a function call operand.
Definition at line 280 of file ScheduleDAG.h.
Referenced by BURRSort(), CalcNodeSethiUllmanNumber(), and llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::isCloned |
True if this node has been cloned.
Definition at line 291 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), and llvm::ScheduleDAGSDNodes::EmitSchedule().
bool llvm::SUnit::isCommutable |
Is a commutable instruction.
Definition at line 282 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), llvm::ScheduleDAGInstrs::initSUnits(), and isOperandOf().
bool llvm::SUnit::isPending |
True once pending.
Definition at line 286 of file ScheduleDAG.h.
bool llvm::SUnit::isScheduled |
True once scheduled.
Definition at line 288 of file ScheduleDAG.h.
Referenced by addPred(), createILPMinScheduler(), llvm::GCNMaxOccupancySchedStrategy::initialize(), INITIALIZE_PASS(), isOperandOf(), llvm::latency_sort::operator()(), llvm::resource_sort::operator()(), llvm::GCNMaxOccupancySchedStrategy::pickNode(), llvm::R600SchedStrategy::pickNode(), llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::GenericScheduler::releaseBottomNode(), llvm::ConvergingVLIWScheduler::releaseTopNode(), llvm::GenericScheduler::releaseTopNode(), llvm::PostGenericScheduler::releaseTopNode(), removePred(), llvm::SIScheduleBlock::schedule(), llvm::ScheduleDAGMI::schedule(), llvm::ScheduleDAGMILive::schedule(), llvm::ConvergingVLIWScheduler::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 289 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), llvm::latency_sort::operator()(), llvm::resource_sort::operator()(), llvm::SystemZPostRASchedStrategy::releaseTopNode(), llvm::ConvergingVLIWScheduler::SchedulingCost(), and llvm::ResourcePriorityQueue::SUSchedulingCost().
bool llvm::SUnit::isScheduleLow |
True if preferable to schedule low.
Definition at line 290 of file ScheduleDAG.h.
Referenced by checkSpecialNodes(), and llvm::ScheduleDAGSDNodes::Clone().
bool llvm::SUnit::isTwoAddress |
Is a two-address instruction.
Definition at line 281 of file ScheduleDAG.h.
Referenced by canClobberPhysRegDefs(), canEnableCoalescing(), llvm::ScheduleDAGSDNodes::Clone(), and isOperandOf().
bool llvm::SUnit::isUnbuffered |
Uses an unbuffered resource.
Definition at line 292 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::SystemZHazardRecognizer::dumpSU(), llvm::SystemZHazardRecognizer::EmitInstruction(), llvm::SystemZHazardRecognizer::emitInstruction(), llvm::SchedBoundary::getLatencyStallCycles(), llvm::SystemZHazardRecognizer::groupingCost(), llvm::ScheduleDAGInstrs::initSUnits(), llvm::SystemZPostRASchedStrategy::releaseTopNode(), and llvm::SystemZHazardRecognizer::resourcesCost().
bool llvm::SUnit::isVRegCycle |
May use and def the same vreg.
Definition at line 278 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGSDNodes::Clone(), hasVRegCycleUse(), initVRegCycle(), and resetVRegCycle().
unsigned short llvm::SUnit::Latency = 0 |
Node latency.
Definition at line 277 of file ScheduleDAG.h.
Referenced by BUCompareLatency(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::ScheduleDAGSDNodes::Clone(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), llvm::ScheduleDAGSDNodes::computeLatency(), llvm::ScheduleDAGInstrs::initSUnits(), and isOperandOf().
unsigned llvm::SUnit::NodeNum = BoundaryID |
Entry # of node in the node vector.
Definition at line 268 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGTopologicalSort::AddPred(), llvm::SIScheduleBlock::addUnit(), BUCompareLatency(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::SchedBoundary::bumpNode(), BURRSort(), CalcNodeSethiUllmanNumber(), canClobberPhysRegDefs(), canEnableCoalescing(), llvm::SchedBoundary::checkHazard(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), computeLiveOuts(), llvm::createCopyConstrainDAGMutation(), createILPMinScheduler(), llvm::ScheduleDAG::dumpNodeName(), 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(), getUnderlyingObjects(), getZeroLatency(), hasDataDependencyPred(), hasVRegCycleUse(), llvm::GenericScheduler::initCandidate(), llvm::ScheduleDAGTopologicalSort::InitDAGTopologicalSorting(), initVRegCycle(), llvm::ScheduleDAGInstrs::insertBarrierChain(), isIntersect(), isOperandOf(), llvm::ScheduleDAGTopologicalSort::IsReachable(), llvm::SIScheduleBlockCreator::isSUInBlock(), llvm::SMSchedule::isValidSchedule(), llvm::SchedDFSImpl::isVisited(), llvm::SchedDFSImpl::joinPredSubtree(), llvm::latency_sort::operator()(), llvm::resource_sort::operator()(), llvm::GCNMaxOccupancySchedStrategy::pickNode(), llvm::GenericScheduler::pickNode(), llvm::PostGenericScheduler::pickNode(), llvm::SMSchedule::print(), llvm::LatencyPriorityQueue::push(), llvm::ResourcePriorityQueue::push(), llvm::ScheduleDAGInstrs::reduceHugeMemNodeMaps(), llvm::ScheduleDAGTopologicalSort::RemovePred(), llvm::SystemZPostRASchedStrategy::schedNode(), llvm::SIScheduleBlock::schedule(), llvm::SIScheduleDAGMI::schedule(), llvm::ScheduleDAGMILive::scheduleMI(), llvm::SIScheduler::scheduleVariant(), llvm::SIScheduleDAGMI::SIScheduleDAGMI(), llvm::ResourcePriorityQueue::SUSchedulingCost(), llvm::GenericSchedulerBase::traceCandidate(), llvm::GenericScheduler::tryCandidate(), llvm::PostGenericScheduler::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 269 of file ScheduleDAG.h.
Referenced by BUCompareLatency(), BURRSort(), llvm::ResourcePriorityQueue::initNodes(), llvm::ReadyQueue::isInQueue(), and llvm::ReadyQueue::push().
unsigned llvm::SUnit::NumPreds = 0 |
Definition at line 270 of file ScheduleDAG.h.
Referenced by CalcNodeSethiUllmanNumber(), canClobberPhysRegDefs(), canEnableCoalescing(), llvm::ResourcePriorityQueue::scheduledNode(), swapAntiDependences(), and llvm::ScheduleDAG::VerifyScheduledDAG().
unsigned llvm::SUnit::NumPredsLeft = 0 |
Definition at line 272 of file ScheduleDAG.h.
Referenced by llvm::biasPhysReg(), INITIALIZE_PASS(), isSingleUnscheduledPred(), llvm::ScheduleDAGMI::releaseSucc(), llvm::SIScheduleBlock::schedule(), and llvm::ScheduleDAG::VerifyScheduledDAG().
unsigned short llvm::SUnit::NumRegDefsLeft = 0 |
Definition at line 276 of file ScheduleDAG.h.
Referenced by CalcNodeSethiUllmanNumber(), llvm::ScheduleDAGSDNodes::InitNumRegDefsLeft(), llvm::ResourcePriorityQueue::initNumRegDefsLeft(), isOperandOf(), and llvm::ResourcePriorityQueue::scheduledNode().
unsigned llvm::SUnit::NumSuccs = 0 |
Definition at line 271 of file ScheduleDAG.h.
Referenced by addPred(), llvm::HexagonSubtarget::adjustSchedDependency(), llvm::ScheduleDAGInstrs::buildSchedGraph(), CalcNodeSethiUllmanNumber(), canClobberPhysRegDefs(), canEnableCoalescing(), removePred(), and llvm::ScheduleDAG::VerifyScheduledDAG().
unsigned llvm::SUnit::NumSuccsLeft = 0 |
Definition at line 273 of file ScheduleDAG.h.
Referenced by addPred(), llvm::biasPhysReg(), CalcNodeSethiUllmanNumber(), isOperandOf(), isSingleUnscheduledSucc(), llvm::ScheduleDAGMI::releasePred(), removePred(), 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 254 of file ScheduleDAG.h.
Referenced by canEnableCoalescing(), llvm::ScheduleDAGSDNodes::Clone(), and llvm::ScheduleDAGSDNodes::EmitSchedule().
SmallVector<SDep, 4> llvm::SUnit::Preds |
All sunit predecessors.
Definition at line 260 of file ScheduleDAG.h.
Referenced by llvm::SchedDFSImpl::addConnection(), AntiDepEdges(), llvm::HexagonSubtarget::UsrOverflowMutation::apply(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), BUCompareLatency(), calcMaxScratches(), CalcNodeSethiUllmanNumber(), canClobberPhysRegDefs(), canClobberReachingPhysRegUse(), CheckForLiveRegDef(), computeLiveOuts(), computePath(), llvm::SMSchedule::computeStart(), llvm::createCopyConstrainDAGMutation(), CriticalPathStep(), llvm::ScheduleDAG::dumpNodeAll(), llvm::SMSchedule::earliestCycleInChain(), llvm::SUnitIterator::end(), FindCallSeqStart(), fuseInstructionPair(), llvm::GCNSubtarget::getMaxNumVGPRs(), getNodeRegMask(), llvm::SUnitIterator::getSDep(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), getUnderlyingObjects(), getZeroLatency(), hasDataDependencyPred(), hasOnlyLiveInOpers(), hasVRegCycleUse(), ignoreDependence(), llvm::ScheduleDAGTopologicalSort::InitDAGTopologicalSorting(), initVRegCycle(), isIntersect(), isOperandOf(), isSingleUnscheduledPred(), llvm::SMSchedule::isValidSchedule(), multipleIterations(), numberCtrlPredInSU(), llvm::latency_sort::operator()(), llvm::resource_sort::operator()(), llvm::SUnitIterator::operator*(), llvm::SMSchedule::orderDependence(), ProcessSourceNode(), llvm::HexagonPacketizerList::producesStall(), llvm::ScheduleDAGMI::releasePredecessors(), llvm::ConvergingVLIWScheduler::releaseTopNode(), llvm::GenericScheduler::reschedulePhysReg(), resetVRegCycle(), llvm::ResourcePriorityQueue::ResourcePriorityQueue(), llvm::ResourcePriorityQueue::scheduledNode(), llvm::ConvergingVLIWScheduler::SchedulingCost(), setHeightDirty(), setHeightToAtLeast(), llvm::SIScheduleDAGMI::SIScheduleDAGMI(), swapAntiDependences(), llvm::HexagonPacketizerList::updateOffset(), llvm::HexagonSubtarget::usePredicatedCalls(), llvm::SchedDFSImpl::visitPostorderNode(), and llvm::ScheduleDAGTopologicalSort::WillCreateCycle().
const MCSchedClassDesc* llvm::SUnit::SchedClass |
nullptr or resolved SchedClass.
Definition at line 257 of file ScheduleDAG.h.
Referenced by llvm::SystemZHazardRecognizer::getSchedClass(), and llvm::ScheduleDAGInstrs::getSchedClass().
Sched::Preference llvm::SUnit::SchedulingPref = Sched::None |
Scheduling preference.
Definition at line 294 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 261 of file ScheduleDAG.h.
Referenced by addPred(), llvm::HexagonSubtarget::adjustSchedDependency(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), llvm::HexagonPacketizerList::arePredicatesComplements(), CalcNodeSethiUllmanNumber(), canClobberPhysRegDefs(), canClobberReachingPhysRegUse(), closestSucc(), computeLiveOuts(), computePath(), llvm::createCopyConstrainDAGMutation(), llvm::ScheduleDAG::dumpNodeAll(), llvm::HexagonHazardRecognizer::EmitInstruction(), fuseInstructionPair(), llvm::GCNSubtarget::getMaxNumVGPRs(), llvm::ScheduleDAGTopologicalSort::GetSubGraph(), getZeroLatency(), hasDataDependencyPred(), hasDataSucc(), hasDependence(), hasOnlyLiveOutUses(), ignoreDependence(), INITIALIZE_PASS(), isIntersect(), llvm::HexagonPacketizerList::isLegalToPacketizeTogether(), isOperandOf(), isSingleUnscheduledSucc(), isSuccOrder(), llvm::SMSchedule::isValidSchedule(), llvm::SMSchedule::latestCycleInChain(), numberCtrlDepsInSU(), llvm::SMSchedule::orderDependence(), ProcessSourceNode(), llvm::LatencyPriorityQueue::push(), llvm::ResourcePriorityQueue::push(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::ScheduleDAGMI::releaseSuccessors(), removePred(), llvm::ScheduleDAGTopologicalSort::RemovePred(), llvm::GenericScheduler::reschedulePhysReg(), llvm::ResourcePriorityQueue::ResourcePriorityQueue(), llvm::HexagonPacketizerList::restrictingDepExistInPacket(), llvm::SIScheduleBlock::schedule(), llvm::LatencyPriorityQueue::scheduledNode(), llvm::ResourcePriorityQueue::scheduledNode(), llvm::ConvergingVLIWScheduler::SchedulingCost(), setDepthDirty(), setHeightToAtLeast(), llvm::SIScheduleDAGMI::SIScheduleDAGMI(), and llvm::HexagonSubtarget::usePredicatedCalls().
unsigned llvm::SUnit::TopReadyCycle = 0 |
Cycle relative to start when node is ready.
Definition at line 303 of file ScheduleDAG.h.
Referenced by llvm::SchedBoundary::bumpNode(), llvm::SchedBoundary::getLatencyStallCycles(), llvm::ConvergingVLIWScheduler::releaseBottomNode(), llvm::SchedBoundary::releasePending(), llvm::ScheduleDAGMI::releaseSucc(), llvm::ConvergingVLIWScheduler::releaseTopNode(), llvm::GenericScheduler::releaseTopNode(), llvm::PostGenericScheduler::releaseTopNode(), llvm::ConvergingVLIWScheduler::schedNode(), llvm::GenericScheduler::schedNode(), and llvm::PostGenericScheduler::schedNode().
unsigned llvm::SUnit::WeakPredsLeft = 0 |
Definition at line 274 of file ScheduleDAG.h.
Referenced by llvm::getWeakLeft(), INITIALIZE_PASS(), llvm::ScheduleDAGMI::releaseSucc(), and llvm::SIScheduleBlock::schedule().
unsigned llvm::SUnit::WeakSuccsLeft = 0 |
Definition at line 275 of file ScheduleDAG.h.
Referenced by addPred(), llvm::getWeakLeft(), llvm::ScheduleDAGMI::releasePred(), and removePred().