LLVM 22.0.0git
llvm::PostDominatorTree Class Reference

PostDominatorTree Class - Concrete subclass of DominatorTree that is used to compute the post-dominator tree. More...

#include "llvm/Analysis/PostDominators.h"

Inheritance diagram for llvm::PostDominatorTree:
[legend]

Public Types

using Base = PostDomTreeBase<BasicBlock>
Public Types inherited from llvm::DominatorTreeBase< T, true >
enum  VerificationLevel
using NodeTrait
using NodeType
using NodePtr
using ParentPtr
using ParentType
using UpdateType
using UpdateKind
using root_iterator
 Iteration over roots.
using const_root_iterator

Public Member Functions

 PostDominatorTree ()=default
 PostDominatorTree (Function &F)
LLVM_ABI bool invalidate (Function &F, const PreservedAnalyses &PA, FunctionAnalysisManager::Invalidator &)
 Handle invalidation explicitly.
LLVM_ABI bool dominates (const Instruction *I1, const Instruction *I2) const
 Return true if I1 dominates I2.
bool dominates (const DomTreeNodeBase< T > *A, const DomTreeNodeBase< T > *B) const
 dominates - Returns true iff A dominates B.
bool dominates (const T *A, const T *B) const
Public Member Functions inherited from llvm::DominatorTreeBase< T, true >
 DominatorTreeBase ()=default
 DominatorTreeBase (DominatorTreeBase &&Arg)
DominatorTreeBaseoperator= (DominatorTreeBase &&RHS)
 DominatorTreeBase (const DominatorTreeBase &)=delete
DominatorTreeBaseoperator= (const DominatorTreeBase &)=delete
root_iterator root_begin ()
const_root_iterator root_begin () const
root_iterator root_end ()
const_root_iterator root_end () const
size_t root_size () const
iterator_range< root_iteratorroots ()
iterator_range< const_root_iteratorroots () const
bool isPostDominator () const
 isPostDominator - Returns true if analysis based of postdoms
bool compare (const DominatorTreeBase &Other) const
 compare - Return false if the other dominator tree base matches this dominator tree base.
DomTreeNodeBase< T > * getNode (const T *BB) const
 getNode - return the (Post)DominatorTree node for the specified basic block.
DomTreeNodeBase< T > * operator[] (const T *BB) const
 See getNode.
DomTreeNodeBase< T > * getRootNode ()
 getRootNode - This returns the entry node for the CFG of the function.
const DomTreeNodeBase< T > * getRootNode () const
void getDescendants (T *R, SmallVectorImpl< T * > &Result) const
 Get all nodes dominated by R, including R itself.
bool properlyDominates (const DomTreeNodeBase< T > *A, const DomTreeNodeBase< T > *B) const
 properlyDominates - Returns true iff A dominates B and A != B.
bool properlyDominates (const T *A, const T *B) const
bool isReachableFromEntry (const T *A) const
 isReachableFromEntry - Return true if A is dominated by the entry block of the function containing it.
bool isReachableFromEntry (const DomTreeNodeBase< T > *A) const
bool dominates (const DomTreeNodeBase< T > *A, const DomTreeNodeBase< T > *B) const
 dominates - Returns true iff A dominates B.
bool dominates (const T *A, const T *B) const
TgetRoot () const
TfindNearestCommonDominator (T *A, T *B) const
 Find nearest common dominator basic block for basic block A and B.
const TfindNearestCommonDominator (const T *A, const T *B) const
bool isVirtualRoot (const DomTreeNodeBase< T > *A) const
TfindNearestCommonDominator (iterator_range< IteratorTy > Nodes) const
void applyUpdates (ArrayRef< UpdateType > Updates)
 Inform the dominator tree about a sequence of CFG edge insertions and deletions and perform a batch update on the tree.
void applyUpdates (ArrayRef< UpdateType > Updates, ArrayRef< UpdateType > PostViewUpdates)
void insertEdge (T *From, T *To)
 Inform the dominator tree about a CFG edge insertion and update the tree.
void deleteEdge (T *From, T *To)
 Inform the dominator tree about a CFG edge deletion and update the tree.
DomTreeNodeBase< T > * addNewBlock (T *BB, T *DomBB)
 Add a new node to the dominator tree information.
DomTreeNodeBase< T > * setNewRoot (T *BB)
 Add a new node to the forward dominator tree and make it a new root.
