LLVM  3.7.0
Classes | Public Types | Public Member Functions | Public Attributes | List of all members
llvm::bfi_detail::IrreducibleGraph Struct Reference

Graph of irreducible control flow. More...

#include <BlockFrequencyInfoImpl.h>

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

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. More...
 
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 546 of file BlockFrequencyInfoImpl.h.

Member Typedef Documentation

Definition at line 547 of file BlockFrequencyInfoImpl.h.

Definition at line 551 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 579 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 
)
void llvm::bfi_detail::IrreducibleGraph::addNode ( const BlockNode Node)
inline
void IrreducibleGraph::addNodesInFunction ( )
void IrreducibleGraph::addNodesInLoop ( const BFIBase::LoopData OuterLoop)
void IrreducibleGraph::indexNodes ( )

Definition at line 571 of file BlockFrequencyInfoImpl.cpp.

References I, Lookup, and Nodes.

Referenced by addNodesInFunction(), and addNodesInLoop().

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

Member Data Documentation

BFIBase& llvm::bfi_detail::IrreducibleGraph::BFI

Definition at line 549 of file BlockFrequencyInfoImpl.h.

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

SmallDenseMap<uint32_t, IrrNode *, 4> llvm::bfi_detail::IrreducibleGraph::Lookup

Definition at line 567 of file BlockFrequencyInfoImpl.h.

Referenced by addEdge(), addEdges(), indexNodes(), and initialize().

std::vector<IrrNode> llvm::bfi_detail::IrreducibleGraph::Nodes

Definition at line 566 of file BlockFrequencyInfoImpl.h.

Referenced by addNode(), addNodesInLoop(), and indexNodes().

BlockNode llvm::bfi_detail::IrreducibleGraph::Start

Definition at line 564 of file BlockFrequencyInfoImpl.h.

Referenced by addNodesInFunction(), addNodesInLoop(), and initialize().

const IrrNode* llvm::bfi_detail::IrreducibleGraph::StartIrr

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