LLVM 20.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
llvm::sandboxir::DGNode Class Reference

A DependencyGraph Node that points to an Instruction and contains memory dependency edges. More...

#include "llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h"

Inheritance diagram for llvm::sandboxir::DGNode:
Inheritance graph
[legend]

Public Types

using iterator = PredIterator
 

Public Member Functions

 DGNode (Instruction *I)
 
 DGNode (const DGNode &Other)=delete
 
virtual ~DGNode ()
 
unsigned getNumUnscheduledSuccs () const
 \Returns the number of unscheduled successors.
 
void decrUnscheduledSuccs ()
 
bool ready () const
 \Returns true if all dependent successors have been scheduled.
 
bool scheduled () const
 \Returns true if this node has been scheduled.
 
void setScheduled (bool NewVal)
 
SchedBundlegetSchedBundle () const
 \Returns the scheduling bundle that this node belongs to, or nullptr.
 
bool comesBefore (const DGNode *Other)
 \Returns true if this is before Other in program order.
 
virtual iterator preds_begin (DependencyGraph &DAG)
 
virtual iterator preds_end (DependencyGraph &DAG)
 
iterator preds_begin (DependencyGraph &DAG) const
 
iterator preds_end (DependencyGraph &DAG) const
 
iterator_range< iteratorpreds (DependencyGraph &DAG) const
 \Returns a range of DAG predecessors nodes.
 
InstructiongetInstruction () const
 
virtual void print (raw_ostream &OS, bool PrintDeps=true) const
 
LLVM_DUMP_METHOD void dump () const
 

Static Public Member Functions

static bool isStackSaveOrRestoreIntrinsic (Instruction *I)
 
static bool isMemIntrinsic (IntrinsicInst *I)
 \Returns true if intrinsic I touches memory.
 
static bool isMemDepCandidate (Instruction *I)
 We consider I as a Memory Dependency Candidate instruction if it reads/write memory or if it has side-effects.
 
static bool isFenceLike (Instruction *I)
 \Returns true if I is fence like. It excludes non-mem intrinsics.
 
static bool isMemDepNodeCandidate (Instruction *I)
 \Returns true if I is a memory dependency candidate instruction.
 

Protected Member Functions

void setSchedBundle (SchedBundle &SB)
 
void clearSchedBundle ()
 
 DGNode (Instruction *I, DGNodeID ID)
 

Protected Attributes

InstructionI
 
DGNodeID SubclassID
 For isa/dyn_cast etc.
 
unsigned UnscheduledSuccs = 0
 The number of unscheduled successors.
 
bool Scheduled = false
 This is true if this node has been scheduled.
 
SchedBundleSB = nullptr
 The scheduler bundle that this node belongs to.
 

Friends

class SchedBundle
 
class MemDGNode
 
class DependencyGraph
 
raw_ostreamoperator<< (raw_ostream &OS, DGNode &N)
 

Detailed Description

A DependencyGraph Node that points to an Instruction and contains memory dependency edges.

Definition at line 94 of file DependencyGraph.h.

Member Typedef Documentation

◆ iterator

Definition at line 136 of file DependencyGraph.h.

Constructor & Destructor Documentation

◆ DGNode() [1/3]

llvm::sandboxir::DGNode::DGNode ( Instruction I,
DGNodeID  ID 
)
inlineprotected

Definition at line 111 of file DependencyGraph.h.

◆ DGNode() [2/3]

llvm::sandboxir::DGNode::DGNode ( Instruction I)
inline

Definition at line 116 of file DependencyGraph.h.

References assert(), I, and isMemDepNodeCandidate().

◆ DGNode() [3/3]

llvm::sandboxir::DGNode::DGNode ( const DGNode Other)
delete

◆ ~DGNode()

llvm::sandboxir::DGNode::~DGNode ( )
virtual

Definition at line 62 of file DependencyGraph.cpp.

References SB.

Member Function Documentation

◆ clearSchedBundle()

void llvm::sandboxir::DGNode::clearSchedBundle ( )
inlineprotected

Definition at line 108 of file DependencyGraph.h.

◆ comesBefore()

bool llvm::sandboxir::DGNode::comesBefore ( const DGNode Other)
inline

\Returns true if this is before Other in program order.

Definition at line 135 of file DependencyGraph.h.

References llvm::sandboxir::Instruction::comesBefore(), I, and llvm::Other.

◆ decrUnscheduledSuccs()

void llvm::sandboxir::DGNode::decrUnscheduledSuccs ( )
inline

Definition at line 123 of file DependencyGraph.h.

References assert(), and UnscheduledSuccs.

◆ dump()

void llvm::sandboxir::DGNode::dump ( ) const

Definition at line 72 of file DependencyGraph.cpp.

References llvm::dbgs(), and print().

◆ getInstruction()

Instruction * llvm::sandboxir::DGNode::getInstruction ( ) const
inline

◆ getNumUnscheduledSuccs()

unsigned llvm::sandboxir::DGNode::getNumUnscheduledSuccs ( ) const
inline

\Returns the number of unscheduled successors.

Definition at line 122 of file DependencyGraph.h.

References UnscheduledSuccs.

◆ getSchedBundle()

SchedBundle * llvm::sandboxir::DGNode::getSchedBundle ( ) const
inline

\Returns the scheduling bundle that this node belongs to, or nullptr.

Definition at line 133 of file DependencyGraph.h.

References SB.

◆ isFenceLike()

static bool llvm::sandboxir::DGNode::isFenceLike ( Instruction I)
inlinestatic

\Returns true if I is fence like. It excludes non-mem intrinsics.

Definition at line 183 of file DependencyGraph.h.

References I, II, llvm::sandboxir::Instruction::isFenceLike(), and isMemIntrinsic().

Referenced by isMemDepNodeCandidate(), and llvm::sandboxir::isOrdered().

◆ isMemDepCandidate()

static bool llvm::sandboxir::DGNode::isMemDepCandidate ( Instruction I)
inlinestatic

We consider I as a Memory Dependency Candidate instruction if it reads/write memory or if it has side-effects.

This is used by the dependency graph.

Definition at line 176 of file DependencyGraph.h.

References I, II, isMemIntrinsic(), and llvm::sandboxir::Instruction::mayReadOrWriteMemory().

Referenced by isMemDepNodeCandidate(), and llvm::sandboxir::isOrdered().

◆ isMemDepNodeCandidate()

static bool llvm::sandboxir::DGNode::isMemDepNodeCandidate ( Instruction I)
inlinestatic

◆ isMemIntrinsic()

static bool llvm::sandboxir::DGNode::isMemIntrinsic ( IntrinsicInst I)
inlinestatic

\Returns true if intrinsic I touches memory.

This is used by the dependency graph.

Definition at line 168 of file DependencyGraph.h.

References I.

Referenced by isFenceLike(), and isMemDepCandidate().

◆ isStackSaveOrRestoreIntrinsic()

static bool llvm::sandboxir::DGNode::isStackSaveOrRestoreIntrinsic ( Instruction I)
inlinestatic

Definition at line 158 of file DependencyGraph.h.

References I, and II.

Referenced by isMemDepNodeCandidate().

◆ preds()

iterator_range< iterator > llvm::sandboxir::DGNode::preds ( DependencyGraph DAG) const
inline

\Returns a range of DAG predecessors nodes.

If this is a MemDGNode then this will also include the memory dependency predecessors. Please note that this can include the same node more than once, if for example it's both a use-def predecessor and a mem dep predecessor.

Definition at line 154 of file DependencyGraph.h.

References llvm::make_range(), preds_begin(), and preds_end().

◆ preds_begin() [1/2]

virtual iterator llvm::sandboxir::DGNode::preds_begin ( DependencyGraph DAG)
inlinevirtual

◆ preds_begin() [2/2]

iterator llvm::sandboxir::DGNode::preds_begin ( DependencyGraph DAG) const
inline

Definition at line 144 of file DependencyGraph.h.

References preds_begin().

◆ preds_end() [1/2]

virtual iterator llvm::sandboxir::DGNode::preds_end ( DependencyGraph DAG)
inlinevirtual

Reimplemented in llvm::sandboxir::MemDGNode.

Definition at line 141 of file DependencyGraph.h.

References I, and llvm::sandboxir::User::op_end().

Referenced by preds(), and preds_end().

◆ preds_end() [2/2]

iterator llvm::sandboxir::DGNode::preds_end ( DependencyGraph DAG) const
inline

Definition at line 147 of file DependencyGraph.h.

References preds_end().

◆ print()

void llvm::sandboxir::DGNode::print ( raw_ostream OS,
bool  PrintDeps = true 
) const
virtual

Reimplemented in llvm::sandboxir::MemDGNode.

Definition at line 69 of file DependencyGraph.cpp.

References I, OS, Scheduled, and UnscheduledSuccs.

Referenced by dump(), and llvm::sandboxir::MemDGNode::print().

◆ ready()

bool llvm::sandboxir::DGNode::ready ( ) const
inline

\Returns true if all dependent successors have been scheduled.

Definition at line 128 of file DependencyGraph.h.

References UnscheduledSuccs.

◆ scheduled()

bool llvm::sandboxir::DGNode::scheduled ( ) const
inline

\Returns true if this node has been scheduled.

Definition at line 130 of file DependencyGraph.h.

References Scheduled.

◆ setSchedBundle()

void llvm::sandboxir::DGNode::setSchedBundle ( SchedBundle SB)
inlineprotected

Definition at line 107 of file DependencyGraph.h.

References SB.

◆ setScheduled()

void llvm::sandboxir::DGNode::setScheduled ( bool  NewVal)
inline

Definition at line 131 of file DependencyGraph.h.

References Scheduled.

Friends And Related Function Documentation

◆ DependencyGraph

friend class DependencyGraph
friend

Definition at line 113 of file DependencyGraph.h.

◆ MemDGNode

friend class MemDGNode
friend

Definition at line 112 of file DependencyGraph.h.

◆ operator<<

raw_ostream & operator<< ( raw_ostream OS,
DGNode N 
)
friend

Definition at line 202 of file DependencyGraph.h.

◆ SchedBundle

friend class SchedBundle
friend

Definition at line 109 of file DependencyGraph.h.

Member Data Documentation

◆ I

Instruction* llvm::sandboxir::DGNode::I
protected

◆ SB

SchedBundle* llvm::sandboxir::DGNode::SB = nullptr
protected

The scheduler bundle that this node belongs to.

Definition at line 105 of file DependencyGraph.h.

Referenced by getSchedBundle(), setSchedBundle(), and ~DGNode().

◆ Scheduled

bool llvm::sandboxir::DGNode::Scheduled = false
protected

This is true if this node has been scheduled.

Definition at line 103 of file DependencyGraph.h.

Referenced by llvm::sandboxir::MemDGNode::addMemPred(), print(), scheduled(), and setScheduled().

◆ SubclassID

DGNodeID llvm::sandboxir::DGNode::SubclassID
protected

For isa/dyn_cast etc.

Definition at line 99 of file DependencyGraph.h.

◆ UnscheduledSuccs

unsigned llvm::sandboxir::DGNode::UnscheduledSuccs = 0
protected

The number of unscheduled successors.

Definition at line 101 of file DependencyGraph.h.

Referenced by llvm::sandboxir::MemDGNode::addMemPred(), decrUnscheduledSuccs(), getNumUnscheduledSuccs(), print(), and ready().


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