LLVM 20.0.0git
Public Member Functions | List of all members
llvm::MachinePostDominatorTree Class Reference

MachinePostDominatorTree - an analysis pass wrapper for DominatorTree used to compute the post-dominator tree for MachineFunctions. More...

#include "llvm/CodeGen/MachinePostDominators.h"

Inheritance diagram for llvm::MachinePostDominatorTree:
Inheritance graph
[legend]

Public Member Functions

 MachinePostDominatorTree ()=default
 
 MachinePostDominatorTree (MachineFunction &MF)
 
bool invalidate (MachineFunction &, const PreservedAnalyses &PA, MachineFunctionAnalysisManager::Invalidator &)
 Handle invalidation explicitly.
 
MachineBasicBlockfindNearestCommonDominator (ArrayRef< MachineBasicBlock * > Blocks) const
 Returns the nearest common dominator of the given blocks.
 
NodeT * findNearestCommonDominator (NodeT *A, NodeT *B) const
 Make findNearestCommonDominator(const NodeT *A, const NodeT *B) available.
 
const NodeT * findNearestCommonDominator (const NodeT *A, const NodeT *B) const
 Make findNearestCommonDominator(const NodeT *A, const NodeT *B) available.
 
- Public Member Functions inherited from llvm::DominatorTreeBase< NodeT, IsPostDom >
 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< NodeT > * getNode (const NodeT *BB) const
 getNode - return the (Post)DominatorTree node for the specified basic block.
 
DomTreeNodeBase< NodeT > * operator[] (const NodeT *BB) const
 See getNode.
 
DomTreeNodeBase< NodeT > * getRootNode ()
 getRootNode - This returns the entry node for the CFG of the function.
 
const DomTreeNodeBase< NodeT > * getRootNode () const
 
void getDescendants (NodeT *R, SmallVectorImpl< NodeT * > &Result) const
 Get all nodes dominated by R, including R itself.
 
bool properlyDominates (const DomTreeNodeBase< NodeT > *A, const DomTreeNodeBase< NodeT > *B) const
 properlyDominates - Returns true iff A dominates B and A != B.
 
bool properlyDominates (const NodeT *A, const NodeT *B) const
 
bool isReachableFromEntry (const NodeT *A) const
 isReachableFromEntry - Return true if A is dominated by the entry block of the function containing it.
 
bool isReachableFromEntry (const DomTreeNodeBase< NodeT > *A) const
 
bool dominates (const DomTreeNodeBase< NodeT > *A, const DomTreeNodeBase< NodeT > *B) const
 dominates - Returns true iff A dominates B.
 
bool dominates (const NodeT *A, const NodeT *B) const
 
NodeT * getRoot () const
 
NodeT * findNearestCommonDominator (NodeT *A, NodeT *B) const
 Find nearest common dominator basic block for basic block A and B.
 
const NodeT * findNearestCommonDominator (const NodeT *A, const NodeT *B) const
 
bool isVirtualRoot (const DomTreeNodeBase< NodeT > *A) 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 (NodeT *From, NodeT *To)
 Inform the dominator tree about a CFG edge insertion and update the tree.
 
void deleteEdge (NodeT *From, NodeT *To)
 Inform the dominator tree about a CFG edge deletion and update the tree.
 
DomTreeNodeBase< NodeT > * addNewBlock (NodeT *BB, NodeT *DomBB)
 Add a new node to the dominator tree information.
 
DomTreeNodeBase< NodeT > * setNewRoot (NodeT *BB)
 Add a new node to the forward dominator tree and make it a new root.
 
void changeImmediateDominator (DomTreeNodeBase< NodeT > *N, DomTreeNodeBase< NodeT > *NewIDom)
 changeImmediateDominator - This method is used to update the dominator tree information when a node's immediate dominator changes.
 
void changeImmediateDominator (NodeT *BB, NodeT *NewBB)
 
void eraseNode (NodeT *BB)
 eraseNode - Removes a node from the dominator tree.
 
void splitBlock (NodeT *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)
 
template<typename T = NodeT>
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

- Public Types inherited from llvm::DominatorTreeBase< NodeT, IsPostDom >
enum class  VerificationLevel { Fast , Basic , Full }
 
using NodeTrait = DomTreeNodeTraits< NodeT >
 
using NodeType = typename NodeTrait::NodeType
 
using NodePtr = typename NodeTrait::NodePtr
 
using ParentPtr = typename NodeTrait::ParentPtr
 
using ParentType = std::remove_pointer_t< ParentPtr >
 
using UpdateType = cfg::Update< NodePtr >
 
using UpdateKind = cfg::UpdateKind
 
using root_iterator = typename SmallVectorImpl< NodeT * >::iterator
 Iteration over roots.
 
using const_root_iterator = typename SmallVectorImpl< NodeT * >::const_iterator
 
- Static Public Attributes inherited from llvm::DominatorTreeBase< NodeT, IsPostDom >
static constexpr bool IsPostDominator = IsPostDom
 
static constexpr UpdateKind Insert = UpdateKind::Insert
 
static constexpr UpdateKind Delete = UpdateKind::Delete
 
- Protected Types inherited from llvm::DominatorTreeBase< NodeT, IsPostDom >
using DomTreeNodeStorageTy = SmallVector< std::unique_ptr< DomTreeNodeBase< NodeT > > >
 
- Protected Member Functions inherited from llvm::DominatorTreeBase< NodeT, IsPostDom >
void addRoot (NodeT *BB)
 
DomTreeNodeBase< NodeT > * createNode (NodeT *BB, DomTreeNodeBase< NodeT > *IDom=nullptr)
 
template<class N >
void Split (typename GraphTraits< N >::NodeRef NewBB)
 
void addRoot (MachineBasicBlock *MBB)
 
- Protected Attributes inherited from llvm::DominatorTreeBase< NodeT, IsPostDom >
SmallVector< NodeT *, IsPostDom ? 4 :1 > Roots
 
DomTreeNodeStorageTy DomTreeNodes
 
std::conditional_t<!GraphHasNodeNumbers< NodeT * >, DenseMap< const NodeT *, unsigned >, std::tuple<> > NodeNumberMap
 
DomTreeNodeBase< NodeT > * RootNode = nullptr
 
ParentPtr Parent = nullptr
 
bool DFSInfoValid = false
 
unsigned int SlowQueries = 0
 
unsigned BlockNumberEpoch = 0
 

Detailed Description

MachinePostDominatorTree - an analysis pass wrapper for DominatorTree used to compute the post-dominator tree for MachineFunctions.

Definition at line 46 of file MachinePostDominators.h.

Constructor & Destructor Documentation

◆ MachinePostDominatorTree() [1/2]

llvm::MachinePostDominatorTree::MachinePostDominatorTree ( )
default

◆ MachinePostDominatorTree() [2/2]

llvm::MachinePostDominatorTree::MachinePostDominatorTree ( MachineFunction MF)
inlineexplicit

Definition at line 52 of file MachinePostDominators.h.

Member Function Documentation

◆ findNearestCommonDominator() [1/3]

MachineBasicBlock * MachinePostDominatorTree::findNearestCommonDominator ( ArrayRef< MachineBasicBlock * >  Blocks) const

Returns the nearest common dominator of the given blocks.

If that tree node is a virtual root, a nullptr will be returned.

Definition at line 95 of file MachinePostDominators.cpp.

References assert(), Blocks, llvm::DominatorTreeBase< NodeT, IsPostDom >::findNearestCommonDominator(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getNode(), and llvm::DominatorTreeBase< NodeT, IsPostDom >::isVirtualRoot().

Referenced by llvm::PhiLoweringHelper::lowerPhis().

◆ findNearestCommonDominator() [2/3]

const NodeT * llvm::DominatorTreeBase< NodeT, IsPostDom >::findNearestCommonDominator ( const NodeT *  A,
const NodeT *  B 
) const
inline

Make findNearestCommonDominator(const NodeT *A, const NodeT *B) available.

Definition at line 549 of file GenericDomTree.h.

◆ findNearestCommonDominator() [3/3]

NodeT * llvm::DominatorTreeBase< NodeT, IsPostDom >::findNearestCommonDominator ( NodeT *  A,
NodeT *  B 
) const
inline

Make findNearestCommonDominator(const NodeT *A, const NodeT *B) available.

Definition at line 519 of file GenericDomTree.h.

◆ invalidate()

bool MachinePostDominatorTree::invalidate ( MachineFunction ,
const PreservedAnalyses PA,
MachineFunctionAnalysisManager::Invalidator  
)

Handle invalidation explicitly.

Definition at line 84 of file MachinePostDominators.cpp.

References llvm::PreservedAnalyses::getChecker().


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