LLVM 17.0.0git
Public Member Functions | List of all members
llvm::BlockFrequencyInfo Class Reference

BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequencies. More...

#include "llvm/Analysis/BlockFrequencyInfo.h"

Public Member Functions

 BlockFrequencyInfo ()
 
 BlockFrequencyInfo (const Function &F, const BranchProbabilityInfo &BPI, const LoopInfo &LI)
 
 BlockFrequencyInfo (const BlockFrequencyInfo &)=delete
 
BlockFrequencyInfooperator= (const BlockFrequencyInfo &)=delete
 
 BlockFrequencyInfo (BlockFrequencyInfo &&Arg)
 
BlockFrequencyInfooperator= (BlockFrequencyInfo &&RHS)
 
 ~BlockFrequencyInfo ()
 
bool invalidate (Function &F, const PreservedAnalyses &PA, FunctionAnalysisManager::Invalidator &)
 Handle invalidation explicitly.
 
const FunctiongetFunction () const
 
const BranchProbabilityInfogetBPI () const
 
void view (StringRef="BlockFrequencyDAGs") const
 Pop up a ghostview window with the current block frequency propagation rendered using dot.
 
BlockFrequency getBlockFreq (const BasicBlock *BB) const
 getblockFreq - Return block frequency.
 
std::optional< uint64_tgetBlockProfileCount (const BasicBlock *BB, bool AllowSynthetic=false) const
 Returns the estimated profile count of BB.
 
std::optional< uint64_tgetProfileCountFromFreq (uint64_t Freq) const
 Returns the estimated profile count of Freq.
 
bool isIrrLoopHeader (const BasicBlock *BB)
 Returns true if BB is an irreducible loop header block.
 
void setBlockFreq (const BasicBlock *BB, uint64_t Freq)
 
void setBlockFreqAndScale (const BasicBlock *ReferenceBB, uint64_t Freq, SmallPtrSetImpl< BasicBlock * > &BlocksToScale)
 Set the frequency of ReferenceBB to Freq and scale the frequencies of the blocks in BlocksToScale such that their frequencies relative to ReferenceBB remain unchanged.
 
void calculate (const Function &F, const BranchProbabilityInfo &BPI, const LoopInfo &LI)
 calculate - compute block frequency info for the given function.
 
raw_ostreamprintBlockFreq (raw_ostream &OS, const BlockFrequency Freq) const
 
raw_ostreamprintBlockFreq (raw_ostream &OS, const BasicBlock *BB) const
 
uint64_t getEntryFreq () const
 
void releaseMemory ()
 
void print (raw_ostream &OS) const
 
void verifyMatch (BlockFrequencyInfo &Other) const
 

Detailed Description

BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequencies.

Definition at line 37 of file BlockFrequencyInfo.h.

Constructor & Destructor Documentation

◆ BlockFrequencyInfo() [1/4]

BlockFrequencyInfo::BlockFrequencyInfo ( )
default

◆ BlockFrequencyInfo() [2/4]

BlockFrequencyInfo::BlockFrequencyInfo ( const Function F,
const BranchProbabilityInfo BPI,
const LoopInfo LI 
)

Definition at line 155 of file BlockFrequencyInfo.cpp.

References calculate(), and F.

◆ BlockFrequencyInfo() [3/4]

llvm::BlockFrequencyInfo::BlockFrequencyInfo ( const BlockFrequencyInfo )
delete

◆ BlockFrequencyInfo() [4/4]

BlockFrequencyInfo::BlockFrequencyInfo ( BlockFrequencyInfo &&  Arg)

Definition at line 161 of file BlockFrequencyInfo.cpp.

◆ ~BlockFrequencyInfo()

BlockFrequencyInfo::~BlockFrequencyInfo ( )
default

Member Function Documentation

◆ calculate()

void BlockFrequencyInfo::calculate ( const Function F,
const BranchProbabilityInfo BPI,
const LoopInfo LI 
)

◆ getBlockFreq()

BlockFrequency BlockFrequencyInfo::getBlockFreq ( const BasicBlock BB) const

getblockFreq - Return block frequency.

Return 0 if we don't have the information. Please note that initial frequency is equal to ENTRY_FREQ. It means that we should not rely on the value itself, but only on the comparison to the other block frequencies. We do this to avoid using of floating points.

Definition at line 203 of file BlockFrequencyInfo.cpp.

Referenced by llvm::CFGMST< Edge, BBInfo >::buildEdges(), llvm::CodeExtractor::extractCodeRegion(), llvm::InlineFunction(), isColdCallSite(), and updateCallerBFI().

◆ getBlockProfileCount()