void changeImmediateDominator (DomTreeNodeBase< T > *N, DomTreeNodeBase< T > *NewIDom)
 changeImmediateDominator - This method is used to update the dominator tree information when a node's immediate dominator changes.
void changeImmediateDominator (T *BB, T *NewBB)
void eraseNode (T *BB)
 eraseNode - Removes a node from the dominator tree.
void splitBlock (T *NewBB)
 splitBlock - BB is split and now it has one successor.
void print (raw_ostream &O) const
 print - Convert to human readable form
void updateDFSNumbers () const
 updateDFSNumbers - Assign In and Out numbers to the nodes while walking dominator tree in dfs order.
void recalculate (ParentType &Func)
 recalculate - compute a dominator tree for the given function
void recalculate (ParentType &Func, ArrayRef< UpdateType > Updates)
std::enable_if_t< GraphHasNodeNumbers< T * >, void > updateBlockNumbers ()
 Update dominator tree after renumbering blocks.
bool verify (VerificationLevel VL=VerificationLevel::Full) const
 verify - checks if the tree is correct.
void reset ()

Additional Inherited Members

Static Public Attributes inherited from llvm::DominatorTreeBase< T, true >
static constexpr bool IsPostDominator
static constexpr UpdateKind Insert
static constexpr UpdateKind Delete
Protected Types inherited from llvm::DominatorTreeBase< T, true >
using DomTreeNodeStorageTy
Protected Member Functions inherited from llvm::DominatorTreeBase< T, true >
void addRoot (T *BB)
DomTreeNodeBase< T > * createNode (T *BB, DomTreeNodeBase< T > *IDom=nullptr)
void Split (typename GraphTraits< N >::NodeRef NewBB)
Protected Attributes inherited from llvm::DominatorTreeBase< T, true >
SmallVector< T *, IsPostDom ? 4 :1 > Roots
DomTreeNodeStorageTy DomTreeNodes
std::conditional_t<!GraphHasNodeNumbers< T * >, DenseMap< const T *, unsigned >, std::tuple<> > NodeNumberMap
DomTreeNodeBase< T > * RootNode
ParentPtr Parent
bool DFSInfoValid
unsigned int SlowQueries
unsigned BlockNumberEpoch

Detailed Description

PostDominatorTree Class - Concrete subclass of DominatorTree that is used to compute the post-dominator tree.

Definition at line 29 of file PostDominators.h.

Member Typedef Documentation

◆ Base

Constructor & Destructor Documentation

◆ PostDominatorTree() [1/2]

llvm::PostDominatorTree::PostDominatorTree ( )
default

◆ PostDominatorTree() [2/2]

llvm::PostDominatorTree::PostDominatorTree ( Function & F)
inlineexplicit

Definition at line 34 of file PostDominators.h.

References F, and llvm::DominatorTreeBase< T, true >::recalculate().

Member Function Documentation

◆ dominates() [1/3]

bool llvm::DominatorTreeBase< T, IsPostDom >::dominates ( const DomTreeNodeBase< T > * A,
const DomTreeNodeBase< T > * B ) const
inline

dominates - Returns true iff A dominates B.

Note that this is not a constant time operation!

Definition at line 466 of file GenericDomTree.h.

◆ dominates() [2/3]

bool PostDominatorTree::dominates ( const Instruction * I1,
const Instruction * I2 ) const

Return true if I1 dominates I2.

This checks if I2 comes before I1 if they belongs to the same basic block.

Definition at line 52 of file PostDominators.cpp.

References assert(), llvm::BasicBlock::begin(), llvm::DominatorTreeBase< T, true >::dominates(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), I, and llvm::isa().

Referenced by llvm::memtag::forAllReachableExits(), isFullPostDominator(), and llvm::nonStrictlyPostDominate().

◆ dominates() [3/3]

bool llvm::DominatorTreeBase< T, IsPostDom >::dominates ( const T * A,
const T * B ) const

◆ invalidate()

LLVM_ABI bool llvm::PostDominatorTree::invalidate ( Function & F,
const PreservedAnalyses & PA,
FunctionAnalysisManager::Invalidator &  )

Handle invalidation explicitly.

References llvm::DominatorTreeBase< T, true >::dominates(), F, and LLVM_ABI.


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