LLVM
8.0.1
|
Graph of irreducible control flow. More...
#include "llvm/Analysis/BlockFrequencyInfoImpl.h"
Classes | |
struct | IrrNode |
Public Types | |
using | BFIBase = BlockFrequencyInfoImplBase |
using | BlockNode = BFIBase::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 | |
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
is defined in the header.
Definition at line 597 of file BlockFrequencyInfoImpl.h.
Definition at line 598 of file BlockFrequencyInfoImpl.h.
Definition at line 602 of file BlockFrequencyInfoImpl.h.
|
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 632 of file BlockFrequencyInfoImpl.h.
References initialize().
void IrreducibleGraph::addEdge | ( | IrrNode & | Irr, |
const BlockNode & | Succ, | ||
const BFIBase::LoopData * | OuterLoop | ||
) |
Definition at line 649 of file BlockFrequencyInfoImpl.cpp.
References llvm::bfi_detail::IrreducibleGraph::IrrNode::Edges, llvm::BlockFrequencyInfoImplBase::BlockNode::Index, llvm::BlockFrequencyInfoImplBase::LoopData::isHeader(), Lookup(), and llvm::bfi_detail::IrreducibleGraph::IrrNode::NumIn.
Referenced by llvm::bfi_detail::BlockEdgesAdder< BT >::operator()().
void llvm::bfi_detail::IrreducibleGraph::addEdges | ( | const BlockNode & | Node, |
const BFIBase::LoopData * | OuterLoop, | ||
BlockEdgesAdder | addBlockEdges | ||
) |
Definition at line 672 of file BlockFrequencyInfoImpl.h.
Definition at line 643 of file BlockFrequencyInfoImpl.h.
void IrreducibleGraph::addNodesInFunction | ( | ) |
Definition at line 636 of file BlockFrequencyInfoImpl.cpp.
void IrreducibleGraph::addNodesInLoop | ( | const BFIBase::LoopData & | OuterLoop | ) |
Definition at line 628 of file BlockFrequencyInfoImpl.cpp.
void IrreducibleGraph::indexNodes | ( | ) |
Definition at line 644 of file BlockFrequencyInfoImpl.cpp.
void llvm::bfi_detail::IrreducibleGraph::initialize | ( | const BFIBase::LoopData * | OuterLoop, |
BlockEdgesAdder | addBlockEdges | ||
) |
Definition at line 657 of file BlockFrequencyInfoImpl.h.
References llvm::AMDGPUISD::BFI, Lookup(), N, and llvm::BlockFrequencyInfoImplBase::LoopData::Nodes.
BFIBase& llvm::bfi_detail::IrreducibleGraph::BFI |
Definition at line 600 of file BlockFrequencyInfoImpl.h.
SmallDenseMap<uint32_t, IrrNode *, 4> llvm::bfi_detail::IrreducibleGraph::Lookup |
Definition at line 620 of file BlockFrequencyInfoImpl.h.
std::vector<IrrNode> llvm::bfi_detail::IrreducibleGraph::Nodes |
Definition at line 619 of file BlockFrequencyInfoImpl.h.
BlockNode llvm::bfi_detail::IrreducibleGraph::Start |
Definition at line 617 of file BlockFrequencyInfoImpl.h.
Definition at line 618 of file BlockFrequencyInfoImpl.h.
Referenced by llvm::GraphTraits< IrreducibleGraph >::getEntryNode().