LLVM  14.0.0git
Macros | Enumerations | Functions | Variables
BranchProbabilityInfo.cpp File Reference
#include "llvm/Analysis/BranchProbabilityInfo.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/SCCIterator.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/PostDominators.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstdint>
#include <iterator>
#include <utility>
Include dependency graph for BranchProbabilityInfo.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "branch-prob"
 

Enumerations

enum  BlockExecWeight : std::uint32_t {
  BlockExecWeight::ZERO = 0x0, BlockExecWeight::LOWEST_NON_ZERO = 0x1, BlockExecWeight::UNREACHABLE = ZERO, BlockExecWeight::NORETURN = LOWEST_NON_ZERO,
  BlockExecWeight::UNWIND = LOWEST_NON_ZERO, BlockExecWeight::COLD = 0xffff, BlockExecWeight::DEFAULT = 0xfffff
}
 Set of dedicated "absolute" execution weights for a block. More...
 

Functions

 INITIALIZE_PASS_BEGIN (BranchProbabilityInfoWrapperPass, "branch-prob", "Branch Probability Analysis", false, true) INITIALIZE_PASS_END(BranchProbabilityInfoWrapperPass
 
static void computeUnlikelySuccessors (const BasicBlock *BB, Loop *L, SmallPtrSetImpl< const BasicBlock * > &UnlikelyBlocks)
 

Variables

static cl::opt< bool > PrintBranchProb ("print-bpi", cl::init(false), cl::Hidden, cl::desc("Print the branch probability info."))
 
cl::opt< std::string > PrintBranchProbFuncName ("print-bpi-func-name", cl::Hidden, cl::desc("The option to specify the name of the function " "whose branch probability info is printed."))
 
branch prob
 
branch Branch Probability Analysis
 
branch Branch Probability false
 
static const uint32_t LBH_TAKEN_WEIGHT = 124
 
static const uint32_t LBH_NONTAKEN_WEIGHT = 4
 
static const BranchProbability UR_TAKEN_PROB = BranchProbability::getRaw(1)
 Unreachable-terminating branch taken probability. More...
 
static const uint32_t PH_TAKEN_WEIGHT = 20
 
static const uint32_t PH_NONTAKEN_WEIGHT = 12
 
static const uint32_t ZH_TAKEN_WEIGHT = 20
 
static const uint32_t ZH_NONTAKEN_WEIGHT = 12
 
static const uint32_t FPH_TAKEN_WEIGHT = 20
 
static const uint32_t FPH_NONTAKEN_WEIGHT = 12
 
static const uint32_t FPH_ORD_WEIGHT = 1024 * 1024 - 1
 This is the probability for an ordered floating point comparison. More...
 
static const uint32_t FPH_UNO_WEIGHT = 1
 This is the probability for an unordered floating point comparison, it means one or two of the operands are NaN. More...
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "branch-prob"

Definition at line 49 of file BranchProbabilityInfo.cpp.

Enumeration Type Documentation

◆ BlockExecWeight

enum BlockExecWeight : std::uint32_t
strong

Set of dedicated "absolute" execution weights for a block.

These weights are meaningful relative to each other and their derivatives only.

Enumerator
ZERO 

Special weight used for cases with exact zero probability.

LOWEST_NON_ZERO 

Minimal possible non zero weight.

UNREACHABLE 

Weight to an 'unreachable' block.

NORETURN 

Weight to a block containing non returning call.

UNWIND 

Weight to 'unwind' block of an invoke instruction.

COLD 

Weight to a 'cold' block.

Cold blocks are the ones containing calls marked with attribute 'cold'.

DEFAULT 

Default weight is used in cases when there is no dedicated execution weight set.

It is not propagated through the domination line either.

Definition at line 125 of file BranchProbabilityInfo.cpp.

Function Documentation

◆ computeUnlikelySuccessors()

static void computeUnlikelySuccessors ( const BasicBlock BB,
Loop L,
SmallPtrSetImpl< const BasicBlock * > &  UnlikelyBlocks 
)
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( BranchProbabilityInfoWrapperPass  ,
"branch-prob ,
"Branch Probability Analysis ,
false  ,
true   
)

Variable Documentation

◆ Analysis

branch Branch Probability Analysis

Definition at line 67 of file BranchProbabilityInfo.cpp.

◆ false

branch Branch Probability false

Definition at line 67 of file BranchProbabilityInfo.cpp.

◆ FPH_NONTAKEN_WEIGHT

const uint32_t FPH_NONTAKEN_WEIGHT = 12
static

Definition at line 114 of file BranchProbabilityInfo.cpp.

◆ FPH_ORD_WEIGHT

const uint32_t FPH_ORD_WEIGHT = 1024 * 1024 - 1
static

This is the probability for an ordered floating point comparison.

Definition at line 117 of file BranchProbabilityInfo.cpp.

◆ FPH_TAKEN_WEIGHT

const uint32_t FPH_TAKEN_WEIGHT = 20
static

Definition at line 113 of file BranchProbabilityInfo.cpp.

◆ FPH_UNO_WEIGHT

const uint32_t FPH_UNO_WEIGHT = 1
static

This is the probability for an unordered floating point comparison, it means one or two of the operands are NaN.

Usually it is used to test for an exceptional case, so the result is unlikely.

Definition at line 121 of file BranchProbabilityInfo.cpp.

◆ LBH_NONTAKEN_WEIGHT

const uint32_t LBH_NONTAKEN_WEIGHT = 4
static

Definition at line 98 of file BranchProbabilityInfo.cpp.

◆ LBH_TAKEN_WEIGHT

const uint32_t LBH_TAKEN_WEIGHT = 124
static

Definition at line 97 of file BranchProbabilityInfo.cpp.

◆ PH_NONTAKEN_WEIGHT

const uint32_t PH_NONTAKEN_WEIGHT = 12
static

Definition at line 108 of file BranchProbabilityInfo.cpp.

◆ PH_TAKEN_WEIGHT

const uint32_t PH_TAKEN_WEIGHT = 20
static

Definition at line 107 of file BranchProbabilityInfo.cpp.

◆ PrintBranchProb

cl::opt<bool> PrintBranchProb("print-bpi", cl::init(false), cl::Hidden, cl::desc("Print the branch probability info."))
static

◆ PrintBranchProbFuncName

cl::opt<std::string> PrintBranchProbFuncName("print-bpi-func-name", cl::Hidden, cl::desc("The option to specify the name of the function " "whose branch probability info is printed."))

◆ prob

branch prob

Definition at line 66 of file BranchProbabilityInfo.cpp.

◆ UR_TAKEN_PROB

const BranchProbability UR_TAKEN_PROB = BranchProbability::getRaw(1)
static

Unreachable-terminating branch taken probability.

This is the probability for a branch being taken to a block that terminates (eventually) in unreachable. These are predicted as unlikely as possible. All reachable probability will proportionally share the remaining part.

Definition at line 105 of file BranchProbabilityInfo.cpp.

◆ ZH_NONTAKEN_WEIGHT

const uint32_t ZH_NONTAKEN_WEIGHT = 12
static

Definition at line 111 of file BranchProbabilityInfo.cpp.

◆ ZH_TAKEN_WEIGHT

const uint32_t ZH_TAKEN_WEIGHT = 20
static

Definition at line 110 of file BranchProbabilityInfo.cpp.