LLVM: llvm::sampleprof::SampleProfileReaderExtBinaryBase Class Reference (original) (raw)

SampleProfileReaderExtBinaryBase/SampleProfileWriterExtBinaryBase defines the basic structure of the extensible binary format. More...

#include "[llvm/ProfileData/SampleProfReader.h](SampleProfReader%5F8h%5Fsource.html)"

Public Member Functions
SampleProfileReaderExtBinaryBase (std::unique_ptr< MemoryBuffer > B, LLVMContext &C, SampleProfileFormat Format)
std::error_code readImpl () override
Read sample profiles in extensible format from the associated file.
uint64_t getSectionSize (SecType Type)
Get the total size of all Type sections.
uint64_t getFileSize ()
Get the total size of header and all sections.
bool dumpSectionInfo (raw_ostream &OS=dbgs()) override
bool collectFuncsFromModule () override
Collect functions with definitions in Module M.
std::unique_ptr< ProfileSymbolList > getProfileSymbolList () override
Public Member Functions inherited from llvm::sampleprof::SampleProfileReaderBinary
SampleProfileReaderBinary (std::unique_ptr< MemoryBuffer > B, LLVMContext &C, SampleProfileFormat Format=SPF_None)
std::vector< FunctionId > * getNameTable () override
It includes all the names that have samples either in outline instance or inline instance.
Public Member Functions inherited from llvm::sampleprof::SampleProfileReader
SampleProfileReader (std::unique_ptr< MemoryBuffer > B, LLVMContext &C, SampleProfileFormat Format=SPF_None)
virtual ~SampleProfileReader ()=default
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.
LLVM_ABI void dumpFunctionProfile (const FunctionSamples &FS, raw_ostream &OS=dbgs())
Print the profile for FunctionSamples on stream OS.
LLVM_ABI void dump (raw_ostream &OS=dbgs())
Print all the profiles on stream OS.
LLVM_ABI 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.
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)
Protected Member Functions
std::error_code readSecHdrTableEntry (uint64_t Idx)
std::error_code readSecHdrTable ()
std::error_code readFuncMetadata (bool ProfileHasAttribute, DenseSet< FunctionSamples * > &Profiles)
std::error_code readFuncMetadata (bool ProfileHasAttribute)
std::error_code readFuncMetadata (bool ProfileHasAttribute, FunctionSamples *FProfile)
std::error_code readFuncOffsetTable ()
std::error_code readFuncProfiles ()
std::error_code readFuncProfiles (const DenseSet< StringRef > &FuncsToUse, SampleProfileMap &Profiles)
std::error_code readNameTableSec (bool IsMD5, bool FixedLengthMD5)
std::error_code readCSNameTableSec ()
std::error_code readProfileSymbolList ()
std::error_code readHeader () override
Read and validate the file header.
std::error_code verifySPMagic (uint64_t Magic) override=0
virtual std::error_code readOneSection (const uint8_t *Start, uint64_t Size, const SecHdrTableEntry &Entry)
virtual std::error_code readCustomSection (const SecHdrTableEntry &Entry)=0
bool useFuncOffsetList () const
Determine which container readFuncOffsetTable() should populate, the list FuncOffsetList or the map FuncOffsetTable.
Protected Member Functions inherited from llvm::sampleprof::SampleProfileReaderBinary
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 readFuncProfile (const uint8_t *Start, SampleProfileMap &Profiles)
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< FunctionId > 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.
std::error_code readCallsiteVTableProf (FunctionSamples &FProfile)
Read all virtual functions' vtable access counts for FProfile.
std::error_code readVTableTypeCountMap (TypeCountMap &M)
Read bytes from the input buffer pointed by Data and decode them into M.
Protected Member Functions inherited from llvm::sampleprof::SampleProfileReader
LLVM_ABI void computeSummary ()
Compute summary for this profile.
Protected Attributes
std::vector< SecHdrTableEntry > SecHdrTable
std::unique_ptr< ProfileSymbolList > ProfSymList
DenseMap< hash_code, uint64_t > FuncOffsetTable
The table mapping from a function context's MD5 to the offset of its FunctionSample towards file start.
std::vector< std::pair< SampleContext, uint64_t > > FuncOffsetList
The list version of FuncOffsetTable.
DenseSet< StringRef > FuncsToUse
The set containing the functions to use when compiling a module.
Protected Attributes inherited from llvm::sampleprof::SampleProfileReaderBinary
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< FunctionId > NameTable
Function name table.
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.
Protected Attributes inherited from llvm::sampleprof::SampleProfileReader
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.
bool ReadVTableProf = false
If true, the profile has vtable profiles and reader should decode them to parse profiles correctly.
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.
Additional Inherited Members
Static Public Member Functions inherited from llvm::sampleprof::SampleProfileReader
static LLVM_ABI 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 LLVM_ABI 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.
Static Protected Member Functions inherited from llvm::sampleprof::SampleProfileReader
static std::unique_ptr< ProfileSummary > takeSummary (SampleProfileReader &Reader)
Take ownership of the summary of this reader.

