LLVM API Documentation

Classes | Public Types | Public Member Functions | Public Attributes
llvm::bfi_detail::IrreducibleGraph Struct Reference

Graph of irreducible control flow. More...

#include <BlockFrequencyInfoImpl.h>

Collaboration diagram for llvm::bfi_detail::IrreducibleGraph:
Collaboration graph
[legend]

List of all members.

Classes

struct  IrrNode

Public Types

typedef BlockFrequencyInfoImplBase BFIBase
typedef BFIBase::BlockNode BlockNode

Public Member Functions

template<class BlockEdgesAdder >
 IrreducibleGraph (BFIBase &BFI, const BFIBase::LoopData *OuterLoop, BlockEdgesAdder addBlockEdges)
 Construct an explicit graph containing irreducible control flow.
template<class BlockEdgesAdder >
void initialize (const BFIBase::LoopData *OuterLoop, BlockEdgesAdder addBlockEdges)
void addNodesInLoop (const BFIBase::LoopData &OuterLoop)
void addNodesInFunction ()
void addNode (const BlockNode &Node)
void indexNodes ()
template<class BlockEdgesAdder >
void addEdges (const BlockNode &Node, const BFIBase::LoopData *OuterLoop, BlockEdgesAdder addBlockEdges)
void addEdge (IrrNode &Irr, const BlockNode &Succ, const BFIBase::LoopData *OuterLoop)

Public Attributes

BFIBaseBFI
BlockNode Start
const IrrNodeStartIrr
std::vector< IrrNodeNodes
SmallDenseMap< uint32_t,
IrrNode *, 4 > 
Lookup

Detailed 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 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 is defined in the header.

Definition at line 525 of file BlockFrequencyInfoImpl.h.


Member Typedef Documentation

Definition at line 526 of file BlockFrequencyInfoImpl.h.

Definition at line 530 of file BlockFrequencyInfoImpl.h.


Constructor & Destructor Documentation

template<class BlockEdgesAdder >
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 558 of file BlockFrequencyInfoImpl.h.

References initialize().


Member Function Documentation

void IrreducibleGraph::addEdge ( IrrNode Irr,
const BlockNode Succ,
const BFIBase::LoopData OuterLoop 
)
template<class BlockEdgesAdder >
void llvm::bfi_detail::IrreducibleGraph::addEdges ( const BlockNode Node,
const BFIBase::LoopData OuterLoop,
BlockEdgesAdder  addBlockEdges 
)

Definition at line 537 of file BlockFrequencyInfoImpl.cpp.

References llvm::ARMISD::BFI.

Referenced by initialize().

Definition at line 544 of file BlockFrequencyInfoImpl.cpp.

References I, and Lookup().

template<class BlockEdgesAdder >
void llvm::bfi_detail::IrreducibleGraph::initialize ( const BFIBase::LoopData OuterLoop,
BlockEdgesAdder  addBlockEdges 
)

Member Data Documentation

Definition at line 528 of file BlockFrequencyInfoImpl.h.

Referenced by addEdges(), addNode(), and initialize().

Definition at line 546 of file BlockFrequencyInfoImpl.h.

Referenced by addEdges(), and initialize().

Definition at line 545 of file BlockFrequencyInfoImpl.h.

Referenced by addNode().

Definition at line 543 of file BlockFrequencyInfoImpl.h.

Referenced by initialize().


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