LLVM  8.0.1
Public Types | Public Member Functions | Public Attributes | List of all members
llvm::SUnit Class Reference

Scheduling unit. This is a node in the scheduling DAG. More...

#include "llvm/CodeGen/ScheduleDAG.h"

Collaboration diagram for llvm::SUnit:
Collaboration graph
[legend]

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...
 
SDNodegetNode () 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...
 
MachineInstrgetInstr () 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

SUnitOrigNode = nullptr
 If not this, the node from which this node was cloned. More...
 
const MCSchedClassDescSchedClass
 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 TargetRegisterClassCopyDstRC
 Is a special copy node if != nullptr. More...
 
const TargetRegisterClassCopySrcRC = nullptr
 

Detailed Description

Scheduling unit. This is a node in the scheduling DAG.

Definition at line 246 of file ScheduleDAG.h.

Member Typedef Documentation

◆ const_pred_iterator

Definition at line 265 of file ScheduleDAG.h.

◆ const_succ_iterator

Definition at line 266 of file ScheduleDAG.h.

◆ pred_iterator

Definition at line 263 of file ScheduleDAG.h.

◆ succ_iterator

Definition at line 264 of file ScheduleDAG.h.

Constructor & Destructor Documentation

◆ SUnit() [1/3]

llvm::SUnit::SUnit ( SDNode node,
unsigned  nodenum 
)
inline

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.

◆ SUnit() [2/3]

llvm::SUnit::SUnit ( MachineInstr instr,
unsigned  nodenum 
)
inline

Constructs an SUnit for post-regalloc scheduling to represent a MachineInstr.

Definition at line 323 of file ScheduleDAG.h.

◆ SUnit() [3/3]

llvm::SUnit::SUnit ( )
inline

Constructs a placeholder SUnit.

Definition at line 333 of file ScheduleDAG.h.

Member Function Documentation

◆ addPred()

bool SUnit::addPred ( const SDep D,
bool  Required = true 
)

◆ addPredBarrier()

bool llvm::SUnit::addPredBarrier ( SUnit SU)
inline

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().

◆ biasCriticalPath()

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().

◆ dumpAttributes()

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().

◆ getDepth()

unsigned llvm::SUnit::getDepth ( ) const
inline

◆ getHeight()

unsigned llvm::SUnit::getHeight ( ) const
inline

◆ getInstr()

MachineInstr* llvm::SUnit::getInstr ( ) const
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().

◆ getNode()

SDNode* llvm::SUnit::getNode ( ) const
inline

◆ isBottomReady()

bool llvm::SUnit::isBottomReady ( ) const
inline

◆ isBoundaryNode()

bool llvm::SUnit::isBoundaryNode ( ) const
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().

◆ isInstr()

bool llvm::SUnit::isInstr ( ) const
inline

◆ isPred()

bool llvm::SUnit::isPred ( const SUnit N) const
inline

Tests if node N is a predecessor of this node.

Definition at line 435 of file ScheduleDAG.h.

References N.

Referenced by fuseInstructionPair().

◆ isSucc()

bool llvm::SUnit::isSucc ( const SUnit N) const
inline

◆ isTopReady()

bool llvm::SUnit::isTopReady ( ) const
inline

◆ removePred()

void SUnit::removePred ( const SDep D)

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().

◆ setDepthDirty()

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().

◆ 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 243 of file ScheduleDAG.cpp.

References llvm::Depth.

Referenced by INITIALIZE_PASS().

◆ setHeightDirty()

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().

◆ 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.

◆ setInstr()

void llvm::SUnit::setInstr ( MachineInstr MI)
inline

Assigns the instruction for the SUnit.

This may be used during post-regalloc scheduling.

Definition at line 370 of file ScheduleDAG.h.

References assert(), and MI.

Referenced by llvm::ScheduleDAGInstrs::addSchedBarrierDeps(), llvm::SwingSchedulerDAG::applyInstrChange(), and llvm::SwingSchedulerDAG::fixupRegisterOverlaps().

