LLVM: llvm::bfi_detail::IrreducibleGraph Struct Reference (original) (raw)
Graph of irreducible control flow. More...
#include "[llvm/Analysis/BlockFrequencyInfoImpl.h](BlockFrequencyInfoImpl%5F8h%5Fsource.html)"
| Public Member Functions | |
|---|---|
| template | |
| IrreducibleGraph (BFIBase &BFI, const BFIBase::LoopData *OuterLoop, BlockEdgesAdder addBlockEdges) | |
| Construct an explicit graph containing irreducible control flow. | |
| template | |
| void | initialize (const BFIBase::LoopData *OuterLoop, BlockEdgesAdder addBlockEdges) |
| void | addNodesInLoop (const BFIBase::LoopData &OuterLoop) |
| void | addNodesInFunction () |
| void | addNode (const BlockNode &Node) |
| void | indexNodes () |
| template | |
| void | addEdges (const BlockNode &Node, const BFIBase::LoopData *OuterLoop, BlockEdgesAdder addBlockEdges) |
| void | addEdge (IrrNode &Irr, const BlockNode &Succ, const BFIBase::LoopData *OuterLoop) |
| Public Attributes | |
|---|---|
| BFIBase & | BFI |
| BlockNode | Start |
| const IrrNode * | StartIrr = nullptr |
| std::vector< IrrNode > | Nodes |
| SmallDenseMap< uint32_t, IrrNode *, 4 > | Lookup |
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 BasicBlock or MachineBasicBlock graphs for most edges, but getting others from LoopData::ExitMap. The latter only has successor information.
IrreducibleGraph makes this graph explicit. It's in a form that can use GraphTraits (so that analyzeIrreducible() can use scc_iterator), and it explicitly lists predecessors and successors. The initialization that relies on [MachineBasicBlock](classllvm%5F1%5F1MachineBasicBlock.html) is defined in the header.
Definition at line 596 of file BlockFrequencyInfoImpl.h.
◆ BFIBase
◆ BlockNode
template
| llvm::bfi_detail::IrreducibleGraph::IrreducibleGraph ( BFIBase & BFI, const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges ) | inline |
|---|
Construct an explicit graph containing irreducible control flow.
Construct an explicit graph of the control flow in OuterLoop (or the top-level function, if OuterLoop is nullptr). Uses addBlockEdges to add block successors that have not been packaged into loops.
BlockFrequencyInfoImpl::computeIrreducibleMass() is the only expected user of this.
Definition at line 631 of file BlockFrequencyInfoImpl.h.
References BFI, and initialize().
◆ addEdge()
◆ addEdges()
template
| void llvm::bfi_detail::IrreducibleGraph::addEdges | ( | const BlockNode & | Node, |
|---|---|---|---|
| const BFIBase::LoopData * | OuterLoop, | ||
| BlockEdgesAdder | addBlockEdges ) |
◆ addNode()
| void llvm::bfi_detail::IrreducibleGraph::addNode ( const BlockNode & Node) | inline |
|---|
◆ addNodesInFunction()
| void IrreducibleGraph::addNodesInFunction | ( | ) |
|---|
◆ addNodesInLoop()
◆ indexNodes()
| void IrreducibleGraph::indexNodes | ( | ) |
|---|
◆ initialize()
template
| void llvm::bfi_detail::IrreducibleGraph::initialize | ( | const BFIBase::LoopData * | OuterLoop, |
|---|---|---|---|
| BlockEdgesAdder | addBlockEdges ) |
◆ BFI
BFIBase& llvm::bfi_detail::IrreducibleGraph::BFI
◆ Lookup
◆ Nodes
std::vector<IrrNode> llvm::bfi_detail::IrreducibleGraph::Nodes
◆ Start
BlockNode llvm::bfi_detail::IrreducibleGraph::Start
◆ StartIrr
const IrrNode* llvm::bfi_detail::IrreducibleGraph::StartIrr = nullptr
The documentation for this struct was generated from the following files:
- include/llvm/Analysis/BlockFrequencyInfoImpl.h
- lib/Analysis/BlockFrequencyInfoImpl.cpp