LLVM 20.0.0git
|
#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< bool > | llvm::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< bool > | llvm::UseIterativeBFIInference ("use-iterative-bfi-inference", cl::Hidden, cl::desc("Apply an iterative post-processing to infer correct BFI counts")) |
cl::opt< unsigned > | llvm::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) |
#define DEBUG_TYPE "block-freq" |
Definition at line 41 of file BlockFrequencyInfoImpl.cpp.
|
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().
|
static |
Definition at line 162 of file BlockFrequencyInfoImpl.cpp.
References assert(), and UINT64_MAX.
Referenced by combineWeightsByHashing(), and combineWeightsBySorting().
|
static |
Definition at line 218 of file BlockFrequencyInfoImpl.cpp.
References combineWeightsByHashing(), and combineWeightsBySorting().
Referenced by llvm::BlockFrequencyInfoImplBase::Distribution::normalize().
|
static |
Definition at line 199 of file BlockFrequencyInfoImpl.cpp.
References combineWeight(), I, and llvm::NextPowerOf2().
Referenced by combineWeights().
|
static |
Definition at line 178 of file BlockFrequencyInfoImpl.cpp.
References combineWeight(), I, and llvm::sort().
Referenced by combineWeights().
|
static |
Definition at line 482 of file BlockFrequencyInfoImpl.cpp.
References llvm::dbgs(), LLVM_DEBUG, and Scaled.
Referenced by llvm::BlockFrequencyInfoImplBase::finalizeMetrics().
|
static |
Definition at line 758 of file BlockFrequencyInfoImpl.cpp.
References llvm::dbgs(), findIrreducibleHeaders(), G, LLVM_DEBUG, and N.
Referenced by llvm::BlockFrequencyInfoImplBase::analyzeIrreducible().
|
static |
Definition at line 435 of file BlockFrequencyInfoImpl.cpp.
References D, and llvm::dbgs().
Referenced by llvm::BlockFrequencyInfoImplBase::adjustLoopHeaderMass(), llvm::BlockFrequencyInfoImplBase::distributeIrrLoopHeaderMass(), and llvm::BlockFrequencyInfoImplBase::distributeMass().
|
static |
Find extra irreducible headers.
Find entry blocks and other blocks with backedges, which exist when G
contains irreducible sub-SCCs.
Definition at line 689 of file BlockFrequencyInfoImpl.cpp.
References assert(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::begin(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::dbgs(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), I, LLVM_DEBUG, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::make_range(), P, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::size(), and llvm::sort().
Referenced by createIrreducibleLoop().
|
static |
Definition at line 75 of file BlockFrequencyInfoImpl.cpp.
Referenced by llvm::bfi_detail::BlockMass::print().
Definition at line 228 of file BlockFrequencyInfoImpl.cpp.
Referenced by llvm::BlockFrequencyInfoImplBase::Distribution::normalize().
|
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().