LLVM 22.0.0git
llvm::SchedDFSImpl Class Reference

Internal state used to compute SchedDFSResult. More...

Public Member Functions

 SchedDFSImpl (SchedDFSResult &r)
bool isVisited (const SUnit *SU) const
 Returns true if this node been visited by the DFS traversal.
void visitPreorder (const SUnit *SU)
 Initializes this node's instruction count.
void visitPostorderNode (const SUnit *SU)
 Called once for each node after all predecessors are visited.
void visitPostorderEdge (const SDep &PredDep, const SUnit *Succ)
 Called once for each tree edge after calling visitPostOrderNode on the predecessor.
void visitCrossEdge (const SDep &PredDep, const SUnit *Succ)
 Adds a connection for cross edges.
void finalize ()
 Sets each node's subtree ID to the representative ID and record connections between trees.

Protected Member Functions

bool joinPredSubtree (const SDep &PredDep, const SUnit *Succ, bool CheckLimit=true)
 Joins the predecessor subtree with the successor that is its DFS parent.
void addConnection (unsigned FromTree, unsigned ToTree, unsigned Depth)
 Called by finalize() to record a connection between trees.

Detailed Description

Internal state used to compute SchedDFSResult.

Definition at line 1259 of file ScheduleDAGInstrs.cpp.

Constructor & Destructor Documentation

◆ SchedDFSImpl()

llvm::SchedDFSImpl::SchedDFSImpl ( SchedDFSResult & r)
inline

Definition at line 1282 of file ScheduleDAGInstrs.cpp.

References llvm::size().

Member Function Documentation

◆ addConnection()

void llvm::SchedDFSImpl::addConnection ( unsigned FromTree,
unsigned ToTree,
unsigned Depth )
inlineprotected

Called by finalize() to record a connection between trees.

Definition at line 1424 of file ScheduleDAGInstrs.cpp.

References llvm::CallingConv::C, llvm::Depth, and llvm::SmallVectorTemplateBase< T, bool >::push_back().

Referenced by finalize().

◆ finalize()

void llvm::SchedDFSImpl::finalize ( )
inline

Sets each node's subtree ID to the representative ID and record connections between trees.

Definition at line 1360 of file ScheduleDAGInstrs.cpp.

References addConnection(), assert(), llvm::dbgs(), llvm::Depth, and LLVM_DEBUG.

◆ isVisited()

bool llvm::SchedDFSImpl::isVisited ( const SUnit * SU) const
inline

Returns true if this node been visited by the DFS traversal.

During visitPostorderNode the Node's SubtreeID is assigned to the Node ID. Later, SubtreeID is updated but remains valid.

Definition at line 1290 of file ScheduleDAGInstrs.cpp.

References llvm::SUnit::NodeNum.

◆ joinPredSubtree()

bool llvm::SchedDFSImpl::joinPredSubtree ( const SDep & PredDep,
const SUnit * Succ,
bool CheckLimit = true )
inlineprotected

Joins the predecessor subtree with the successor that is its DFS parent.

Applies some heuristics before joining.

Definition at line 1397 of file ScheduleDAGInstrs.cpp.

References assert(), llvm::SDep::Data, llvm::SDep::getKind(), llvm::SDep::getSUnit(), llvm::SUnit::NodeNum, and llvm::SUnit::Succs.

Referenced by visitPostorderEdge(), and visitPostorderNode().

◆ visitCrossEdge()

void llvm::SchedDFSImpl::visitCrossEdge ( const SDep & PredDep,
const SUnit * Succ )
inline

Adds a connection for cross edges.

Definition at line 1354 of file ScheduleDAGInstrs.cpp.

References llvm::SDep::getSUnit().

◆ visitPostorderEdge()

void llvm::SchedDFSImpl::visitPostorderEdge ( const SDep & PredDep,
const SUnit * Succ )
inline

Called once for each tree edge after calling visitPostOrderNode on the predecessor.

Increment the parent node's instruction count and preemptively join this subtree to its parent's if it is small enough.

Definition at line 1347 of file ScheduleDAGInstrs.cpp.

References llvm::SDep::getSUnit(), joinPredSubtree(), and llvm::SUnit::NodeNum.

◆ visitPostorderNode()

void llvm::SchedDFSImpl::visitPostorderNode ( const SUnit * SU)
inline

Called once for each node after all predecessors are visited.

Revisit this node's predecessors and potentially join them now that we know the ILP of the other predecessors.

Definition at line 1305 of file ScheduleDAGInstrs.cpp.

References llvm::SDep::Data, llvm::SUnit::getInstr(), llvm::SDep::getKind(), llvm::SDep::getSUnit(), InstrCount, llvm::MachineInstr::isTransient(), joinPredSubtree(), llvm::SUnit::NodeNum, and llvm::SUnit::Preds.

◆ visitPreorder()

void llvm::SchedDFSImpl::visitPreorder ( const SUnit * SU)
inline

Initializes this node's instruction count.

We don't need to flag the node visited until visitPostorder because the DAG cannot have cycles.

Definition at line 1297 of file ScheduleDAGInstrs.cpp.

References llvm::SUnit::getInstr(), llvm::MachineInstr::isTransient(), and llvm::SUnit::NodeNum.


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