SampleProfileReaderExtBinaryBase/SampleProfileWriterExtBinaryBase defines the basic structure of the extensible binary format.

The format is organized in sections except the magic and version number at the beginning. There is a section table before all the sections, and each entry in the table describes the entry type, start, size and attributes. The format in each section is defined by the section itself.

It is easy to add a new section while maintaining the backward compatibility of the profile. Nothing extra needs to be done. If we want to extend an existing section, like add cache misses information in addition to the sample count in the profile body, we can add a new section with the extension and retire the existing section, and we could choose to keep the parser of the old section if we want the reader to be able to read both new and old format profile.

SampleProfileReaderExtBinary/SampleProfileWriterExtBinary define the commonly used sections of a profile in extensible binary format. It is possible to define other types of profile inherited from SampleProfileReaderExtBinaryBase/SampleProfileWriterExtBinaryBase.

Definition at line 778 of file SampleProfReader.h.

collectFuncsFromModule()

bool SampleProfileReaderExtBinaryBase::collectFuncsFromModule ( ) overridevirtual

dumpSectionInfo()

bool SampleProfileReaderExtBinaryBase::dumpSectionInfo ( raw_ostream & OS = dbgs()) overridevirtual

getFileSize()

uint64_t SampleProfileReaderExtBinaryBase::getFileSize ( )

getProfileSymbolList()

std::unique_ptr< ProfileSymbolList > llvm::sampleprof::SampleProfileReaderExtBinaryBase::getProfileSymbolList ( ) inlineoverridevirtual

getSectionSize()

readCSNameTableSec()

std::error_code SampleProfileReaderExtBinaryBase::readCSNameTableSec ( ) protected

Definition at line 1333 of file SampleProfReader.cpp.

References llvm::sampleprof::SampleProfileReaderBinary::CSNameTable, I, llvm::illegal_line_offset, isOffsetLegal(), llvm::sampleprof::SampleProfileReaderBinary::MD5SampleContextStart, llvm::sampleprof::SampleProfileReaderBinary::MD5SampleContextTable, llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::sampleprof::SampleProfileReaderBinary::readNumber(), llvm::sampleprof::SampleProfileReaderBinary::readStringFromTable(), Size, and llvm::success.

Referenced by readOneSection().

readCustomSection()

virtual std::error_code llvm::sampleprof::SampleProfileReaderExtBinaryBase::readCustomSection ( const SecHdrTableEntry & Entry) protectedpure virtual

readFuncMetadata() [1/3]

std::error_code SampleProfileReaderExtBinaryBase::readFuncMetadata ( bool ProfileHasAttribute) protected

readFuncMetadata() [2/3]

std::error_code SampleProfileReaderExtBinaryBase::readFuncMetadata ( bool ProfileHasAttribute, DenseSet< FunctionSamples * > & Profiles ) protected

Definition at line 1433 of file SampleProfReader.cpp.

References assert(), llvm::sampleprof::SampleProfileReaderBinary::Data, llvm::sampleprof::SampleProfileReaderBinary::End, llvm::sampleprof::SampleProfileReader::FuncMetadataIndex, llvm::sampleprof::SampleProfileReader::ProfileHasAttribute, llvm::sampleprof::SampleProfileReader::Profiles, readFuncMetadata(), and llvm::success.

Referenced by readFuncMetadata(), readFuncMetadata(), readFuncMetadata(), and readOneSection().

readFuncMetadata() [3/3]

std::error_code SampleProfileReaderExtBinaryBase::readFuncMetadata ( bool ProfileHasAttribute, FunctionSamples * FProfile ) protected

Definition at line 1377 of file SampleProfReader.cpp.

References llvm::sampleprof::SampleProfileReaderBinary::Data, llvm::sampleprof::SampleProfileReaderBinary::End, llvm::sampleprof::FunctionSamples::functionSamplesAt(), llvm::sampleprof::FunctionSamples::getContext(), llvm::sampleprof::SampleProfileReader::ProfileHasAttribute, llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::sampleprof::SampleProfileReader::ProfileIsProbeBased, readFuncMetadata(), llvm::sampleprof::SampleProfileReaderBinary::readNumber(), llvm::sampleprof::SampleProfileReaderBinary::readSampleContextFromTable(), llvm::sampleprof::SampleContext::setAllAttributes(), llvm::sampleprof::FunctionSamples::setFunctionHash(), and llvm::success.

readFuncOffsetTable()

std::error_code SampleProfileReaderExtBinaryBase::readFuncOffsetTable ( ) protected

readFuncProfiles() [1/2]

std::error_code SampleProfileReaderExtBinaryBase::readFuncProfiles ( ) protected

Definition at line 1107 of file SampleProfReader.cpp.

References assert(), collectFuncsFromModule(), llvm::sampleprof::SampleProfileReader::CSProfileCount, llvm::sampleprof::SampleProfileReaderBinary::Data, llvm::sampleprof::SampleProfileReaderBinary::End, FuncsToUse, llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::sampleprof::SampleProfileReader::Profiles, llvm::sampleprof::SampleProfileReaderBinary::readFuncProfile(), readFuncProfiles(), and llvm::success.

Referenced by readFuncProfiles(), and readOneSection().

readFuncProfiles() [2/2]

Definition at line 1016 of file SampleProfReader.cpp.

