struct IrreducibleGraph
Declaration
struct IrreducibleGraph { /* full declaration omitted */ };
Description
Graph of irreducible control flow. This graph is used for determining the SCCs in a loop (or top-level function) that has irreducible control flow. During the block frequency algorithm, the local graphs are defined in a light-weight way, deferring to the \a BasicBlock or \a MachineBasicBlock graphs for most edges, but getting others from \a LoopData::ExitMap. The latter only has successor information. \a IrreducibleGraph makes this graph explicit. It's in a form that can use\a GraphTraits (so that \a analyzeIrreducible() can use \a scc_iterator), and it explicitly lists predecessors and successors. The initialization that relies on \c MachineBasicBlock is defined in the header.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:594
Member Variables
- public llvm::bfi_detail::IrreducibleGraph::BFIBase& BFI
- public llvm::bfi_detail::IrreducibleGraph::BlockNode Start
- public const llvm::bfi_detail::IrreducibleGraph::IrrNode* StartIrr = nullptr
- public std::vector<IrrNode> Nodes
- public SmallDenseMap< uint32_t, llvm::bfi_detail::IrreducibleGraph::IrrNode*, 4> Lookup
Method Overview
- public template <class BlockEdgesAdder> IrreducibleGraph(llvm::bfi_detail::IrreducibleGraph::BFIBase & BFI, const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges)
- public void addEdge(llvm::bfi_detail::IrreducibleGraph::IrrNode & Irr, const llvm::bfi_detail::IrreducibleGraph::BlockNode & Succ, const BFIBase::LoopData * OuterLoop)
- public template <class BlockEdgesAdder>void addEdges(const llvm::bfi_detail::IrreducibleGraph::BlockNode & Node, const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges)
- public void addNode(const llvm::bfi_detail::IrreducibleGraph::BlockNode & Node)
- public void addNodesInFunction()
- public void addNodesInLoop(const BFIBase::LoopData & OuterLoop)
- public void indexNodes()
- public template <class BlockEdgesAdder>void initialize(const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges)
Methods
¶template <class BlockEdgesAdder>
IrreducibleGraph(
llvm::bfi_detail::IrreducibleGraph::BFIBase&
BFI,
const BFIBase::LoopData* OuterLoop,
BlockEdgesAdder addBlockEdges)
template <class BlockEdgesAdder>
IrreducibleGraph(
llvm::bfi_detail::IrreducibleGraph::BFIBase&
BFI,
const BFIBase::LoopData* OuterLoop,
BlockEdgesAdder addBlockEdges)
Description
Construct an explicit graph containing irreducible control flow. Construct an explicit graph of the control flow in \c OuterLoop (or the top-level function, if \c OuterLoop is \c nullptr). Uses \c addBlockEdges to add block successors that have not been packaged into loops. \a BlockFrequencyInfoImpl::computeIrreducibleMass() is the only expected user of this.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:629
Templates
- BlockEdgesAdder
Parameters
- llvm::bfi_detail::IrreducibleGraph::BFIBase& BFI
- const BFIBase::LoopData* OuterLoop
- BlockEdgesAdder addBlockEdges
¶void addEdge(
llvm::bfi_detail::IrreducibleGraph::IrrNode&
Irr,
const llvm::bfi_detail::IrreducibleGraph::
BlockNode& Succ,
const BFIBase::LoopData* OuterLoop)
void addEdge(
llvm::bfi_detail::IrreducibleGraph::IrrNode&
Irr,
const llvm::bfi_detail::IrreducibleGraph::
BlockNode& Succ,
const BFIBase::LoopData* OuterLoop)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:649
Parameters
- llvm::bfi_detail::IrreducibleGraph::IrrNode& Irr
- const llvm::bfi_detail::IrreducibleGraph:: BlockNode& Succ
- const BFIBase::LoopData* OuterLoop
¶template <class BlockEdgesAdder>
void addEdges(
const llvm::bfi_detail::IrreducibleGraph::
BlockNode& Node,
const BFIBase::LoopData* OuterLoop,
BlockEdgesAdder addBlockEdges)
template <class BlockEdgesAdder>
void addEdges(
const llvm::bfi_detail::IrreducibleGraph::
BlockNode& Node,
const BFIBase::LoopData* OuterLoop,
BlockEdgesAdder addBlockEdges)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:647
Templates
- BlockEdgesAdder
Parameters
- const llvm::bfi_detail::IrreducibleGraph:: BlockNode& Node
- const BFIBase::LoopData* OuterLoop
- BlockEdgesAdder addBlockEdges
¶void addNode(
const llvm::bfi_detail::IrreducibleGraph::
BlockNode& Node)
void addNode(
const llvm::bfi_detail::IrreducibleGraph::
BlockNode& Node)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:640
Parameters
- const llvm::bfi_detail::IrreducibleGraph:: BlockNode& Node
¶void addNodesInFunction()
void addNodesInFunction()
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:638
¶void addNodesInLoop(
const BFIBase::LoopData& OuterLoop)
void addNodesInLoop(
const BFIBase::LoopData& OuterLoop)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:637
Parameters
- const BFIBase::LoopData& OuterLoop
¶void indexNodes()
void indexNodes()
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:645
¶template <class BlockEdgesAdder>
void initialize(
const BFIBase::LoopData* OuterLoop,
BlockEdgesAdder addBlockEdges)
template <class BlockEdgesAdder>
void initialize(
const BFIBase::LoopData* OuterLoop,
BlockEdgesAdder addBlockEdges)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:635
Templates
- BlockEdgesAdder
Parameters
- const BFIBase::LoopData* OuterLoop
- BlockEdgesAdder addBlockEdges