◆ setNode()

void llvm::SUnit::setNode ( SDNode N)
inline

Assigns the representative SDNode for this SUnit.

This may be used during pre-regalloc scheduling.

Definition at line 352 of file ScheduleDAG.h.

References assert(), and N.

Member Data Documentation

◆ BotReadyCycle

unsigned llvm::SUnit::BotReadyCycle = 0

◆ CopyDstRC

const TargetRegisterClass* llvm::SUnit::CopyDstRC
Initial value:
=
nullptr

Is a special copy node if != nullptr.

Definition at line 306 of file ScheduleDAG.h.

Referenced by isOperandOf(), and ProcessSourceNode().

◆ CopySrcRC

const TargetRegisterClass* llvm::SUnit::CopySrcRC = nullptr

Definition at line 308 of file ScheduleDAG.h.

Referenced by isOperandOf().

◆ hasPhysRegClobbers

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().

◆ hasPhysRegDefs

bool llvm::SUnit::hasPhysRegDefs

◆ hasPhysRegUses

bool llvm::SUnit::hasPhysRegUses

Has physreg uses.

Definition at line 283 of file ScheduleDAG.h.

Referenced by llvm::ScheduleDAGInstrs::addPhysRegDeps(), and llvm::GenericScheduler::schedNode().

◆ hasReservedResource

bool llvm::SUnit::hasReservedResource

◆ isAvailable

bool llvm::SUnit::isAvailable

◆ isCall

bool llvm::SUnit::isCall

◆ isCallOp

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().

◆ isCloned

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().

◆ isCommutable

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().

◆ isPending

bool llvm::SUnit::isPending

True once pending.

Definition at line 286 of file ScheduleDAG.h.

◆ isScheduled

bool llvm::SUnit::isScheduled

◆ isScheduleHigh

bool llvm::SUnit::isScheduleHigh

◆ isScheduleLow

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().

◆ isTwoAddress

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().

◆ isUnbuffered

bool llvm::SUnit::isUnbuffered

◆ isVRegCycle

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().

◆ Latency

unsigned short llvm::SUnit::Latency = 0

◆ NodeNum

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().

◆ NodeQueueId

unsigned llvm::SUnit::NodeQueueId = 0

◆ NumPreds

unsigned llvm::SUnit::NumPreds = 0

◆ NumPredsLeft

unsigned llvm::SUnit::NumPredsLeft = 0

◆ NumRegDefsLeft

unsigned short llvm::SUnit::NumRegDefsLeft = 0

◆ NumSuccs

unsigned llvm::SUnit::NumSuccs = 0

◆ NumSuccsLeft

unsigned llvm::SUnit::NumSuccsLeft = 0

◆ OrigNode

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().

◆ Preds

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().

◆ SchedClass

const MCSchedClassDesc* llvm::SUnit::SchedClass
Initial value:
=
nullptr

nullptr or resolved SchedClass.

Definition at line 257 of file ScheduleDAG.h.

Referenced by llvm::SystemZHazardRecognizer::getSchedClass(), and llvm::ScheduleDAGInstrs::getSchedClass().

◆ SchedulingPref

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().

◆ Succs

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().

◆ TopReadyCycle

unsigned llvm::SUnit::TopReadyCycle = 0

◆ WeakPredsLeft

unsigned llvm::SUnit::WeakPredsLeft = 0

of weak preds not scheduled.

Definition at line 274 of file ScheduleDAG.h.

Referenced by llvm::getWeakLeft(), INITIALIZE_PASS(), llvm::ScheduleDAGMI::releaseSucc(), and llvm::SIScheduleBlock::schedule().

◆ WeakSuccsLeft

unsigned llvm::SUnit::WeakSuccsLeft = 0

of weak succs not scheduled.

Definition at line 275 of file ScheduleDAG.h.

Referenced by addPred(), llvm::getWeakLeft(), llvm::ScheduleDAGMI::releasePred(), and removePred().


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