LLVM 19.0.0git
Classes | Namespaces | Macros | Functions
BlockFrequencyInfoImpl.cpp File Reference
#include "llvm/Analysis/BlockFrequencyInfoImpl.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SCCIterator.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/BlockFrequency.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/ScaledNumber.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <iterator>
#include <list>
#include <numeric>
#include <optional>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

struct  llvm::GraphTraits< IrreducibleGraph >
 

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 

Macros

#define DEBUG_TYPE   "block-freq"
 

Functions

cl::opt< boolllvm::CheckBFIUnknownBlockQueries ("check-bfi-unknown-block-queries", cl::init(false), cl::Hidden, cl::desc("Check if block frequency is queried for an unknown block " "for debugging missed BFI updates"))
 
cl::opt< boolllvm::UseIterativeBFIInference ("use-iterative-bfi-inference", cl::Hidden, cl::desc("Apply an iterative post-processing to infer correct BFI counts"))
 
cl::opt< unsignedllvm::IterativeBFIMaxIterationsPerBlock ("iterative-bfi-max-iterations-per-block", cl::init(1000), cl::Hidden, cl::desc("Iterative inference: maximum number of update iterations " "per block"))
 
cl::opt< double > llvm::IterativeBFIPrecision ("iterative-bfi-precision", cl::init(1e-12), cl::Hidden, cl::desc("Iterative inference: delta convergence precision; smaller values " "typically lead to better results at the cost of worsen runtime"))
 
static char getHexDigit (int N)
 
static void combineWeight (Weight &W, const Weight &OtherW)
 
static void combineWeightsBySorting (WeightList &Weights)
 
static void combineWeightsByHashing (WeightList &Weights)
 
static void combineWeights (WeightList &Weights)
 
static uint64_t shiftRightAndRound (uint64_t N, int Shift)
 
static void cleanup (BlockFrequencyInfoImplBase &BFI)
 Clear all memory not needed downstream.
 
static void debugAssign (const BlockFrequencyInfoImplBase &BFI, const DitheringDistributer &D, const BlockNode &T, const BlockMass &M, const char *Desc)
 
static void convertFloatingToInteger (BlockFrequencyInfoImplBase &BFI, const Scaled64 &Min, const Scaled64 &Max)
 
static void unwrapLoop (BlockFrequencyInfoImplBase &BFI, LoopData &Loop)
 Unwrap a loop package.
 
static void findIrreducibleHeaders (const BlockFrequencyInfoImplBase &BFI, const IrreducibleGraph &G, const std::vector< const IrreducibleGraph::IrrNode * > &SCC, LoopData::NodeList &Headers, LoopData::NodeList &Others)
 Find extra irreducible headers.
 
static void createIrreducibleLoop (BlockFrequencyInfoImplBase &BFI, const IrreducibleGraph &G, LoopData *OuterLoop, std::list< LoopData >::iterator Insert, const std::vector< const IrreducibleGraph::IrrNode * > &SCC)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "block-freq"

Definition at line 41 of file BlockFrequencyInfoImpl.cpp.

Function Documentation

◆ cleanup()

static void cleanup ( BlockFrequencyInfoImplBase BFI)
static

Clear all memory not needed downstream.

Releases all memory not used downstream. In particular, saves Freqs.

Definition at line 304 of file BlockFrequencyInfoImpl.cpp.

Referenced by llvm::BlockFrequencyInfoImplBase::finalizeMetrics(), llvm::CrashRecoveryContext::registerCleanup(), and llvm::CrashRecoveryContext::unregisterCleanup().

◆ combineWeight()

static void combineWeight ( Weight &  W,
const Weight &  OtherW 
)
static

Definition at line 162 of file BlockFrequencyInfoImpl.cpp.

References assert(), and UINT64_MAX.

Referenced by combineWeightsByHashing(), and combineWeightsBySorting().

◆ combineWeights()

static void combineWeights ( WeightList &  Weights)
static

◆ combineWeightsByHashing()

static void combineWeightsByHashing ( WeightList &  Weights)
static

Definition at line 199 of file BlockFrequencyInfoImpl.cpp.

References combineWeight(), I, and llvm::NextPowerOf2().

Referenced by combineWeights().

◆ combineWeightsBySorting()

static void combineWeightsBySorting ( WeightList &  Weights)
static

Definition at line 178 of file BlockFrequencyInfoImpl.cpp.

References combineWeight(), I, and llvm::sort().

Referenced by combineWeights().

◆ convertFloatingToInteger()

static void convertFloatingToInteger ( BlockFrequencyInfoImplBase BFI,
const Scaled64 Min,
const Scaled64 Max 
)
static

◆ createIrreducibleLoop()

static void createIrreducibleLoop ( BlockFrequencyInfoImplBase BFI,
const IrreducibleGraph G,
LoopData *  OuterLoop,
std::list< LoopData >::iterator  Insert,
const std::vector< const IrreducibleGraph::IrrNode * > &  SCC 
)
static

◆ debugAssign()

static void debugAssign ( const BlockFrequencyInfoImplBase BFI,
const DitheringDistributer &  D,
const BlockNode &  T,
const BlockMass M,
const char Desc 
)
static

◆ findIrreducibleHeaders()

static void findIrreducibleHeaders ( const BlockFrequencyInfoImplBase BFI,
const IrreducibleGraph G,
const std::vector< const IrreducibleGraph::IrrNode * > &  SCC,
LoopData::NodeList &  Headers,
LoopData::NodeList &  Others 
)
static

◆ getHexDigit()

static char getHexDigit ( int  N)
static

Definition at line 75 of file BlockFrequencyInfoImpl.cpp.

References assert(), and N.

Referenced by llvm::bfi_detail::BlockMass::print().

◆ shiftRightAndRound()

static uint64_t shiftRightAndRound ( uint64_t  N,
int  Shift 
)
static

Definition at line 228 of file BlockFrequencyInfoImpl.cpp.

References assert(), and N.

Referenced by llvm::BlockFrequencyInfoImplBase::Distribution::normalize().

◆ unwrapLoop()

static void unwrapLoop ( BlockFrequencyInfoImplBase BFI,
LoopData &  Loop 
)
static

Unwrap a loop package.

Visits all the members of a loop, adjusting their BlockData according to the loop's pseudo-node.

Definition at line 515 of file BlockFrequencyInfoImpl.cpp.

References llvm::dbgs(), F, LLVM_DEBUG, and N.

Referenced by llvm::BlockFrequencyInfoImplBase::unwrapLoops().