LLVM 22.0.0git
llvm::sandboxir::MemDGNode Class Referencefinal

A DependencyGraph Node for instructions that may read/write memory, or have some ordering constraints, like with stacksave/stackrestore and alloca/inalloca. More...

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

Inheritance diagram for llvm::sandboxir::MemDGNode:
[legend]

Public Member Functions

 MemDGNode (Instruction *I)
iterator preds_begin (DependencyGraph &DAG) override
iterator preds_end (DependencyGraph &DAG) override
MemDGNodegetPrevNode () const
 \Returns the previous Mem DGNode in instruction order.
MemDGNodegetNextNode () const
 \Returns the next Mem DGNode in instruction order.
void addMemPred (MemDGNode *PredN)
 Adds the mem dependency edge PredN->this.
void removeMemPred (MemDGNode *PredN)
 Removes the memory dependency PredN->this.
bool hasMemPred (DGNode *N) const
 \Returns true if there is a memory dependency N->this.
iterator_range< DenseSet< MemDGNode * >::const_iteratormemPreds () const
 \Returns all memory dependency predecessors. Used by tests.
iterator_range< DenseSet< MemDGNode * >::const_iteratormemSuccs () const
 \Returns all memory dependency successors.
virtual void print (raw_ostream &OS, bool PrintDeps=true) const override
Public Member Functions inherited from llvm::sandboxir::DGNode
 DGNode (Instruction *I)
 DGNode (const DGNode &Other)=delete
virtual ~DGNode ()
unsigned getNumUnscheduledSuccs () const
 \Returns the number of unscheduled successors.
void decrUnscheduledSuccs ()
void incrUnscheduledSuccs ()
void resetScheduleState ()
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.
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
LLVM_DUMP_METHOD void dump () const

Static Public Member Functions

static bool classof (const DGNode *Other)
Static Public Member Functions inherited from llvm::sandboxir::DGNode
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.

Friends

class PredIterator
class DependencyGraph

Additional Inherited Members

Public Types inherited from llvm::sandboxir::DGNode
using iterator = PredIterator
Protected Member Functions inherited from llvm::sandboxir::DGNode
void setSchedBundle (SchedBundle &SB)
void clearSchedBundle ()
 DGNode (Instruction *I, DGNodeID ID)
Protected Attributes inherited from llvm::sandboxir::DGNode
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.

Detailed Description

A DependencyGraph Node for instructions that may read/write memory, or have some ordering constraints, like with stacksave/stackrestore and alloca/inalloca.

Definition at line 221 of file DependencyGraph.h.

Constructor & Destructor Documentation

◆ MemDGNode()

Member Function Documentation

◆ addMemPred()

void llvm::sandboxir::MemDGNode::addMemPred ( MemDGNode * PredN)
inline

Adds the mem dependency edge PredN->this.

This also increments the UnscheduledSuccs counter of the predecessor if this node has not been scheduled.

Definition at line 275 of file DependencyGraph.h.

References assert(), MemDGNode(), llvm::sandboxir::DGNode::Scheduled, and llvm::sandboxir::DGNode::UnscheduledSuccs.

◆ classof()

bool llvm::sandboxir::MemDGNode::classof ( const DGNode * Other)
inlinestatic

◆ getNextNode()

MemDGNode * llvm::sandboxir::MemDGNode::getNextNode ( ) const
inline

\Returns the next Mem DGNode in instruction order.

Definition at line 271 of file DependencyGraph.h.

References MemDGNode().

◆ getPrevNode()

MemDGNode * llvm::sandboxir::MemDGNode::getPrevNode ( ) const
inline

\Returns the previous Mem DGNode in instruction order.

Definition at line 269 of file DependencyGraph.h.

References MemDGNode().

◆ hasMemPred()

bool llvm::sandboxir::MemDGNode::hasMemPred ( DGNode * N) const
inline

\Returns true if there is a memory dependency N->this.

Definition at line 294 of file DependencyGraph.h.

References llvm::sandboxir::DGNode::DGNode(), llvm::dyn_cast(), and N.

◆ memPreds()

iterator_range< DenseSet< MemDGNode * >::const_iterator > llvm::sandboxir::MemDGNode::memPreds ( ) const
inline

\Returns all memory dependency predecessors. Used by tests.

Definition at line 300 of file DependencyGraph.h.

References llvm::make_range().

◆ memSuccs()

iterator_range< DenseSet< MemDGNode * >::const_iterator > llvm::sandboxir::MemDGNode::memSuccs ( ) const
inline

\Returns all memory dependency successors.

Definition at line 304 of file DependencyGraph.h.

References llvm::make_range().

◆ preds_begin()

iterator llvm::sandboxir::MemDGNode::preds_begin ( DependencyGraph & DAG)
inlineoverridevirtual

Reimplemented from llvm::sandboxir::DGNode.

Definition at line 260 of file DependencyGraph.h.

References DependencyGraph, llvm::sandboxir::DGNode::I, and PredIterator.

◆ preds_end()

iterator llvm::sandboxir::MemDGNode::preds_end ( DependencyGraph & DAG)
inlineoverridevirtual

Reimplemented from llvm::sandboxir::DGNode.

Definition at line 265 of file DependencyGraph.h.

References DependencyGraph, llvm::sandboxir::DGNode::I, and PredIterator.

◆ print()

void llvm::sandboxir::MemDGNode::print ( raw_ostream & OS,
bool PrintDeps = true ) const
overridevirtual

Reimplemented from llvm::sandboxir::DGNode.

Definition at line 91 of file DependencyGraph.cpp.

References llvm::raw_ostream::indent(), and llvm::sandboxir::DGNode::print().

◆ removeMemPred()

void llvm::sandboxir::MemDGNode::removeMemPred ( MemDGNode * PredN)
inline

Removes the memory dependency PredN->this.

This also updates the UnscheduledSuccs counter of PredN if this node has not been scheduled.

Definition at line 286 of file DependencyGraph.h.

References llvm::sandboxir::DGNode::decrUnscheduledSuccs(), MemDGNode(), and llvm::sandboxir::DGNode::Scheduled.

◆ DependencyGraph

friend class DependencyGraph
friend

Definition at line 243 of file DependencyGraph.h.

References DependencyGraph.

Referenced by DependencyGraph, preds_begin(), and preds_end().

◆ PredIterator

friend class PredIterator
friend

Definition at line 228 of file DependencyGraph.h.

References assert(), MemDGNode(), N, and PredIterator.

Referenced by PredIterator, preds_begin(), and preds_end().


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