References assert(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::count(), llvm::sampleprof::SampleProfileReaderBinary::Data, FuncOffsetList, FuncOffsetTable, FuncsToUse, llvm::sampleprof::SampleContext::getFunction(), llvm::GlobalValue::getGUIDAssumingExternalLinkage(), llvm::sampleprof::FunctionId::getHashCode(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), llvm::sampleprof::SampleContext::isPrefixOf(), llvm::sampleprof::MD5Hash(), llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::sampleprof::SampleProfileReader::Profiles, llvm::sampleprof::SampleProfileReaderBinary::readFuncProfile(), llvm::sampleprof::SampleProfileReader::Remapper, llvm::sampleprof::FunctionId::stringRef(), llvm::success, useFuncOffsetList(), and llvm::sampleprof::SampleProfileReader::useMD5().

readHeader()

std::error_code SampleProfileReaderExtBinaryBase::readHeader ( ) overrideprotectedvirtual

readImpl()

std::error_code SampleProfileReaderExtBinaryBase::readImpl ( ) overridevirtual

Read sample profiles in extensible format from the associated file.

Reimplemented from llvm::sampleprof::SampleProfileReaderBinary.

Definition at line 1175 of file SampleProfReader.cpp.

References llvm::sampleprof::SampleProfileReader::Buffer, llvm::sampleprof::SampleProfileReaderBinary::Data, llvm::sampleprof::SampleProfileReaderBinary::End, llvm::sampleprof::hasSecFlag(), llvm::malformed, readOneSection(), llvm::sampleprof::SecFlagCompress, llvm::sampleprof::SecFlagFlat, SecHdrTable, llvm::sampleprof::SampleProfileReader::SkipFlatProf, and llvm::success.

readNameTableSec()

std::error_code SampleProfileReaderExtBinaryBase::readNameTableSec ( bool IsMD5, bool FixedLengthMD5 ) protected

Definition at line 1274 of file SampleProfReader.cpp.

References assert(), llvm::sampleprof::SampleProfileReaderBinary::Data, llvm::sampleprof::SampleProfileReaderBinary::End, llvm::errs(), I, llvm::little, llvm::sampleprof::SampleProfileReaderBinary::MD5SampleContextStart, llvm::sampleprof::SampleProfileReaderBinary::MD5SampleContextTable, llvm::sampleprof::SampleProfileReaderBinary::NameTable, llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::support::endian::read(), llvm::sampleprof::SampleProfileReaderBinary::readNameTable(), llvm::sampleprof::SampleProfileReaderBinary::readNumber(), Size, llvm::success, llvm::truncated, and llvm::support::endian::write64le().

Referenced by readOneSection().

readOneSection()

Definition at line 841 of file SampleProfReader.cpp.

References assert(), llvm::sampleprof::SampleProfileReaderBinary::Data, llvm::sampleprof::SampleProfileReaderBinary::End, llvm::sampleprof::hasSecFlag(), llvm::sampleprof::FunctionSamples::HasUniqSuffix, llvm::sampleprof::SampleProfileReader::M, llvm::sampleprof::SampleProfileReader::ProfileHasAttribute, llvm::sampleprof::FunctionSamples::ProfileIsCS, llvm::sampleprof::SampleProfileReader::ProfileIsCS, llvm::sampleprof::FunctionSamples::ProfileIsFS, llvm::sampleprof::SampleProfileReader::ProfileIsFS, llvm::sampleprof::SampleProfileReader::ProfileIsMD5, llvm::sampleprof::FunctionSamples::ProfileIsPreInlined, llvm::sampleprof::SampleProfileReader::ProfileIsPreInlined, llvm::sampleprof::FunctionSamples::ProfileIsProbeBased, llvm::sampleprof::SampleProfileReader::ProfileIsProbeBased, llvm::sampleprof::SampleProfileReader::ProfileSecRange, readCSNameTableSec(), readCustomSection(), readFuncMetadata(), readFuncOffsetTable(), readFuncProfiles(), readNameTableSec(), readProfileSymbolList(), llvm::sampleprof::SampleProfileReaderBinary::readSummary(), llvm::sampleprof::SampleProfileReader::ReadVTableProf, llvm::sampleprof::SecCSNameTable, llvm::sampleprof::SecFlagFixedLengthMD5, llvm::sampleprof::SecFlagFSDiscriminator, llvm::sampleprof::SecFlagFullContext, llvm::sampleprof::SecFlagHasAttribute, llvm::sampleprof::SecFlagHasVTableTypeProf, llvm::sampleprof::SecFlagIsPreInlined, llvm::sampleprof::SecFlagIsProbeBased, llvm::sampleprof::SecFlagMD5Name, llvm::sampleprof::SecFlagOrdered, llvm::sampleprof::SecFlagPartial, llvm::sampleprof::SecFlagUniqSuffix, llvm::sampleprof::SecFuncMetadata, llvm::sampleprof::SecFuncOffsetTable, llvm::sampleprof::SecLBRProfile, llvm::sampleprof::SecNameTable, llvm::sampleprof::SecProfileSymbolList, llvm::sampleprof::SecProfSummary, Size, llvm::success, and llvm::sampleprof::SampleProfileReader::Summary.

Referenced by readImpl(), and verifySPMagic().

readProfileSymbolList()

std::error_code SampleProfileReaderExtBinaryBase::readProfileSymbolList ( ) protected

readSecHdrTable()

std::error_code SampleProfileReaderExtBinaryBase::readSecHdrTable ( ) protected

readSecHdrTableEntry()

std::error_code SampleProfileReaderExtBinaryBase::readSecHdrTableEntry ( uint64_t Idx) protected

useFuncOffsetList()

bool SampleProfileReaderExtBinaryBase::useFuncOffsetList ( ) const protected

verifySPMagic()

std::error_code llvm::sampleprof::SampleProfileReaderExtBinaryBase::verifySPMagic ( uint64_t Magic) overrideprotectedpure virtual

FuncOffsetList

std::vector<std::pair<SampleContext, uint64_t> > llvm::sampleprof::SampleProfileReaderExtBinaryBase::FuncOffsetList protected

FuncOffsetTable

FuncsToUse

ProfSymList

std::unique_ptr<ProfileSymbolList> llvm::sampleprof::SampleProfileReaderExtBinaryBase::ProfSymList protected

SecHdrTable

std::vector<SecHdrTableEntry> llvm::sampleprof::SampleProfileReaderExtBinaryBase::SecHdrTable protected

The documentation for this class was generated from the following files: