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: