14 #ifndef LLVM_ANALYSIS_BRANCHPROBABILITYINFO_H
15 #define LLVM_ANALYSIS_BRANCHPROBABILITYINFO_H
51 : Probs(std::move(Arg.Probs)), LastF(Arg.LastF),
52 PostDominatedByUnreachable(std::move(Arg.PostDominatedByUnreachable)),
53 PostDominatedByColdCall(std::move(Arg.PostDominatedByColdCall)) {}
57 Probs = std::move(RHS.Probs);
58 PostDominatedByColdCall = std::move(RHS.PostDominatedByColdCall);
59 PostDominatedByUnreachable = std::move(RHS.PostDominatedByUnreachable);
74 unsigned IndexInSuccessors)
const;
116 return IsLikely ? LikelyProb : LikelyProb.
getCompl();
130 class BasicBlockCallbackVH final :
public CallbackVH {
132 void deleted()
override {
134 BPI->eraseBlock(cast<BasicBlock>(getValPtr()));
135 BPI->Handles.erase(*
this);
140 : CallbackVH(const_cast<Value *>(V)), BPI(BPI) {}
142 DenseSet<BasicBlockCallbackVH, DenseMapInfo<Value*>> Handles;
146 typedef std::pair<const BasicBlock *, unsigned> Edge;
154 static const uint32_t DEFAULT_WEIGHT = 16;
156 DenseMap<Edge, BranchProbability> Probs;
162 SmallPtrSet<const BasicBlock *, 16> PostDominatedByUnreachable;
165 SmallPtrSet<const BasicBlock *, 16> PostDominatedByColdCall;
167 bool calcUnreachableHeuristics(
const BasicBlock *BB);
168 bool calcMetadataWeights(
const BasicBlock *BB);
169 bool calcColdCallHeuristics(
const BasicBlock *BB);
170 bool calcPointerHeuristics(
const BasicBlock *BB);
171 bool calcLoopBranchHeuristics(
const BasicBlock *BB,
const LoopInfo &LI);
172 bool calcZeroHeuristics(
const BasicBlock *BB);
173 bool calcFloatingPointHeuristics(
const BasicBlock *BB);
174 bool calcInvokeHeuristics(
const BasicBlock *BB);
BranchProbabilityInfo & operator=(BranchProbabilityInfo &&RHS)
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
raw_ostream & printEdgeProbability(raw_ostream &OS, const BasicBlock *Src, const BasicBlock *Dst) const
Print an edge's probability.
const BasicBlock * getHotSucc(const BasicBlock *BB) const
Retrieve the hot successor of a block if one exists.
A Module instance is used to store all the information related to an LLVM module. ...
BranchProbabilityPrinterPass(raw_ostream &OS)
bool runOnFunction(Function &F) override
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
const BranchProbabilityInfo & getBPI() const
Analysis pass which computes BranchProbabilityInfo.
BranchProbabilityInfo(BranchProbabilityInfo &&Arg)
A CRTP mix-in to automatically provide informational APIs needed for passes.
Legacy analysis pass which computes BranchProbabilityInfo.
Printer pass for the BranchProbabilityAnalysis results.
void initializeBranchProbabilityInfoWrapperPassPass(PassRegistry &)
BranchProbabilityInfo(const Function &F, const LoopInfo &LI)
A set of analyses that are preserved following a run of a transformation pass.
LLVM Basic Block Representation.
A CRTP mix-in that provides informational APIs needed for analysis passes.
void eraseBlock(const BasicBlock *BB)
Forget analysis results for the given basic block.
Represent the analysis usage information of a pass.
FunctionPass class - This class is used to implement most global optimizations.
BranchProbabilityInfo run(Function &F, FunctionAnalysisManager &AM)
Run the analysis pass over a function and produce BPI.
void calculate(const Function &F, const LoopInfo &LI)
BranchProbabilityInfoWrapperPass()
void setEdgeProbability(const BasicBlock *Src, unsigned IndexInSuccessors, BranchProbability Prob)
Set the raw edge probability for the given edge.
bool isEdgeHot(const BasicBlock *Src, const BasicBlock *Dst) const
Test if an edge is hot relative to other out-edges of the Src.
void print(raw_ostream &OS) const
Analysis providing branch probability information.
void releaseMemory() override
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memo...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This class implements an extremely fast bulk output stream that can only output to a stream...
BranchProbability getEdgeProbability(const BasicBlock *Src, unsigned IndexInSuccessors) const
Get an edge's probability, relative to other out-edges of the Src.
Value handle with callbacks on RAUW and destruction.
A container for analyses that lazily runs them and caches their results.
This header defines various interfaces for pass management in LLVM.
void print(raw_ostream &OS, const Module *M=nullptr) const override
print - Print out the internal state of the pass.
BranchProbabilityInfo Result
Provide the result typedef for this analysis pass.
BranchProbabilityInfo & getBPI()
A special type used by analysis passes to provide an address that identifies that particular analysis...
static BranchProbability getBranchProbStackProtector(bool IsLikely)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
BranchProbability getCompl() const