LLVM
8.0.1
|
Analysis providing profile information. More...
#include "llvm/Analysis/ProfileSummaryInfo.h"
Public Member Functions | |
ProfileSummaryInfo (Module &M) | |
ProfileSummaryInfo (ProfileSummaryInfo &&Arg) | |
bool | hasProfileSummary () |
Returns true if profile summary is available. More... | |
bool | hasSampleProfile () |
Returns true if module M has sample profile. More... | |
bool | hasInstrumentationProfile () |
Returns true if module M has instrumentation profile. More... | |
bool | invalidate (Module &, const PreservedAnalyses &, ModuleAnalysisManager::Invalidator &) |
Handle the invalidation of this information. More... | |
Optional< uint64_t > | getProfileCount (const Instruction *CallInst, BlockFrequencyInfo *BFI) |
Returns the profile count for CallInst . More... | |
bool | hasHugeWorkingSetSize () |
Returns true if the working set size of the code is considered huge. More... | |
bool | isFunctionEntryHot (const Function *F) |
Returns true if F has hot function entry. More... | |
bool | isFunctionHotInCallGraph (const Function *F, BlockFrequencyInfo &BFI) |
Returns true if F contains hot code. More... | |
bool | isFunctionEntryCold (const Function *F) |
Returns true if F has cold function entry. More... | |
bool | isFunctionColdInCallGraph (const Function *F, BlockFrequencyInfo &BFI) |
Returns true if F contains only cold code. More... | |
bool | isHotCount (uint64_t C) |
Returns true if count C is considered hot. More... | |
bool | isColdCount (uint64_t C) |
Returns true if count C is considered cold. More... | |
bool | isHotBlock (const BasicBlock *BB, BlockFrequencyInfo *BFI) |
Returns true if BasicBlock BB is considered hot. More... | |
bool | isColdBlock (const BasicBlock *BB, BlockFrequencyInfo *BFI) |
Returns true if BasicBlock BB is considered cold. More... | |
bool | isHotCallSite (const CallSite &CS, BlockFrequencyInfo *BFI) |
Returns true if CallSite CS is considered hot. More... | |
bool | isColdCallSite (const CallSite &CS, BlockFrequencyInfo *BFI) |
Returns true if Callsite CS is considered cold. More... | |
uint64_t | getOrCompHotCountThreshold () |
Returns HotCountThreshold if set. More... | |
uint64_t | getOrCompColdCountThreshold () |
Returns ColdCountThreshold if set. More... | |
uint64_t | getHotCountThreshold () |
Returns HotCountThreshold if set. More... | |
uint64_t | getColdCountThreshold () |
Returns ColdCountThreshold if set. More... | |
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 44 of file ProfileSummaryInfo.h.
|
inline |
Definition at line 58 of file ProfileSummaryInfo.h.
Referenced by llvm::ProfileSummaryInfoWrapperPass::doInitialization(), and llvm::ProfileSummaryAnalysis::run().
|
inline |
Definition at line 59 of file ProfileSummaryInfo.h.
|
inline |
Returns ColdCountThreshold if set.
Definition at line 124 of file ProfileSummaryInfo.h.
References llvm::Optional< T >::getValue().
|
inline |
Returns HotCountThreshold if set.
Definition at line 120 of file ProfileSummaryInfo.h.
References llvm::Optional< T >::getValue().
uint64_t ProfileSummaryInfo::getOrCompColdCountThreshold | ( | ) |
Returns ColdCountThreshold if set.
Recompute HotCountThreshold if not set.
Definition at line 245 of file ProfileSummaryInfo.cpp.
References llvm::Optional< T >::getValue().
Referenced by invalidate().
uint64_t ProfileSummaryInfo::getOrCompHotCountThreshold | ( | ) |
Returns HotCountThreshold if set.
Recompute HotCountThreshold if not set.
Definition at line 239 of file ProfileSummaryInfo.cpp.
References llvm::Optional< T >::getValue(), and UINT64_MAX.
Referenced by callsiteIsHot(), and invalidate().
Optional< uint64_t > ProfileSummaryInfo::getProfileCount | ( | const Instruction * | CallInst, |
BlockFrequencyInfo * | BFI | ||
) |
Returns the profile count for CallInst
.
Definition at line 91 of file ProfileSummaryInfo.cpp.
References assert(), llvm::Instruction::extractProfTotalWeight(), llvm::BlockFrequencyInfo::getBlockProfileCount(), llvm::Instruction::getParent(), hasSampleProfile(), and llvm::None.
Referenced by computeFunctionSummary(), invalidate(), isColdCallSite(), isFunctionColdInCallGraph(), isFunctionHotInCallGraph(), isHotCallSite(), updateCalleeCount(), and updateCallProfile().
bool ProfileSummaryInfo::hasHugeWorkingSetSize | ( | ) |
Returns true if the working set size of the code is considered huge.
Definition at line 221 of file ProfileSummaryInfo.cpp.
References llvm::Optional< T >::getValue().
Referenced by llvm::createCodeGenPreparePass(), invalidate(), and llvm::LoopUnrollPass::run().
|
inline |
Returns true if module M
has instrumentation profile.
Definition at line 72 of file ProfileSummaryInfo.h.
References hasProfileSummary(), and llvm::ProfileSummary::PSK_Instr.
|
inline |
Returns true if profile summary is available.
Definition at line 63 of file ProfileSummaryInfo.h.
Referenced by hasInstrumentationProfile(), hasSampleProfile(), llvm::pgo::promoteIndirectCall(), and shouldApply().
|
inline |
Returns true if module M
has sample profile.
Definition at line 66 of file ProfileSummaryInfo.h.
References hasProfileSummary(), and llvm::ProfileSummary::PSK_Sample.
Referenced by getProfileCount(), isColdCallSite(), isFunctionColdInCallGraph(), and isFunctionHotInCallGraph().
|
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 83 of file ProfileSummaryInfo.h.
References llvm::AMDGPUISD::BFI, C, F(), getOrCompColdCountThreshold(), getOrCompHotCountThreshold(), getProfileCount(), hasHugeWorkingSetSize(), isColdBlock(), isColdCallSite(), isColdCount(), isFunctionColdInCallGraph(), isFunctionEntryCold(), isFunctionEntryHot(), isFunctionHotInCallGraph(), isHotBlock(), isHotCallSite(), and isHotCount().
bool ProfileSummaryInfo::isColdBlock | ( | const BasicBlock * | BB, |
BlockFrequencyInfo * | BFI | ||
) |
Returns true if BasicBlock BB
is considered cold.
Definition at line 256 of file ProfileSummaryInfo.cpp.
References llvm::BlockFrequencyInfo::getBlockProfileCount(), and isColdCount().
Referenced by invalidate(), and isFunctionColdInCallGraph().
bool ProfileSummaryInfo::isColdCallSite | ( | const CallSite & | CS, |
BlockFrequencyInfo * | BFI | ||
) |
Returns true if Callsite CS
is considered cold.
Definition at line 268 of file ProfileSummaryInfo.cpp.
References llvm::AMDGPUISD::BFI, C, llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getCaller(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getInstruction(), getProfileCount(), llvm::Function::hasProfileData(), hasSampleProfile(), and isColdCount().
Referenced by invalidate().
bool ProfileSummaryInfo::isColdCount | ( | uint64_t | C | ) |
Returns true if count C
is considered cold.
Definition at line 233 of file ProfileSummaryInfo.cpp.
References llvm::Optional< T >::getValue().
Referenced by getHotness(), invalidate(), isColdBlock(), isColdCallSite(), isFunctionColdInCallGraph(), and isFunctionEntryCold().
bool ProfileSummaryInfo::isFunctionColdInCallGraph | ( | const Function * | F, |
BlockFrequencyInfo & | BFI | ||
) |
Returns true if F
contains only cold code.
Returns true if the function only contains cold code.
This means that the function entry and blocks are all cold, and (in the case of Sample PGO) the total call edge count is cold. If it returns false, it either means it is not cold or it is unknown (for example, no profile data is available).
Definition at line 159 of file ProfileSummaryInfo.cpp.
References llvm::Function::getEntryCount(), getProfileCount(), hasSampleProfile(), I, isColdBlock(), and isColdCount().
Referenced by llvm::createCodeGenPreparePass(), and invalidate().
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 186 of file ProfileSummaryInfo.cpp.
References assert(), llvm::Attribute::Cold, llvm::Function::getEntryCount(), getEntryForPercentile(), llvm::Function::hasFnAttribute(), isColdCount(), ProfileSummaryColdCount, ProfileSummaryCutoffCold, ProfileSummaryCutoffHot, ProfileSummaryHotCount, and ProfileSummaryHugeWorkingSetSizeThreshold.
Referenced by invalidate(), and llvm::ProfileSummaryPrinterPass::run().
Returns true if F
has hot function entry.
Returns true if the function's entry is hot.
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 115 of file ProfileSummaryInfo.cpp.
References llvm::Function::getEntryCount(), and isHotCount().
Referenced by invalidate(), llvm::ProfileSummaryPrinterPass::run(), and shouldApply().
bool ProfileSummaryInfo::isFunctionHotInCallGraph | ( | const Function * | F, |
BlockFrequencyInfo & | BFI | ||
) |
Returns true if F
contains hot code.
Returns true if the function contains hot code.
This can include a hot function entry count, hot basic block, or (in the case of Sample PGO) hot total call edge count. If it returns false, it either means it is not hot or it is unknown (for example, no profile data is available).
Definition at line 130 of file ProfileSummaryInfo.cpp.
References llvm::Function::getEntryCount(), getProfileCount(), hasSampleProfile(), I, isHotBlock(), and isHotCount().
Referenced by llvm::createCodeGenPreparePass(), and invalidate().
bool ProfileSummaryInfo::isHotBlock | ( | const BasicBlock * | BB, |
BlockFrequencyInfo * | BFI | ||
) |
Returns true if BasicBlock BB
is considered hot.
Definition at line 251 of file ProfileSummaryInfo.cpp.
References llvm::BlockFrequencyInfo::getBlockProfileCount(), and isHotCount().
Referenced by invalidate(), and isFunctionHotInCallGraph().
bool ProfileSummaryInfo::isHotCallSite | ( | const CallSite & | CS, |
BlockFrequencyInfo * | BFI | ||
) |
Returns true if CallSite CS
is considered hot.
Definition at line 262 of file ProfileSummaryInfo.cpp.
References llvm::AMDGPUISD::BFI, C, llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getInstruction(), getProfileCount(), and isHotCount().
Referenced by invalidate().
bool ProfileSummaryInfo::isHotCount | ( | uint64_t | C | ) |
Returns true if count C
is considered hot.
Definition at line 227 of file ProfileSummaryInfo.cpp.
References llvm::Optional< T >::getValue().
Referenced by callsiteIsHot(), getHotness(), invalidate(), isFunctionEntryHot(), isFunctionHotInCallGraph(), isHotBlock(), isHotCallSite(), and llvm::pgo::promoteIndirectCall().