LLVM 20.0.0git
|
Sample-based profile reader. More...
#include "llvm/ProfileData/SampleProfReader.h"
Public Member Functions | |
SampleProfileReader (std::unique_ptr< MemoryBuffer > B, LLVMContext &C, SampleProfileFormat Format=SPF_None) | |
virtual | ~SampleProfileReader ()=default |
virtual std::error_code | readHeader ()=0 |
Read and validate the file header. | |
void | setDiscriminatorMaskedBitFrom (FSDiscriminatorPass P) |
Set the bits for FS discriminators. | |
uint32_t | getDiscriminatorMask () const |
Get the bitmask the discriminators: For FS profiles, return the bit mask for this pass. | |
std::error_code | read () |
The interface to read sample profiles from the associated file. | |
std::error_code | read (const DenseSet< StringRef > &FuncsToUse) |
Read sample profiles for the given functions. | |
virtual std::error_code | readImpl ()=0 |
The implementaion to read sample profiles from the associated file. | |
void | dumpFunctionProfile (const FunctionSamples &FS, raw_ostream &OS=dbgs()) |
Print the profile for FunctionSamples on stream OS . | |
virtual bool | collectFuncsFromModule () |
Collect functions with definitions in Module M. | |
void | dump (raw_ostream &OS=dbgs()) |
Print all the profiles on stream OS . | |
void | dumpJson (raw_ostream &OS=dbgs()) |
Print all the profiles on stream OS in the JSON format. | |
FunctionSamples * | getSamplesFor (const Function &F) |
Return the samples collected for function F . | |
FunctionSamples * | getSamplesFor (StringRef Fname) |
Return the samples collected for function F . | |
SampleProfileMap & | getProfiles () |
Return all the profiles. | |
void | reportError (int64_t LineNumber, const Twine &Msg) const |
Report a parse error message. | |
ProfileSummary & | getSummary () const |
Return the profile summary. | |
MemoryBuffer * | getBuffer () const |
SampleProfileFormat | getFormat () const |
Return the profile format. | |
bool | profileIsProbeBased () const |
Whether input profile is based on pseudo probes. | |
bool | profileIsCS () const |
Whether input profile is fully context-sensitive. | |
bool | profileIsPreInlined () const |
Whether input profile contains ShouldBeInlined contexts. | |
bool | profileIsFS () const |
Whether input profile is flow-sensitive. | |
virtual std::unique_ptr< ProfileSymbolList > | getProfileSymbolList () |
virtual std::vector< FunctionId > * | getNameTable () |
It includes all the names that have samples either in outline instance or inline instance. | |
virtual bool | dumpSectionInfo (raw_ostream &OS=dbgs()) |
bool | useMD5 () const |
Return whether names in the profile are all MD5 numbers. | |
virtual void | setProfileUseMD5 () |
Force the profile to use MD5 in Sample contexts, even if function names are present. | |
void | setSkipFlatProf (bool Skip) |
Don't read profile without context if the flag is set. | |
virtual bool | hasUniqSuffix () |
Return whether any name in the profile contains ".__uniq." suffix. | |
SampleProfileReaderItaniumRemapper * | getRemapper () |
void | setModule (const Module *Mod) |
void | setFuncNameToProfNameMap (const HashKeyMap< std::unordered_map, FunctionId, FunctionId > &FPMap) |
Static Public Member Functions | |
static ErrorOr< std::unique_ptr< SampleProfileReader > > | create (StringRef Filename, LLVMContext &C, vfs::FileSystem &FS, FSDiscriminatorPass P=FSDiscriminatorPass::Base, StringRef RemapFilename="") |
Create a sample profile reader appropriate to the file format. | |
static ErrorOr< std::unique_ptr< SampleProfileReader > > | create (std::unique_ptr< MemoryBuffer > &B, LLVMContext &C, vfs::FileSystem &FS, FSDiscriminatorPass P=FSDiscriminatorPass::Base, StringRef RemapFilename="") |
Create a sample profile reader from the supplied memory buffer. | |
Protected Member Functions | |
void | computeSummary () |
Compute summary for this profile. | |
virtual std::error_code | read (const DenseSet< StringRef > &FuncsToUse, SampleProfileMap &Profiles) |
Read sample profiles for the given functions and write them to the given profile map. | |
Static Protected Member Functions | |
static std::unique_ptr< ProfileSummary > | takeSummary (SampleProfileReader &Reader) |
Take ownership of the summary of this reader. | |
Protected Attributes | |
SampleProfileMap | Profiles |
Map every function to its associated profile. | |
LLVMContext & | Ctx |
LLVM context used to emit diagnostics. | |
std::unique_ptr< MemoryBuffer > | Buffer |
Memory buffer holding the profile file. | |
std::unique_ptr< ProfileSummary > | Summary |
Profile summary information. | |
std::unique_ptr< SampleProfileReaderItaniumRemapper > | Remapper |
const HashKeyMap< std::unordered_map, FunctionId, FunctionId > * | FuncNameToProfNameMap = nullptr |
std::unordered_map< uint64_t, std::pair< const uint8_t *, const uint8_t * > > | FuncMetadataIndex |
std::pair< const uint8_t *, const uint8_t * > | ProfileSecRange |
bool | ProfileHasAttribute = false |
Whether the profile has attribute metadata. | |
bool | ProfileIsProbeBased = false |
Whether samples are collected based on pseudo probes. | |
bool | ProfileIsCS = false |
Whether function profiles are context-sensitive flat profiles. | |
bool | ProfileIsPreInlined = false |
Whether function profile contains ShouldBeInlined contexts. | |
uint32_t | CSProfileCount = 0 |
Number of context-sensitive profiles. | |
bool | ProfileIsFS = false |
Whether the function profiles use FS discriminators. | |
SampleProfileFormat | Format = SPF_None |
The format of sample. | |
const Module * | M = nullptr |
The current module being compiled if SampleProfileReader is used by compiler. | |
uint32_t | MaskedBitFrom = 31 |
Zero out the discriminator bits higher than bit MaskedBitFrom (0 based). | |
bool | ProfileIsMD5 = false |
Whether the profile uses MD5 for Sample Contexts and function names. | |
bool | SkipFlatProf = false |
If SkipFlatProf is true, skip functions marked with !Flat in text mode or sections with SecFlagFlat flag in ExtBinary mode. | |
Sample-based profile reader.
Each profile contains sample counts for all the functions executed. Inside each function, statements are annotated with the collected samples on all the instructions associated with that statement.
For this to produce meaningful data, the program needs to be compiled with some debug information (at minimum, line numbers: -gline-tables-only). Otherwise, it will be impossible to match IR instructions to the line numbers collected by the profiler.
From the profile file, we are interested in collecting the following information:
The reader supports two file formats: text and binary. The text format is useful for debugging and testing, while the binary format is more compact and I/O efficient. They can both be used interchangeably.
Definition at line 346 of file SampleProfReader.h.
|
inline |
Definition at line 348 of file SampleProfReader.h.
|
virtualdefault |
|
inlinevirtual |
Collect functions with definitions in Module M.
For reader which support loading function profiles on demand, return true when the reader has been given a module. Always return false for reader which doesn't support loading function profiles on demand.
Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.
Definition at line 404 of file SampleProfReader.h.
|
protected |
Compute summary for this profile.
Definition at line 2013 of file SampleProfReader.cpp.
References llvm::SampleProfileSummaryBuilder::computeSummaryForProfiles(), llvm::ProfileSummaryBuilder::DefaultCutoffs, Profiles, and Summary.
Referenced by llvm::sampleprof::SampleProfileReaderGCC::readFunctionProfiles(), and llvm::sampleprof::SampleProfileReaderText::readImpl().
|
static |
Create a sample profile reader from the supplied memory buffer.
Create a sample profile reader based on the format of the input data.
Create a remapper underlying if RemapFilename is not empty. Parameter P specifies the FSDiscriminatorPass.
B | The memory buffer to create the reader from (assumes ownership). |
C | The LLVM context to use to emit diagnostics. |
P | The FSDiscriminatorPass. |
RemapFilename | The file used for profile remapping. |
Definition at line 1976 of file SampleProfReader.cpp.
References B, llvm::CallingConv::C, llvm::sampleprof::SampleProfileReaderItaniumRemapper::create(), llvm::StringRef::empty(), llvm::sampleprof::SampleProfileReaderText::hasFormat(), llvm::sampleprof::SampleProfileReaderRawBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderExtBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderGCC::hasFormat(), P, and llvm::unrecognized_format.
|
static |
Create a sample profile reader appropriate to the file format.
Create a sample profile reader based on the format of the input file.
Create a remapper underlying if RemapFilename is not empty. Parameter P specifies the FSDiscriminatorPass.
Filename | The file to open. |
C | The LLVM context to use to emit diagnostics. |
P | The FSDiscriminatorPass. |
RemapFilename | The file used for profile remapping. |
Definition at line 1905 of file SampleProfReader.cpp.
References llvm::CallingConv::C, create(), P, and llvm::setupMemoryBuffer().
Referenced by create(), and llvm::MIRProfileLoader::doInitialization().
void SampleProfileReader::dump | ( | raw_ostream & | OS = dbgs() | ) |
Print all the profiles on stream OS
.
Dump all the function profiles found on stream OS
.
Definition at line 70 of file SampleProfReader.cpp.
References dumpFunctionProfile(), I, OS, Profiles, and llvm::sampleprof::sortFuncProfiles().
void SampleProfileReader::dumpFunctionProfile | ( | const FunctionSamples & | FS, |
raw_ostream & | OS = dbgs() |
||
) |
Print the profile for FunctionSamples
on stream OS
.
Dump the function profile for FName
.
FContext | Name + context of the function to print. |
OS | Stream to emit the output to. |
Definition at line 64 of file SampleProfReader.cpp.
References OS.
Referenced by dump().
void SampleProfileReader::dumpJson | ( | raw_ostream & | OS = dbgs() | ) |
Print all the profiles on stream OS
in the JSON format.
Dump all the function profiles found on stream OS
in the JSON format.
Definition at line 137 of file SampleProfReader.cpp.
References llvm::json::OStream::arrayBegin(), llvm::json::OStream::arrayEnd(), dumpFunctionProfileJson(), F, OS, Profiles, and llvm::sampleprof::sortFuncProfiles().
|
inlinevirtual |
Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.
Definition at line 499 of file SampleProfReader.h.
|
inline |
Definition at line 475 of file SampleProfReader.h.
References Buffer.
Referenced by llvm::sampleprof::SampleProfileReaderItaniumRemapper::applyRemapping().
|
inline |
Get the bitmask the discriminators: For FS profiles, return the bit mask for this pass.
For non FS profiles, return (unsigned) -1.
Definition at line 366 of file SampleProfReader.h.
References assert(), llvm::getN1Bits(), MaskedBitFrom, and ProfileIsFS.
Referenced by llvm::sampleprof::SampleProfileReaderText::readImpl(), and llvm::sampleprof::SampleProfileReaderBinary::readProfile().
|
inline |
|
inlinevirtual |
It includes all the names that have samples either in outline instance or inline instance.
Reimplemented in llvm::sampleprof::SampleProfileReaderBinary.
Definition at line 498 of file SampleProfReader.h.
|
inline |
Return all the profiles.
Definition at line 448 of file SampleProfReader.h.
References Profiles.
Referenced by llvm::sampleprof::SampleProfileReaderItaniumRemapper::applyRemapping(), and llvm::SampleProfileMatcher::runOnModule().
|
inlinevirtual |
Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.
Definition at line 492 of file SampleProfReader.h.
|
inline |
Definition at line 514 of file SampleProfReader.h.
References Remapper.
|
inline |
Return the samples collected for function F
.
Definition at line 413 of file SampleProfReader.h.
References F, llvm::sampleprof::FunctionSamples::getCanonicalFnName(), and getSamplesFor().
Referenced by getSamplesFor().
|
inline |
Return the samples collected for function F
.
Definition at line 422 of file SampleProfReader.h.
References llvm::sampleprof::SampleProfileMap::find(), FuncNameToProfNameMap, Profiles, and Remapper.
|
inline |
|
inlinevirtual |
Return whether any name in the profile contains ".__uniq." suffix.
Definition at line 512 of file SampleProfReader.h.
|
inline |
Whether input profile is fully context-sensitive.
Definition at line 484 of file SampleProfReader.h.
References ProfileIsCS.
|
inline |
Whether input profile is flow-sensitive.
Definition at line 490 of file SampleProfReader.h.
References ProfileIsFS.
|
inline |
Whether input profile contains ShouldBeInlined contexts.
Definition at line 487 of file SampleProfReader.h.
References ProfileIsPreInlined.
|
inline |
Whether input profile is based on pseudo probes.
Definition at line 481 of file SampleProfReader.h.
References ProfileIsProbeBased.
|
inline |
The interface to read sample profiles from the associated file.
Definition at line 374 of file SampleProfReader.h.
References Ctx, readImpl(), Remapper, llvm::success, llvm::sampleprof::FunctionSamples::UseMD5, and useMD5().
Referenced by read().
|
inline |
Read sample profiles for the given functions.
Definition at line 384 of file SampleProfReader.h.
References F, llvm::sampleprof::SampleProfileMap::find(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), Profiles, read(), and llvm::success.
|
inlineprotectedvirtual |
Read sample profiles for the given functions and write them to the given profile map.
Currently it's only used for extended binary format to load the profiles on-demand.
Definition at line 552 of file SampleProfReader.h.
References llvm::not_implemented.
|
pure virtual |
Read and validate the file header.
Implemented in llvm::sampleprof::SampleProfileReaderText, llvm::sampleprof::SampleProfileReaderBinary, llvm::sampleprof::SampleProfileReaderExtBinaryBase, and llvm::sampleprof::SampleProfileReaderGCC.
|
pure virtual |
The implementaion to read sample profiles from the associated file.
Implemented in llvm::sampleprof::SampleProfileReaderText, llvm::sampleprof::SampleProfileReaderBinary, llvm::sampleprof::SampleProfileReaderExtBinaryBase, and llvm::sampleprof::SampleProfileReaderGCC.
Referenced by read().
|
inline |
Report a parse error message.
Definition at line 451 of file SampleProfReader.h.
References Buffer, Ctx, and llvm::LLVMContext::diagnose().
Referenced by llvm::sampleprof::SampleProfileReaderText::readImpl(), llvm::sampleprof::SampleProfileReaderBinary::readNumber(), llvm::sampleprof::SampleProfileReaderGCC::readNumber(), llvm::sampleprof::SampleProfileReaderBinary::readString(), and llvm::sampleprof::SampleProfileReaderBinary::readUnencodedNumber().
|
inline |
Set the bits for FS discriminators.
Parameter Pass specify the sequence number, Pass == i is for the i-th round of adding FS discriminators. Pass == 0 is for using base discriminators.
Definition at line 360 of file SampleProfReader.h.
References llvm::getFSPassBitEnd(), MaskedBitFrom, and P.
|
inline |
Definition at line 518 of file SampleProfReader.h.
References FuncNameToProfNameMap.
Definition at line 516 of file SampleProfReader.h.
|
inlinevirtual |
Force the profile to use MD5 in Sample contexts, even if function names are present.
Reimplemented in llvm::sampleprof::SampleProfileReaderText.
Definition at line 506 of file SampleProfReader.h.
References ProfileIsMD5.
|
inline |
Don't read profile without context if the flag is set.
Definition at line 509 of file SampleProfReader.h.
References SkipFlatProf.
|
inlinestaticprotected |
Take ownership of the summary of this reader.
Definition at line 542 of file SampleProfReader.h.
References Summary.
|
inline |
Return whether names in the profile are all MD5 numbers.
Definition at line 502 of file SampleProfReader.h.
References ProfileIsMD5.
Referenced by llvm::sampleprof::SampleProfileReaderItaniumRemapper::applyRemapping(), read(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), llvm::sampleprof::SampleProfileReaderBinary::readNameTable(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::useFuncOffsetList().
|
protected |
Memory buffer holding the profile file.
Definition at line 535 of file SampleProfReader.h.
Referenced by getBuffer(), llvm::sampleprof::SampleProfileReaderText::hasFormat(), llvm::sampleprof::SampleProfileReaderRawBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderExtBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderGCC::hasFormat(), llvm::sampleprof::SampleProfileReaderBinary::readHeader(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readHeader(), llvm::sampleprof::SampleProfileReaderText::readImpl(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readImpl(), and reportError().
|
protected |
Number of context-sensitive profiles.
Definition at line 585 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderBinary::readFuncProfile(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), and llvm::sampleprof::SampleProfileReaderText::readImpl().
|
protected |
LLVM context used to emit diagnostics.
Definition at line 532 of file SampleProfReader.h.
Referenced by read(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and reportError().
|
protected |
|
protected |
Definition at line 568 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata().
|
protected |
Definition at line 563 of file SampleProfReader.h.
Referenced by getSamplesFor(), and setFuncNameToProfNameMap().
The current module being compiled if SampleProfileReader is used by compiler.
If SampleProfileReader is used by other tools which are not compiler, M is usually nullptr.
Definition at line 596 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::collectFuncsFromModule(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), and setModule().
|
protected |
Zero out the discriminator bits higher than bit MaskedBitFrom (0 based).
The default is to keep all the bits.
Definition at line 600 of file SampleProfReader.h.
Referenced by getDiscriminatorMask(), and setDiscriminatorMaskedBitFrom().
|
protected |
Whether the profile has attribute metadata.
Definition at line 573 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().
|
protected |
Whether function profiles are context-sensitive flat profiles.
Definition at line 579 of file SampleProfReader.h.
Referenced by profileIsCS(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readCSNameTableSec(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), llvm::sampleprof::SampleProfileReaderText::readImpl(), llvm::sampleprof::SampleProfileReaderBinary::readNameTable(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), llvm::sampleprof::SampleProfileReaderBinary::readSampleContextFromTable(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::useFuncOffsetList().
|
protected |
Whether the function profiles use FS discriminators.
Definition at line 588 of file SampleProfReader.h.
Referenced by getDiscriminatorMask(), profileIsFS(), llvm::sampleprof::SampleProfileReaderText::readImpl(), llvm::sampleprof::SampleProfileReaderBinary::readImpl(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().
|
protected |
Whether the profile uses MD5 for Sample Contexts and function names.
This can be one-way overriden by the user to force use MD5.
Definition at line 604 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), setProfileUseMD5(), and useMD5().
|
protected |
Whether function profile contains ShouldBeInlined contexts.
Definition at line 582 of file SampleProfReader.h.
Referenced by profileIsPreInlined(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().
|
protected |
Whether samples are collected based on pseudo probes.
Definition at line 576 of file SampleProfReader.h.
Referenced by profileIsProbeBased(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().
|
protected |
Map every function to its associated profile.
The profile of every function executed at runtime is collected in the structure FunctionSamples. This maps function objects to their corresponding profiles.
Definition at line 529 of file SampleProfReader.h.
Referenced by computeSummary(), dump(), dumpJson(), getProfiles(), getSamplesFor(), read(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), llvm::sampleprof::SampleProfileReaderBinary::readFuncProfile(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and llvm::sampleprof::SampleProfileReaderGCC::readOneFunctionProfile().
|
protected |
Definition at line 570 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().
|
protected |
Definition at line 557 of file SampleProfReader.h.
Referenced by getRemapper(), getSamplesFor(), read(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::useFuncOffsetList().
|
protected |
If SkipFlatProf is true, skip functions marked with !Flat in text mode or sections with SecFlagFlat flag in ExtBinary mode.
Definition at line 608 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderText::readImpl(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readImpl(), and setSkipFlatProf().
|
protected |
Profile summary information.
Definition at line 538 of file SampleProfReader.h.
Referenced by computeSummary(), getSummary(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), llvm::sampleprof::SampleProfileReaderBinary::readSummary(), and takeSummary().