LLVM 22.0.0git
llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT > Struct Template Reference

#include "llvm/Support/GenericDomTreeConstruction.h"

Classes

struct  BatchUpdateInfo
struct  BlockNamePrinter
struct  InfoRec
struct  InsertionInfo

Public Types

using NodePtr = typename DomTreeT::NodePtr
using NodeT = typename DomTreeT::NodeType
using TreeNodePtr = DomTreeNodeBase<NodeT> *
using RootsT = decltype(DomTreeT::Roots)
using GraphDiffT = GraphDiff<NodePtr, IsPostDom>
using UpdateT = typename DomTreeT::UpdateType
using UpdateKind = typename DomTreeT::UpdateKind
using BatchUpdatePtr = BatchUpdateInfo *
using NodeOrderMap = DenseMap<NodePtr, unsigned>

Public Member Functions

 SemiNCAInfo (BatchUpdatePtr BUI)
void clear ()
InfoRecgetNodeInfo (NodePtr BB)
NodePtr getIDom (NodePtr BB)
TreeNodePtr getNodeForBlock (NodePtr BB, DomTreeT &DT)
template<bool IsReverse = false, typename DescendCondition>
unsigned runDFS (NodePtr V, unsigned LastNum, DescendCondition Condition, unsigned AttachToNum, const NodeOrderMap *SuccOrder=nullptr)
unsigned eval (unsigned V, unsigned LastLinked, SmallVectorImpl< InfoRec * > &Stack, ArrayRef< InfoRec * > NumToInfo)
void runSemiNCA ()
void addVirtualRoot ()
template<typename DescendCondition>
void doFullDFSWalk (const DomTreeT &DT, DescendCondition DC)
void attachNewSubtree (DomTreeT &DT, const TreeNodePtr AttachTo)
void reattachExistingSubtree (DomTreeT &DT, const TreeNodePtr AttachTo)
bool verifyRoots (const DomTreeT &DT)
bool verifyReachability (const DomTreeT &DT)
bool verifyParentProperty (const DomTreeT &DT)
bool verifySiblingProperty (const DomTreeT &DT)

Static Public Member Functions

template<bool Inversed>
static SmallVector< NodePtr, 8 > getChildren (NodePtr N, BatchUpdatePtr BUI)
template<bool Inversed>
static SmallVector< NodePtr, 8 > getChildren (NodePtr N)
static bool AlwaysDescend (NodePtr, NodePtr)
static bool HasForwardSuccessors (const NodePtr N, BatchUpdatePtr BUI)
static NodePtr GetEntryNode (const DomTreeT &DT)
static RootsT FindRoots (const DomTreeT &DT, BatchUpdatePtr BUI)
static void RemoveRedundantRoots (const DomTreeT &DT, BatchUpdatePtr BUI, RootsT &Roots)
static void CalculateFromScratch (DomTreeT &DT, BatchUpdatePtr BUI)
static void InsertEdge (DomTreeT &DT, const BatchUpdatePtr BUI, const NodePtr From, const NodePtr To)
static bool UpdateRootsBeforeInsertion (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr From, const TreeNodePtr To)
static bool isPermutation (const SmallVectorImpl< NodePtr > &A, const SmallVectorImpl< NodePtr > &B)
static void UpdateRootsAfterUpdate (DomTreeT &DT, const BatchUpdatePtr BUI)
static void InsertReachable (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr From, const TreeNodePtr To)
static void UpdateInsertion (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr NCD, InsertionInfo &II)
static void InsertUnreachable (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr From, const NodePtr To)
static void ComputeUnreachableDominators (DomTreeT &DT, const BatchUpdatePtr BUI, const NodePtr Root, const TreeNodePtr Incoming, SmallVectorImpl< std::pair< NodePtr, TreeNodePtr > > &DiscoveredConnectingEdges)
static void DeleteEdge (DomTreeT &DT, const BatchUpdatePtr BUI, const NodePtr From, const NodePtr To)
static void DeleteReachable (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr FromTN, const TreeNodePtr ToTN)
static bool HasProperSupport (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr TN)
static void DeleteUnreachable (DomTreeT &DT, const BatchUpdatePtr BUI, const TreeNodePtr ToTN)
static void ApplyUpdates (DomTreeT &DT, GraphDiffT &PreViewCFG, GraphDiffT *PostViewCFG)
static void ApplyNextUpdate (DomTreeT &DT, BatchUpdateInfo &BUI)
static bool VerifyLevels (const DomTreeT &DT)
static bool VerifyDFSNumbers (const DomTreeT &DT)
static bool IsSameAsFreshTree (const DomTreeT &DT)

