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. | |
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. | |
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) |
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. | |
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 |
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. | |
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 393 of file SampleProfReader.h.
|
protected |
Compute summary for this profile.
Definition at line 1934 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 1897 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 1826 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 478 of file SampleProfReader.h.
|
inline |
Definition at line 454 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 477 of file SampleProfReader.h.
|
inline |
Return all the profiles.
Definition at line 427 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 471 of file SampleProfReader.h.
|
inline |
Definition at line 493 of file SampleProfReader.h.
References Remapper.
|
inline |
Return the samples collected for function F
.
Definition at line 402 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 411 of file SampleProfReader.h.
References llvm::sampleprof::SampleProfileMap::find(), Profiles, and Remapper.
|
inline |
|
inlinevirtual |
Return whether any name in the profile contains ".__uniq." suffix.
Definition at line 491 of file SampleProfReader.h.
|
inline |
Whether input profile is fully context-sensitive.
Definition at line 463 of file SampleProfReader.h.
References ProfileIsCS.
|
inline |
Whether input profile is flow-sensitive.
Definition at line 469 of file SampleProfReader.h.
References ProfileIsFS.
|
inline |
Whether input profile contains ShouldBeInlined contexts.
Definition at line 466 of file SampleProfReader.h.
References ProfileIsPreInlined.
|
inline |
Whether input profile is based on pseudo probes.
Definition at line 460 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().
|
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 430 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.
Definition at line 495 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 485 of file SampleProfReader.h.
References ProfileIsMD5.
|
inlinevirtual |
Don't read profile without context if the flag is set.
This is only meaningful for ExtBinary format.
Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.
Definition at line 489 of file SampleProfReader.h.
|
inlinestaticprotected |
Take ownership of the summary of this reader.
Definition at line 516 of file SampleProfReader.h.
References Summary.
|
inline |
Return whether names in the profile are all MD5 numbers.
Definition at line 481 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 509 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 535 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 506 of file SampleProfReader.h.
Referenced by read(), and reportError().
|
protected |
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 546 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 550 of file SampleProfReader.h.
Referenced by getDiscriminatorMask(), and setDiscriminatorMaskedBitFrom().
|
protected |
Whether function profiles are context-sensitive flat profiles.
Definition at line 529 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 538 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 554 of file SampleProfReader.h.
Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), setProfileUseMD5(), and useMD5().
|
protected |
Whether function profile contains ShouldBeInlined contexts.
Definition at line 532 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 526 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 503 of file SampleProfReader.h.
Referenced by computeSummary(), dump(), dumpJson(), getProfiles(), getSamplesFor(), 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 523 of file SampleProfReader.h.
Referenced by getRemapper(), getSamplesFor(), read(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readFuncProfiles(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::useFuncOffsetList().
|
protected |
Profile summary information.
Definition at line 512 of file SampleProfReader.h.
Referenced by computeSummary(), getSummary(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), llvm::sampleprof::SampleProfileReaderBinary::readSummary(), and takeSummary().