class BranchProbabilityInfo

Declaration

class BranchProbabilityInfo { /* full declaration omitted */ };

Description

Analysis providing branch probability information. This is a function analysis which provides information on the relative probabilities of each "edge" in the function's CFG where such an edge is defined by a pair (PredBlock and an index in the successors). The probability of an edge from one block is always relative to the probabilities of other edges from the block. The probabilites of all edges from a block sum to exactly one (100%). We use a pair (PredBlock and an index in the successors) to uniquely identify an edge, since we can have multiple edges from Src to Dst. As an example, we can have a switch which jumps to Dst with value 0 and value 10.

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:53

Method Overview

  • public BranchProbabilityInfo()
  • public BranchProbabilityInfo(const llvm::Function & F, const llvm::LoopInfo & LI, const llvm::TargetLibraryInfo * TLI = nullptr)
  • public BranchProbabilityInfo(llvm::BranchProbabilityInfo && Arg)
  • public BranchProbabilityInfo(const llvm::BranchProbabilityInfo &)
  • public void calculate(const llvm::Function & F, const llvm::LoopInfo & LI, const llvm::TargetLibraryInfo * TLI = nullptr)
  • public void eraseBlock(const llvm::BasicBlock * BB)
  • public static llvm::BranchProbability getBranchProbStackProtector(bool IsLikely)
  • public llvm::BranchProbability getEdgeProbability(const llvm::BasicBlock * Src, unsigned int IndexInSuccessors) const
  • public llvm::BranchProbability getEdgeProbability(const llvm::BasicBlock * Src, const llvm::BasicBlock * Dst) const
  • public llvm::BranchProbability getEdgeProbability(const llvm::BasicBlock * Src, llvm::succ_const_iterator Dst) const
  • public const llvm::BasicBlock * getHotSucc(const llvm::BasicBlock * BB) const
  • public bool isEdgeHot(const llvm::BasicBlock * Src, const llvm::BasicBlock * Dst) const
  • public void print(llvm::raw_ostream & OS) const
  • public llvm::raw_ostream & printEdgeProbability(llvm::raw_ostream & OS, const llvm::BasicBlock * Src, const llvm::BasicBlock * Dst) const
  • public void releaseMemory()
  • public void setEdgeProbability(const llvm::BasicBlock * Src, unsigned int IndexInSuccessors, llvm::BranchProbability Prob)

Methods

BranchProbabilityInfo()

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:55

BranchProbabilityInfo(
    const llvm::Function& F,
    const llvm::LoopInfo& LI,
    const llvm::TargetLibraryInfo* TLI = nullptr)

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:57

Parameters

const llvm::Function& F
const llvm::LoopInfo& LI
const llvm::TargetLibraryInfo* TLI = nullptr

BranchProbabilityInfo(
    llvm::BranchProbabilityInfo&& Arg)

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:62

Parameters

llvm::BranchProbabilityInfo&& Arg

BranchProbabilityInfo(
    const llvm::BranchProbabilityInfo&)

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:67

Parameters

const llvm::BranchProbabilityInfo&

void calculate(
    const llvm::Function& F,
    const llvm::LoopInfo& LI,
    const llvm::TargetLibraryInfo* TLI = nullptr)

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:134

Parameters

const llvm::Function& F
const llvm::LoopInfo& LI
const llvm::TargetLibraryInfo* TLI = nullptr

void eraseBlock(const llvm::BasicBlock* BB)

Description

Forget analysis results for the given basic block.

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:138

Parameters

const llvm::BasicBlock* BB

static llvm::BranchProbability
getBranchProbStackProtector(bool IsLikely)

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:129

Parameters

bool IsLikely

llvm::BranchProbability getEdgeProbability(
    const llvm::BasicBlock* Src,
    unsigned int IndexInSuccessors) const

Description

Get an edge's probability, relative to other out-edges of the Src. This routine provides access to the fractional probability between zero (0%) and one (100%) of this edge executing, relative to other edges leaving the 'Src' block. The returned probability is never zero, and can only be one if the source block has only one successor.

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:88

Parameters

const llvm::BasicBlock* Src
unsigned int IndexInSuccessors

llvm::BranchProbability getEdgeProbability(
    const llvm::BasicBlock* Src,
    const llvm::BasicBlock* Dst) const

Description

Get the probability of going from Src to Dst. It returns the sum of all probabilities for edges from Src to Dst.

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:94

Parameters

const llvm::BasicBlock* Src
const llvm::BasicBlock* Dst

llvm::BranchProbability getEdgeProbability(
    const llvm::BasicBlock* Src,
    llvm::succ_const_iterator Dst) const

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:97

Parameters

const llvm::BasicBlock* Src
llvm::succ_const_iterator Dst

const llvm::BasicBlock* getHotSucc(
    const llvm::BasicBlock* BB) const

Description

Retrieve the hot successor of a block if one exists. Given a basic block, look through its successors and if one exists for which

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:110

Parameters

const llvm::BasicBlock* BB

bool isEdgeHot(const llvm::BasicBlock* Src,
               const llvm::BasicBlock* Dst) const

Description

Test if an edge is hot relative to other out-edges of the Src. Check whether this edge out of the source block is 'hot'. We define hot as having a relative probability >= 80%.

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:104

Parameters

const llvm::BasicBlock* Src
const llvm::BasicBlock* Dst

void print(llvm::raw_ostream& OS) const

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:80

Parameters

llvm::raw_ostream& OS

llvm::raw_ostream& printEdgeProbability(
    llvm::raw_ostream& OS,
    const llvm::BasicBlock* Src,
    const llvm::BasicBlock* Dst) const

Description

Print an edge's probability. Retrieves an edge's probability similarly to

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:117

Parameters

llvm::raw_ostream& OS
const llvm::BasicBlock* Src
const llvm::BasicBlock* Dst

void releaseMemory()

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:78

void setEdgeProbability(
    const llvm::BasicBlock* Src,
    unsigned int IndexInSuccessors,
    llvm::BranchProbability Prob)

Description

Set the raw edge probability for the given edge. This allows a pass to explicitly set the edge probability for an edge. It can be used when updating the CFG to update and preserve the branch probability information. Read the implementation of how these edge probabilities are calculated carefully before using!

Declared at: llvm/include/llvm/Analysis/BranchProbabilityInfo.h:126

Parameters

const llvm::BasicBlock* Src
unsigned int IndexInSuccessors
llvm::BranchProbability Prob