Public Attributes

SmallVector< NodePtr, 64 > NumToNode = {nullptr}
std::conditional_t< GraphHasNodeNumbers< NodePtr >, SmallVector< InfoRec, 64 >, DenseMap< NodePtr, InfoRec > > NodeInfos
BatchUpdateInfoBatchUpdates

Static Public Attributes

static constexpr bool IsPostDom = DomTreeT::IsPostDominator

Detailed Description

template<typename DomTreeT>
struct llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >

Definition at line 55 of file GenericDomTreeConstruction.h.

Member Typedef Documentation

◆ BatchUpdatePtr

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::BatchUpdatePtr = BatchUpdateInfo *

Definition at line 99 of file GenericDomTreeConstruction.h.

◆ GraphDiffT

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::GraphDiffT = GraphDiff<NodePtr, IsPostDom>

Definition at line 61 of file GenericDomTreeConstruction.h.

◆ NodeOrderMap

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::NodeOrderMap = DenseMap<NodePtr, unsigned>

Definition at line 182 of file GenericDomTreeConstruction.h.

◆ NodePtr

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::NodePtr = typename DomTreeT::NodePtr

Definition at line 56 of file GenericDomTreeConstruction.h.

◆ NodeT

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::NodeT = typename DomTreeT::NodeType

Definition at line 57 of file GenericDomTreeConstruction.h.

◆ RootsT

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::RootsT = decltype(DomTreeT::Roots)

Definition at line 59 of file GenericDomTreeConstruction.h.

◆ TreeNodePtr

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::TreeNodePtr = DomTreeNodeBase<NodeT> *

Definition at line 58 of file GenericDomTreeConstruction.h.

◆ UpdateKind

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::UpdateKind = typename DomTreeT::UpdateKind

Definition at line 83 of file GenericDomTreeConstruction.h.

◆ UpdateT

template<typename DomTreeT>
using llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::UpdateT = typename DomTreeT::UpdateType

Definition at line 82 of file GenericDomTreeConstruction.h.

Constructor & Destructor Documentation

◆ SemiNCAInfo()

template<typename DomTreeT>
llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::SemiNCAInfo ( BatchUpdatePtr BUI)
inline

Member Function Documentation

◆ addVirtualRoot()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::addVirtualRoot ( )
inline

Definition at line 326 of file GenericDomTreeConstruction.h.

References assert(), getNodeInfo(), IsPostDom, and NumToNode.

Referenced by doFullDFSWalk(), and FindRoots().

◆ AlwaysDescend()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::AlwaysDescend ( NodePtr ,
NodePtr  )
inlinestatic

◆ ApplyNextUpdate()

◆ ApplyUpdates()

◆ attachNewSubtree()

◆ CalculateFromScratch()

◆ clear()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::clear ( )
inline

◆ ComputeUnreachableDominators()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::ComputeUnreachableDominators ( DomTreeT & DT,
const BatchUpdatePtr BUI,
const NodePtr Root,
const TreeNodePtr Incoming,
SmallVectorImpl< std::pair< NodePtr, TreeNodePtr > > & DiscoveredConnectingEdges )
inlinestatic

◆ DeleteEdge()

◆ DeleteReachable()

◆ DeleteUnreachable()

◆ doFullDFSWalk()

template<typename DomTreeT>
template<typename DescendCondition>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::doFullDFSWalk ( const DomTreeT & DT,
DescendCondition DC )
inline

◆ eval()

◆ FindRoots()

◆ getChildren() [1/2]

template<typename DomTreeT>
template<bool Inversed>
SmallVector< NodePtr, 8 > llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::getChildren ( NodePtr N)
inlinestatic

◆ getChildren() [2/2]

◆ GetEntryNode()

template<typename DomTreeT>
NodePtr llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::GetEntryNode ( const DomTreeT & DT)
inlinestatic

Definition at line 344 of file GenericDomTreeConstruction.h.

References assert().

Referenced by FindRoots(), and verifyRoots().

◆ getIDom()

template<typename DomTreeT>
NodePtr llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::getIDom ( NodePtr BB)
inline

◆ getNodeForBlock()

template<typename DomTreeT>
TreeNodePtr llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::getNodeForBlock ( NodePtr BB,
DomTreeT & DT )
inline

Definition at line 149 of file GenericDomTreeConstruction.h.

References assert(), getIDom(), and getNodeForBlock().

Referenced by attachNewSubtree(), and getNodeForBlock().

◆ getNodeInfo()

◆ HasForwardSuccessors()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::HasForwardSuccessors ( const NodePtr N,
BatchUpdatePtr BUI )
inlinestatic

◆ HasProperSupport()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::HasProperSupport ( DomTreeT & DT,
const BatchUpdatePtr BUI,
const TreeNodePtr TN )
inlinestatic

◆ InsertEdge()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::InsertEdge ( DomTreeT & DT,
const BatchUpdatePtr BUI,
const NodePtr From,
const NodePtr To )
inlinestatic

◆ InsertReachable()

◆ InsertUnreachable()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::InsertUnreachable ( DomTreeT & DT,
const BatchUpdatePtr BUI,
const TreeNodePtr From,
const NodePtr To )
inlinestatic

◆ isPermutation()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::isPermutation ( const SmallVectorImpl< NodePtr > & A,
const SmallVectorImpl< NodePtr > & B )
inlinestatic

Definition at line 696 of file GenericDomTreeConstruction.h.

References A(), B(), llvm::from_range, and N.

Referenced by UpdateRootsAfterUpdate(), and verifyRoots().

◆ IsSameAsFreshTree()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::IsSameAsFreshTree ( const DomTreeT & DT)
inlinestatic

◆ reattachExistingSubtree()

◆ RemoveRedundantRoots()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::RemoveRedundantRoots ( const DomTreeT & DT,
BatchUpdatePtr BUI,
RootsT & Roots )
inlinestatic

◆ runDFS()

◆ runSemiNCA()

◆ UpdateInsertion()

◆ UpdateRootsAfterUpdate()

template<typename DomTreeT>
void llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::UpdateRootsAfterUpdate ( DomTreeT & DT,
const BatchUpdatePtr BUI )
inlinestatic

◆ UpdateRootsBeforeInsertion()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::UpdateRootsBeforeInsertion ( DomTreeT & DT,
const BatchUpdatePtr BUI,
const TreeNodePtr From,
const TreeNodePtr To )
inlinestatic

◆ VerifyDFSNumbers()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::VerifyDFSNumbers ( const DomTreeT & DT)
inlinestatic

◆ VerifyLevels()

◆ verifyParentProperty()

◆ verifyReachability()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::verifyReachability ( const DomTreeT & DT)
inline

◆ verifyRoots()

template<typename DomTreeT>
bool llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::verifyRoots ( const DomTreeT & DT)
inline

◆ verifySiblingProperty()

Member Data Documentation

◆ BatchUpdates

template<typename DomTreeT>
BatchUpdateInfo* llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::BatchUpdates

Definition at line 98 of file GenericDomTreeConstruction.h.

Referenced by FindRoots(), runDFS(), and SemiNCAInfo().

◆ IsPostDom

◆ NodeInfos

template<typename DomTreeT>
std::conditional_t<GraphHasNodeNumbers<NodePtr>, SmallVector<InfoRec, 64>, DenseMap<NodePtr, InfoRec> > llvm::DomTreeBuilder::SemiNCAInfo< DomTreeT >::NodeInfos

Definition at line 80 of file GenericDomTreeConstruction.h.

Referenced by clear(), and getNodeInfo().

◆ NumToNode


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