LLVM 22.0.0git
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()

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(), llvm::ConstantHoistingPass::runImpl(), and llvm::CrashRecoveryContext::unregisterCleanup().

◆ combineWeight()

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()

void combineWeights ( WeightList & Weights)
static

◆ combineWeightsByHashing()

void combineWeightsByHashing ( WeightList & Weights)
static

Definition at line 199 of file BlockFrequencyInfoImpl.cpp.

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

Referenced by combineWeights().

◆ combineWeightsBySorting()

void combineWeightsBySorting ( WeightList & Weights)
static

Definition at line 178 of file BlockFrequencyInfoImpl.cpp.

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

Referenced by combineWeights().

◆ convertFloatingToInteger()

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

◆ createIrreducibleLoop()

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

◆ debugAssign()

◆ findIrreducibleHeaders()

◆ getHexDigit()

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()

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()

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().