LLVM 20.0.0git
|
Analysis providing profile information. More...
#include "llvm/Analysis/ProfileSummaryInfo.h"
Public Member Functions | |
ProfileSummaryInfo (const Module &M) | |
ProfileSummaryInfo (ProfileSummaryInfo &&Arg)=default | |
void | refresh () |
If no summary is present, attempt to refresh. | |
bool | hasProfileSummary () const |
Returns true if profile summary is available. | |
bool | hasSampleProfile () const |
Returns true if module M has sample profile. | |
bool | hasInstrumentationProfile () const |
Returns true if module M has instrumentation profile. | |
bool | hasCSInstrumentationProfile () const |
Returns true if module M has context sensitive instrumentation profile. | |
bool | invalidate (Module &, const PreservedAnalyses &, ModuleAnalysisManager::Invalidator &) |
Handle the invalidation of this information. | |
std::optional< uint64_t > | getProfileCount (const CallBase &CallInst, BlockFrequencyInfo *BFI, bool AllowSynthetic=false) const |
Returns the profile count for CallInst . | |
bool | hasPartialSampleProfile () const |
Returns true if module M has partial-profile sample profile. | |
bool | hasHugeWorkingSetSize () const |
Returns true if the working set size of the code is considered huge. | |
bool | hasLargeWorkingSetSize () const |
Returns true if the working set size of the code is considered large. | |
template<typename FuncT > | |
bool | isFunctionEntryHot (const FuncT *F) const |
Returns true if F has hot function entry. | |
template<typename FuncT , typename BFIT > | |
bool | isFunctionHotInCallGraph (const FuncT *F, BFIT &BFI) const |
Returns true if F contains hot code. | |
bool | isFunctionEntryCold (const Function *F) const |
Returns true if F has cold function entry. | |
template<typename FuncT , typename BFIT > | |
bool | isFunctionColdInCallGraph (const FuncT *F, BFIT &BFI) const |
Returns true if F contains only cold code. | |
bool | isFunctionHotnessUnknown (const Function &F) const |
Returns true if the hotness of F is unknown. | |
template<typename FuncT , typename BFIT > | |
bool | isFunctionHotInCallGraphNthPercentile (int PercentileCutoff, const FuncT *F, BFIT &BFI) const |
Returns true if F contains hot code with regard to a given hot percentile cutoff value. | |
template<typename FuncT , typename BFIT > | |
bool | isFunctionColdInCallGraphNthPercentile (int PercentileCutoff, const FuncT *F, BFIT &BFI) const |
Returns true if F contains cold code with regard to a given cold percentile cutoff value. | |
bool | isHotCount (uint64_t C) const |
Returns true if count C is considered hot. | |
bool | isColdCount (uint64_t C) const |
Returns true if count C is considered cold. | |
bool | isHotCountNthPercentile (int PercentileCutoff, uint64_t C) const |
Returns true if count C is considered hot with regard to a given hot percentile cutoff value. | |
bool | isColdCountNthPercentile (int PercentileCutoff, uint64_t C) const |
Returns true if count C is considered cold with regard to a given cold percentile cutoff value. | |
template<typename BBType , typename BFIT > | |
bool | isHotBlock (const BBType *BB, BFIT *BFI) const |
Returns true if BasicBlock BB is considered hot. | |
template<typename BBType , typename BFIT > | |
bool | isColdBlock (const BBType *BB, BFIT *BFI) const |
Returns true if BasicBlock BB is considered cold. | |
template<typename BFIT > | |
bool | isColdBlock (BlockFrequency BlockFreq, const BFIT *BFI) const |
template<typename BBType , typename BFIT > | |
bool | isHotBlockNthPercentile (int PercentileCutoff, const BBType *BB, BFIT *BFI) const |
template<typename BFIT > | |
bool | isHotBlockNthPercentile (int PercentileCutoff, BlockFrequency BlockFreq, BFIT *BFI) const |
template<typename BBType , typename BFIT > | |
bool | isColdBlockNthPercentile (int PercentileCutoff, const BBType *BB, BFIT *BFI) const |
Returns true if BasicBlock BB is considered cold with regard to a given cold percentile cutoff value. | |
template<typename BFIT > | |
bool | isColdBlockNthPercentile (int PercentileCutoff, BlockFrequency BlockFreq, BFIT *BFI) const |
bool | isHotCallSite (const CallBase &CB, BlockFrequencyInfo *BFI) const |
Returns true if the call site CB is considered hot. | |
bool | isColdCallSite (const CallBase &CB, BlockFrequencyInfo *BFI) const |
Returns true if call site CB is considered cold. | |
uint64_t | getOrCompHotCountThreshold () const |
Returns HotCountThreshold if set. | |
uint64_t | getOrCompColdCountThreshold () const |
Returns ColdCountThreshold if set. | |
uint64_t | getHotCountThreshold () const |
Returns HotCountThreshold if set. | |
uint64_t | getColdCountThreshold () const |
Returns ColdCountThreshold if set. | |
Analysis providing profile information.
This is an immutable analysis pass that provides ability to query global (program-level) profile information. The main APIs are isHotCount and isColdCount that tells whether a given profile count is considered hot/cold based on the profile summary. This also provides convenience methods to check whether a function is hot or cold.
Definition at line 41 of file ProfileSummaryInfo.h.
Definition at line 63 of file ProfileSummaryInfo.h.
References refresh().
|
default |
|
inline |
Returns ColdCountThreshold if set.
Definition at line 260 of file ProfileSummaryInfo.h.
|
inline |
Returns HotCountThreshold if set.
Definition at line 256 of file ProfileSummaryInfo.h.
uint64_t ProfileSummaryInfo::getOrCompColdCountThreshold | ( | ) | const |
Returns ColdCountThreshold if set.
Recompute HotCountThreshold if not set.
Definition at line 196 of file ProfileSummaryInfo.cpp.
Referenced by annotateAllFunctions().
uint64_t ProfileSummaryInfo::getOrCompHotCountThreshold | ( | ) | const |
Returns HotCountThreshold if set.
Recompute HotCountThreshold if not set.
Definition at line 192 of file ProfileSummaryInfo.cpp.
References UINT64_MAX.
Referenced by annotateAllFunctions().
std::optional< uint64_t > ProfileSummaryInfo::getProfileCount | ( | const CallBase & | CallInst, |
BlockFrequencyInfo * | BFI, | ||
bool | AllowSynthetic = false |
||
) | const |
Returns the profile count for CallInst
.
Definition at line 69 of file ProfileSummaryInfo.cpp.
References assert(), and hasSampleProfile().
Referenced by computeFunctionSummary(), isColdCallSite(), isHotCallSite(), and updateCallProfile().
|
inline |
Returns true if module M
has context sensitive instrumentation profile.
Definition at line 85 of file ProfileSummaryInfo.h.
References hasProfileSummary(), and llvm::ProfileSummary::PSK_CSInstr.
Referenced by isColdBlock().
bool ProfileSummaryInfo::hasHugeWorkingSetSize | ( | ) | const |
Returns true if the working set size of the code is considered huge.
Definition at line 156 of file ProfileSummaryInfo.cpp.
|
inline |
Returns true if module M
has instrumentation profile.
Definition at line 79 of file ProfileSummaryInfo.h.
References hasProfileSummary(), and llvm::ProfileSummary::PSK_Instr.
Referenced by isColdBlock(), and llvm::isPGSOColdCodeOnly().
bool ProfileSummaryInfo::hasLargeWorkingSetSize | ( | ) | const |
Returns true if the working set size of the code is considered large.
Definition at line 160 of file ProfileSummaryInfo.cpp.
Referenced by llvm::isPGSOColdCodeOnly().
bool ProfileSummaryInfo::hasPartialSampleProfile | ( | ) | const |
Returns true if module M
has partial-profile sample profile.
Definition at line 217 of file ProfileSummaryInfo.cpp.
References hasProfileSummary(), PartialProfile, and llvm::ProfileSummary::PSK_Sample.
Referenced by computeFunctionSummary(), isFunctionHotnessUnknown(), and llvm::isPGSOColdCodeOnly().
|
inline |
Returns true if profile summary is available.
Definition at line 70 of file ProfileSummaryInfo.h.
Referenced by hasCSInstrumentationProfile(), hasInstrumentationProfile(), hasPartialSampleProfile(), hasSampleProfile(), isFunctionColdInCallGraph(), isFunctionEntryCold(), isFunctionEntryHot(), isFunctionHotInCallGraph(), refresh(), llvm::LoopVectorizePass::run(), llvm::InstructionCombiningPass::runOnFunction(), llvm::InstructionSelect::runOnMachineFunction(), llvm::shouldFuncOptimizeForSizeImpl(), llvm::shouldOptimizeForSizeImpl(), shouldRunOnFunction(), and unswitchLoop().
|
inline |
Returns true if module M
has sample profile.
Definition at line 73 of file ProfileSummaryInfo.h.
References hasProfileSummary(), and llvm::ProfileSummary::PSK_Sample.
Referenced by getProfileCount(), isColdBlock(), isColdCallSite(), llvm::isPGSOColdCodeOnly(), llvm::shouldFuncOptimizeForSizeImpl(), and llvm::shouldOptimizeForSizeImpl().
|
inline |
Handle the invalidation of this information.
When used as a result of ProfileSummaryAnalysis
this method will be called when the module this was computed for changes. Since profile summary is immutable after it is annotated on the module, we return false here.
Definition at line 96 of file ProfileSummaryInfo.h.
|
inline |
Definition at line 210 of file ProfileSummaryInfo.h.
References isColdCount().
|
inline |
Returns true if BasicBlock BB
is considered cold.
Definition at line 204 of file ProfileSummaryInfo.h.
References isColdCount().
Referenced by isFunctionColdInCallGraph(), llvm::shouldOptimizeForSizeImpl(), and unswitchLoop().
|
inline |
Definition at line 240 of file ProfileSummaryInfo.h.
References PercentileCutoff.
|
inline |
Returns true if BasicBlock BB
is considered cold with regard to a given cold percentile cutoff value.
PercentileCutoff is encoded as a 6 digit decimal fixed point number, where the first two digits are the whole part. E.g. 995000 for 99.5 percentile.
Definition at line 234 of file ProfileSummaryInfo.h.
References PercentileCutoff.
Referenced by llvm::shouldOptimizeForSizeImpl().
bool ProfileSummaryInfo::isColdCallSite | ( | const CallBase & | CB, |
BlockFrequencyInfo * | BFI | ||
) | const |
Returns true if call site CB
is considered cold.
Definition at line 206 of file ProfileSummaryInfo.cpp.
References llvm::CallingConv::C, llvm::CallBase::getCaller(), getProfileCount(), llvm::Function::hasProfileData(), hasSampleProfile(), and isColdCount().
Returns true if count C
is considered cold.
Definition at line 168 of file ProfileSummaryInfo.cpp.
References llvm::CallingConv::C.
Referenced by llvm::sampleprofutil::callsiteIsHot(), getHotness(), isColdBlock(), isColdCallSite(), isFunctionColdInCallGraph(), and isFunctionEntryCold().
Returns true if count C
is considered cold with regard to a given cold percentile cutoff value.
PercentileCutoff is encoded as a 6 digit decimal fixed point number, where the first two digits are the whole part. E.g. 995000 for 99.5 percentile.
Definition at line 187 of file ProfileSummaryInfo.cpp.
References llvm::CallingConv::C, and PercentileCutoff.
Referenced by isColdBlock().
|
inline |
Returns true if F
contains only cold code.
Definition at line 146 of file ProfileSummaryInfo.h.
References F, hasProfileSummary(), isColdBlock(), and isColdCount().
Referenced by llvm::shouldFuncOptimizeForSizeImpl(), and shouldRunOnFunction().
|
inline |
Returns true if F
contains cold code with regard to a given cold percentile cutoff value.
Definition at line 175 of file ProfileSummaryInfo.h.
References F, and PercentileCutoff.
Referenced by llvm::shouldFuncOptimizeForSizeImpl().
Returns true if F
has cold function entry.
Returns true if the function's entry is a cold.
If it returns false, it either means it is not cold or it is unknown whether it is cold or not (for example, no profile data is available).
Definition at line 96 of file ProfileSummaryInfo.cpp.
References F, hasProfileSummary(), and isColdCount().
Referenced by llvm::MLInlineAdvisor::getAdviceImpl(), and llvm::ProfileSummaryPrinterPass::run().
|
inline |
Returns true if F
has hot function entry.
If it returns false, it either means it is not hot or it is unknown whether it is hot or not (for example, no profile data is available).
Definition at line 114 of file ProfileSummaryInfo.h.
References F, hasProfileSummary(), and isHotCount().
Referenced by llvm::ProfileSummaryPrinterPass::run(), and shouldApply().
|
inline |
Returns true if F
contains hot code.
Definition at line 126 of file ProfileSummaryInfo.h.
References F, hasProfileSummary(), isHotBlock(), and isHotCount().
|
inline |
Returns true if F
contains hot code with regard to a given hot percentile cutoff value.
Definition at line 167 of file ProfileSummaryInfo.h.
References F, and PercentileCutoff.
Referenced by llvm::shouldFuncOptimizeForSizeImpl().
Returns true if the hotness of F
is unknown.
Definition at line 88 of file ProfileSummaryInfo.cpp.
References assert(), F, and hasPartialSampleProfile().
|
inline |
Returns true if BasicBlock BB
is considered hot.
Definition at line 197 of file ProfileSummaryInfo.h.
References isHotCount().
Referenced by isFunctionHotInCallGraph().
|
inline |
Definition at line 223 of file ProfileSummaryInfo.h.
References PercentileCutoff.
|
inline |
Definition at line 216 of file ProfileSummaryInfo.h.
References PercentileCutoff.
Referenced by llvm::shouldOptimizeForSizeImpl().
bool ProfileSummaryInfo::isHotCallSite | ( | const CallBase & | CB, |
BlockFrequencyInfo * | BFI | ||
) | const |
Returns true if the call site CB
is considered hot.
Definition at line 200 of file ProfileSummaryInfo.cpp.
References llvm::CallingConv::C, getProfileCount(), and isHotCount().
Returns true if count C
is considered hot.
Definition at line 164 of file ProfileSummaryInfo.cpp.
References llvm::CallingConv::C.
Referenced by llvm::sampleprofutil::callsiteIsHot(), getHotness(), isFunctionEntryHot(), isFunctionHotInCallGraph(), isHotBlock(), and isHotCallSite().
Returns true if count C
is considered hot with regard to a given hot percentile cutoff value.
PercentileCutoff is encoded as a 6 digit decimal fixed point number, where the first two digits are the whole part. E.g. 995000 for 99.5 percentile.
Definition at line 182 of file ProfileSummaryInfo.cpp.
References llvm::CallingConv::C, and PercentileCutoff.
Referenced by removeUbsanTraps().
void ProfileSummaryInfo::refresh | ( | ) |
If no summary is present, attempt to refresh.
Definition at line 50 of file ProfileSummaryInfo.cpp.
References llvm::ProfileSummary::getFromMD(), llvm::Module::getProfileSummary(), and hasProfileSummary().
Referenced by annotateAllFunctions(), and ProfileSummaryInfo().