LLVM 18.0.0git
|
#include "llvm/ProfileData/SampleProfReader.h"
Public Member Functions | |
SampleProfileReaderBinary (std::unique_ptr< MemoryBuffer > B, LLVMContext &C, SampleProfileFormat Format=SPF_None) | |
std::error_code | readHeader () override |
Read and validate the file header. | |
std::error_code | readImpl () override |
Read sample profiles from the associated file. | |
std::vector< StringRef > * | getNameTable () override |
It includes all the names that have samples either in outline instance or inline instance. | |
![]() | |
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. | |
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< StringRef > * | 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. | |
virtual 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) |
Protected Member Functions | |
template<typename T > | |
ErrorOr< T > | readNumber () |
Read a numeric value of type T from the profile. | |
template<typename T > | |
ErrorOr< T > | readUnencodedNumber () |
Read a numeric value of type T from the profile. | |
ErrorOr< StringRef > | readString () |
Read a string from the profile. | |
template<typename T > | |
ErrorOr< size_t > | readStringIndex (T &Table) |
Read the string index and check whether it overflows the table. | |
std::error_code | readFuncProfile (const uint8_t *Start) |
Read the next function profile instance. | |
std::error_code | readProfile (FunctionSamples &FProfile) |
Read the contents of the given profile instance. | |
std::error_code | readMagicIdent () |
Read the contents of Magic number and Version number. | |
std::error_code | readSummary () |
Read profile summary. | |
std::error_code | readNameTable () |
Read the whole name table. | |
ErrorOr< StringRef > | readStringFromTable (size_t *RetIdx=nullptr) |
Read a string indirectly via the name table. Optionally return the index. | |
ErrorOr< SampleContextFrames > | readContextFromTable (size_t *RetIdx=nullptr) |
Read a context indirectly via the CSNameTable. | |
ErrorOr< std::pair< SampleContext, uint64_t > > | readSampleContextFromTable () |
Read a context indirectly via the CSNameTable if the profile has context, otherwise same as readStringFromTable, also return its hash value. | |
![]() | |
void | computeSummary () |
Compute summary for this profile. | |
Protected Attributes | |
const uint8_t * | Data = nullptr |
Points to the current location in the buffer. | |
const uint8_t * | End = nullptr |
Points to the end of the buffer. | |
std::vector< StringRef > | NameTable |
Function name table. | |
std::vector< std::string > | MD5StringBuf |
If MD5 is used in NameTable section, the section saves uint64_t data. | |
const uint8_t * | MD5NameMemStart = nullptr |
The starting address of fixed length MD5 name table section. | |
std::vector< SampleContextFrameVector > | CSNameTable |
CSNameTable is used to save full context vectors. | |
std::vector< uint64_t > | MD5SampleContextTable |
Table to cache MD5 values of sample contexts corresponding to readSampleContextFromTable(), used to index into Profiles or FuncOffsetTable. | |
const uint64_t * | MD5SampleContextStart = nullptr |
The starting address of the table of MD5 values of sample contexts. | |
![]() | |
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::unordered_set< std::string > | MD5NameBuffer |
Extra name buffer holding names created on demand. | |
std::unique_ptr< ProfileSummary > | Summary |
Profile summary information. | |
std::unique_ptr< SampleProfileReaderItaniumRemapper > | Remapper |
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. | |
Additional Inherited Members | |
![]() | |
static ErrorOr< std::unique_ptr< SampleProfileReader > > | create (const std::string Filename, LLVMContext &C, vfs::FileSystem &FS, FSDiscriminatorPass P=FSDiscriminatorPass::Base, const std::string 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, const std::string RemapFilename="") |
Create a sample profile reader from the supplied memory buffer. | |
![]() | |
static std::unique_ptr< ProfileSummary > | takeSummary (SampleProfileReader &Reader) |
Take ownership of the summary of this reader. | |
Definition at line 584 of file SampleProfReader.h.
|
inline |
Definition at line 586 of file SampleProfReader.h.
|
inlineoverridevirtual |
It includes all the names that have samples either in outline instance or inline instance.
Reimplemented from llvm::sampleprof::SampleProfileReader.
Definition at line 598 of file SampleProfReader.h.
References NameTable.
|
protected |
Read a context indirectly via the CSNameTable.
Optionally return the index.
Definition at line 551 of file SampleProfReader.cpp.
References CSNameTable, and llvm::truncated_name_table.
Referenced by readSampleContextFromTable().
|
protected |
Read the next function profile instance.
Definition at line 675 of file SampleProfReader.cpp.
References llvm::sampleprof::FunctionSamples::addHeadSamples(), llvm::sampleprof::SampleProfileReader::CSProfileCount, Data, llvm::sampleprof::SampleProfileReader::Profiles, readProfile(), readSampleContextFromTable(), llvm::sampleprof::FunctionSamples::setContext(), llvm::success, and llvm::sampleprof::HashKeyMap< MapT, KeyT, ValueT, MapTArgs >::try_emplace().
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), and readImpl().
|
overridevirtual |
Read and validate the file header.
Implements llvm::sampleprof::SampleProfileReader.
Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.
Definition at line 1449 of file SampleProfReader.cpp.
References llvm::sampleprof::SampleProfileReader::Buffer, Data, End, readMagicIdent(), readNameTable(), readSummary(), and llvm::success.
|
overridevirtual |
Read sample profiles from the associated file.
Implements llvm::sampleprof::SampleProfileReader.
Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.
Definition at line 700 of file SampleProfReader.cpp.
References Data, End, llvm::sampleprof::FunctionSamples::ProfileIsFS, llvm::sampleprof::SampleProfileReader::ProfileIsFS, ProfileIsFSDisciminator, readFuncProfile(), and llvm::success.
|
protected |
Read the contents of Magic number and Version number.
Definition at line 1431 of file SampleProfReader.cpp.
References llvm::sampleprof::SPVersion(), llvm::success, and llvm::unsupported_version.
Referenced by readHeader(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readHeader().
|
protected |
Read the whole name table.
Definition at line 1062 of file SampleProfReader.cpp.
References llvm::sampleprof::hashFuncName(), I, MD5SampleContextStart, MD5SampleContextTable, MD5StringBuf, Name, NameTable, llvm::sampleprof::SampleProfileReader::ProfileIsCS, readString(), Size, llvm::success, and llvm::sampleprof::SampleProfileReader::useMD5().
Referenced by readHeader(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec().
Read a numeric value of type T from the profile.
If an error occurs during decoding, a diagnostic message is emitted and EC is set.
Definition at line 466 of file SampleProfReader.cpp.
References Data, llvm::decodeULEB128(), End, llvm::malformed, llvm::sampleprof::SampleProfileReader::reportError(), llvm::success, and llvm::truncated.
|
protected |
Read the contents of the given profile instance.
Definition at line 592 of file SampleProfReader.cpp.
References llvm::sampleprof::FunctionSamples::addBodySamples(), llvm::sampleprof::FunctionSamples::addCalledTargetSamples(), llvm::sampleprof::FunctionSamples::addTotalSamples(), llvm::sampleprof::FunctionSamples::functionSamplesAt(), llvm::sampleprof::SampleProfileReader::getDiscriminatorMask(), I, isOffsetLegal(), readProfile(), readStringFromTable(), llvm::sampleprof::FunctionSamples::setName(), and llvm::success.
Referenced by readFuncProfile(), and readProfile().
|
protected |
Read a context indirectly via the CSNameTable if the profile has context, otherwise same as readStringFromTable, also return its hash value.
Definition at line 563 of file SampleProfReader.cpp.
References assert(), Context, Idx, MD5SampleContextStart, MD5SampleContextTable, llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::support::endian::read64le(), readContextFromTable(), readStringFromTable(), and llvm::support::endian::write64le().
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncOffsetTable(), and readFuncProfile().
Read a string from the profile.
If an error occurs during decoding, a diagnostic message is emitted and EC is set.
Definition at line 487 of file SampleProfReader.cpp.
References Data, End, llvm::sampleprof::SampleProfileReader::reportError(), and llvm::truncated.
Referenced by readNameTable().
|
protected |
Read a string indirectly via the name table. Optionally return the index.
Definition at line 527 of file SampleProfReader.cpp.
References assert(), llvm::StringRef::data(), Idx, MD5NameMemStart, MD5StringBuf, NameTable, and readStringIndex().
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readCSNameTableSec(), readProfile(), and readSampleContextFromTable().
|
inlineprotected |
Read the string index and check whether it overflows the table.
Definition at line 516 of file SampleProfReader.cpp.
References Idx, and llvm::truncated_name_table.
Referenced by readStringFromTable().
|
protected |
Read profile summary.
Definition at line 1482 of file SampleProfReader.cpp.
References llvm::ProfileSummary::PSK_Sample, llvm::success, and llvm::sampleprof::SampleProfileReader::Summary.
Referenced by readHeader(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().
Read a numeric value of type T from the profile.
The value is saved without encoded.
Definition at line 501 of file SampleProfReader.cpp.
References Data, End, llvm::sampleprof::SampleProfileReader::reportError(), and llvm::truncated.
|
protected |
CSNameTable is used to save full context vectors.
It is the backing buffer for SampleContextFrames.
Definition at line 673 of file SampleProfReader.h.
Referenced by readContextFromTable(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readCSNameTableSec().
|
protected |
Points to the current location in the buffer.
Definition at line 651 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderRawBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderExtBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), readFuncProfile(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), readHeader(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readHeader(), readImpl(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readImpl(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), readNumber(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readProfileSymbolList(), readString(), and readUnencodedNumber().
|
protected |
Points to the end of the buffer.
Definition at line 654 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncMetadata(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), readHeader(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readHeader(), readImpl(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readImpl(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), readNumber(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readProfileSymbolList(), readString(), and readUnencodedNumber().
|
protected |
The starting address of fixed length MD5 name table section.
Definition at line 669 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), and readStringFromTable().
|
protected |
The starting address of the table of MD5 values of sample contexts.
For fixed length MD5 non-CS profile it is same as MD5NameMemStart because hashes of non-CS contexts are already in the profile. Otherwise it points to the start of MD5SampleContextTable.
Definition at line 684 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readCSNameTableSec(), readNameTable(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), and readSampleContextFromTable().
|
protected |
Table to cache MD5 values of sample contexts corresponding to readSampleContextFromTable(), used to index into Profiles or FuncOffsetTable.
Definition at line 678 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readCSNameTableSec(), readNameTable(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), and readSampleContextFromTable().
|
protected |
If MD5 is used in NameTable section, the section saves uint64_t data.
The uint64_t data has to be converted to a string and then the string will be used to initialize StringRef in NameTable. Note NameTable contains StringRef so it needs another buffer to own the string data. MD5StringBuf serves as the string buffer that is referenced by NameTable (vector of StringRef). We make sure the lifetime of MD5StringBuf is not shorter than that of NameTable.
Definition at line 666 of file SampleProfReader.h.
Referenced by readNameTable(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), and readStringFromTable().
|
protected |
Function name table.
Definition at line 657 of file SampleProfReader.h.
Referenced by getNameTable(), readNameTable(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readNameTableSec(), and readStringFromTable().