std::optional< uint64_t > BlockFrequencyInfo::getBlockProfileCount ( const BasicBlock BB,
bool  AllowSynthetic = false 
) const

Returns the estimated profile count of BB.

This computes the relative block frequency of BB and multiplies it by the enclosing function's count (if available) and returns the value.

Definition at line 208 of file BlockFrequencyInfo.cpp.

References getFunction().

Referenced by fixFuncEntryCount(), and verifyFuncBFI().

◆ getBPI()

const BranchProbabilityInfo * BlockFrequencyInfo::getBPI ( ) const

Definition at line 265 of file BlockFrequencyInfo.cpp.

◆ getEntryFreq()

uint64_t BlockFrequencyInfo::getEntryFreq ( ) const

Definition at line 280 of file BlockFrequencyInfo.cpp.

Referenced by llvm::CFGMST< Edge, BBInfo >::buildEdges().

◆ getFunction()

const Function * BlockFrequencyInfo::getFunction ( ) const

Definition at line 261 of file BlockFrequencyInfo.cpp.

Referenced by getBlockProfileCount(), and getProfileCountFromFreq().

◆ getProfileCountFromFreq()

std::optional< uint64_t > BlockFrequencyInfo::getProfileCountFromFreq ( uint64_t  Freq) const

Returns the estimated profile count of Freq.

This uses the frequency Freq and multiplies it by the enclosing function's count (if available) and returns the value.

Definition at line 217 of file BlockFrequencyInfo.cpp.

References getFunction().

Referenced by llvm::CodeExtractor::extractCodeRegion().

◆ invalidate()

bool BlockFrequencyInfo::invalidate ( Function F,
const PreservedAnalyses PA,
FunctionAnalysisManager::Invalidator  
)

Handle invalidation explicitly.

Definition at line 176 of file BlockFrequencyInfo.cpp.

References llvm::PreservedAnalyses::getChecker().

◆ isIrrLoopHeader()

bool BlockFrequencyInfo::isIrrLoopHeader ( const BasicBlock BB)

Returns true if BB is an irreducible loop header block.

Otherwise false.

Definition at line 223 of file BlockFrequencyInfo.cpp.

References assert().

◆ operator=() [1/2]

BlockFrequencyInfo & BlockFrequencyInfo::operator= ( BlockFrequencyInfo &&  RHS)

Definition at line 164 of file BlockFrequencyInfo.cpp.

References releaseMemory(), and RHS.

◆ operator=() [2/2]

BlockFrequencyInfo & llvm::BlockFrequencyInfo::operator= ( const BlockFrequencyInfo )
delete

◆ print()

void BlockFrequencyInfo::print ( raw_ostream OS) const

Definition at line 286 of file BlockFrequencyInfo.cpp.

References OS.

Referenced by calculate(), and llvm::BlockFrequencyInfoWrapperPass::print().

◆ printBlockFreq() [1/2]

raw_ostream & BlockFrequencyInfo::printBlockFreq ( raw_ostream OS,
const BasicBlock BB 
) const

Definition at line 275 of file BlockFrequencyInfo.cpp.

References OS.

◆ printBlockFreq() [2/2]

raw_ostream & BlockFrequencyInfo::printBlockFreq ( raw_ostream OS,
const BlockFrequency  Freq 
) const

Definition at line 269 of file BlockFrequencyInfo.cpp.

References OS.

◆ releaseMemory()

void BlockFrequencyInfo::releaseMemory ( )

◆ setBlockFreq()

void BlockFrequencyInfo::setBlockFreq ( const BasicBlock BB,
uint64_t  Freq 
)

◆ setBlockFreqAndScale()

void BlockFrequencyInfo::setBlockFreqAndScale ( const BasicBlock ReferenceBB,
uint64_t  Freq,
SmallPtrSetImpl< BasicBlock * > &  BlocksToScale 
)

Set the frequency of ReferenceBB to Freq and scale the frequencies of the blocks in BlocksToScale such that their frequencies relative to ReferenceBB remain unchanged.

Definition at line 233 of file BlockFrequencyInfo.cpp.

References assert(), llvm::APInt::getLimitedValue(), and llvm::APInt::udiv().

Referenced by updateCallerBFI().

◆ verifyMatch()

void BlockFrequencyInfo::verifyMatch ( BlockFrequencyInfo Other) const

Definition at line 291 of file BlockFrequencyInfo.cpp.

References llvm::Other.

◆ view()

void BlockFrequencyInfo::view ( StringRef  title = "BlockFrequencyDAGs") const

Pop up a ghostview window with the current block frequency propagation rendered using dot.

Definition at line 257 of file BlockFrequencyInfo.cpp.

References llvm::ViewGraph().

Referenced by calculate().


The documentation for this class was generated from the following files: