struct IrreducibleGraph

Declaration

struct IrreducibleGraph { /* full declaration omitted */ };

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 \a BasicBlock or \a MachineBasicBlock graphs for most edges, but getting others from \a LoopData::ExitMap. The latter only has successor information. \a IrreducibleGraph makes this graph explicit. It's in a form that can use\a GraphTraits (so that \a analyzeIrreducible() can use \a scc_iterator), and it explicitly lists predecessors and successors. The initialization that relies on \c MachineBasicBlock is defined in the header.

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:602

Member Variables

public llvm::bfi_detail::IrreducibleGraph::BFIBase& BFI
public llvm::bfi_detail::IrreducibleGraph::BlockNode Start
public const llvm::bfi_detail::IrreducibleGraph::IrrNode* StartIrr = nullptr
public std::vector<IrrNode> Nodes
public SmallDenseMap< uint32_t, llvm::bfi_detail::IrreducibleGraph::IrrNode*, 4> Lookup

Method Overview

  • public template <class BlockEdgesAdder> IrreducibleGraph(llvm::bfi_detail::IrreducibleGraph::BFIBase & BFI, const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges)
  • public void addEdge(llvm::bfi_detail::IrreducibleGraph::IrrNode & Irr, const llvm::bfi_detail::IrreducibleGraph::BlockNode & Succ, const BFIBase::LoopData * OuterLoop)
  • public template <class BlockEdgesAdder>void addEdges(const llvm::bfi_detail::IrreducibleGraph::BlockNode & Node, const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges)
  • public void addNode(const llvm::bfi_detail::IrreducibleGraph::BlockNode & Node)
  • public void addNodesInFunction()
  • public void addNodesInLoop(const BFIBase::LoopData & OuterLoop)
  • public void indexNodes()
  • public template <class BlockEdgesAdder>void initialize(const BFIBase::LoopData * OuterLoop, BlockEdgesAdder addBlockEdges)

Methods

template <class BlockEdgesAdder>
IrreducibleGraph(
    llvm::bfi_detail::IrreducibleGraph::BFIBase&
        BFI,
    const BFIBase::LoopData* OuterLoop,
    BlockEdgesAdder addBlockEdges)

Description

Construct an explicit graph containing irreducible control flow. Construct an explicit graph of the control flow in \c OuterLoop (or the top-level function, if \c OuterLoop is \c nullptr). Uses \c addBlockEdges to add block successors that have not been packaged into loops. \a BlockFrequencyInfoImpl::computeIrreducibleMass() is the only expected user of this.

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:637

Templates

BlockEdgesAdder

Parameters

llvm::bfi_detail::IrreducibleGraph::BFIBase& BFI
const BFIBase::LoopData* OuterLoop
BlockEdgesAdder addBlockEdges

void addEdge(
    llvm::bfi_detail::IrreducibleGraph::IrrNode&
        Irr,
    const llvm::bfi_detail::IrreducibleGraph::
        BlockNode& Succ,
    const BFIBase::LoopData* OuterLoop)

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:657

Parameters

llvm::bfi_detail::IrreducibleGraph::IrrNode& Irr
const llvm::bfi_detail::IrreducibleGraph:: BlockNode& Succ
const BFIBase::LoopData* OuterLoop

template <class BlockEdgesAdder>
void addEdges(
    const llvm::bfi_detail::IrreducibleGraph::
        BlockNode& Node,
    const BFIBase::LoopData* OuterLoop,
    BlockEdgesAdder addBlockEdges)

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:655

Templates

BlockEdgesAdder

Parameters

const llvm::bfi_detail::IrreducibleGraph:: BlockNode& Node
const BFIBase::LoopData* OuterLoop
BlockEdgesAdder addBlockEdges

void addNode(
    const llvm::bfi_detail::IrreducibleGraph::
        BlockNode& Node)

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:648

Parameters

const llvm::bfi_detail::IrreducibleGraph:: BlockNode& Node

void addNodesInFunction()

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:646

void addNodesInLoop(
    const BFIBase::LoopData& OuterLoop)

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:645

Parameters

const BFIBase::LoopData& OuterLoop

void indexNodes()

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:653

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

Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:643

Templates

BlockEdgesAdder

Parameters

const BFIBase::LoopData* OuterLoop
BlockEdgesAdder addBlockEdges