LLVM 22.0.0git
|
Reader for the indexed binary instrprof format. More...
#include "llvm/ProfileData/InstrProfReader.h"
Public Member Functions | |
IndexedInstrProfReader (std::unique_ptr< MemoryBuffer > DataBuffer, std::unique_ptr< MemoryBuffer > RemappingBuffer=nullptr) | |
IndexedInstrProfReader (const IndexedInstrProfReader &)=delete | |
IndexedInstrProfReader & | operator= (const IndexedInstrProfReader &)=delete |
uint64_t | getVersion () const override |
Return the profile version. | |
bool | isIRLevelProfile () const override |
bool | hasCSIRLevelProfile () const override |
bool | instrEntryBBEnabled () const override |
bool | instrLoopEntriesEnabled () const override |
Return true if the profile instruments all loop entries. | |
bool | hasSingleByteCoverage () const override |
Return true if the profile has single byte counters representing coverage. | |
bool | functionEntryOnly () const override |
Return true if the profile only instruments function entries. | |
bool | hasMemoryProfile () const override |
Return true if profile includes a memory profile. | |
bool | hasTemporalProfile () const override |
Return true if this has a temporal profile. | |
InstrProfKind | getProfileKind () const override |
Returns a BitsetEnum describing the attributes of the indexed instr profile. | |
Error | readHeader () override |
Read the file header. | |
Error | readNextRecord (NamedInstrProfRecord &Record) override |
Read a single record. | |
Expected< NamedInstrProfRecord > | getInstrProfRecord (StringRef FuncName, uint64_t FuncHash, StringRef DeprecatedFuncName="", uint64_t *MismatchedFuncSum=nullptr) |
Return the NamedInstrProfRecord associated with FuncName and FuncHash. | |
Expected< memprof::MemProfRecord > | getMemProfRecord (uint64_t FuncNameHash) |
Return the memprof record for the function identified by llvm::md5(Name). | |
DenseMap< uint64_t, SmallVector< memprof::CallEdgeTy, 0 > > | getMemProfCallerCalleePairs () |
memprof::AllMemProfData | getAllMemProfData () const |
Error | getFunctionCounts (StringRef FuncName, uint64_t FuncHash, std::vector< uint64_t > &Counts) |
Fill Counts with the profile data for the given function name. | |
Error | getFunctionBitmap (StringRef FuncName, uint64_t FuncHash, BitVector &Bitmap) |
Fill Bitmap with the profile data for the given function name. | |
uint64_t | getMaximumFunctionCount (bool UseCS) |
Return the maximum of all known function counts. | |
void | setValueProfDataEndianness (llvm::endianness Endianness) |
InstrProfSymtab & | getSymtab () override |
Return the PGO symtab. | |
ProfileSummary & | getSummary (bool UseCS) |
Return the profile summary. | |
memprof::MemProfSummary * | getMemProfSummary () const |
Return the MemProf summary. Will be null if unavailable (version < 4). | |
memprof::DataAccessProfData * | getDataAccessProfileData () const |
Returns non-owned pointer to the data access profile data. | |
Error | readBinaryIds (std::vector< llvm::object::BuildID > &BinaryIds) override |
Read a list of binary ids. | |
Error | printBinaryIds (raw_ostream &OS) override |
Print binary ids. | |
![]() | |
InstrProfReader ()=default | |
virtual | ~InstrProfReader ()=default |
virtual Error | readHeader ()=0 |
Read the header. Required before reading first record. | |
virtual Error | readNextRecord (NamedInstrProfRecord &Record)=0 |
Read a single record. | |
virtual Error | readBinaryIds (std::vector< llvm::object::BuildID > &BinaryIds) |
Read a list of binary ids. | |
virtual Error | printBinaryIds (raw_ostream &OS) |
Print binary ids. | |
InstrProfIterator | begin () |
Iterator over profile data. | |
InstrProfIterator | end () |
virtual uint64_t | getVersion () const =0 |
Return the profile version. | |
virtual bool | isIRLevelProfile () const =0 |
virtual bool | hasCSIRLevelProfile () const =0 |
virtual bool | instrEntryBBEnabled () const =0 |
virtual bool | instrLoopEntriesEnabled () const =0 |
Return true if the profile instruments all loop entries. | |
virtual bool | hasSingleByteCoverage () const =0 |
Return true if the profile has single byte counters representing coverage. | |
virtual bool | functionEntryOnly () const =0 |
Return true if the profile only instruments function entries. | |
virtual bool | hasMemoryProfile () const =0 |
Return true if profile includes a memory profile. | |
virtual bool | hasTemporalProfile () const =0 |
Return true if this has a temporal profile. | |
virtual InstrProfKind | getProfileKind () const =0 |
Returns a BitsetEnum describing the attributes of the profile. | |
virtual InstrProfSymtab & | getSymtab ()=0 |
Return the PGO symtab. | |
LLVM_ABI void | accumulateCounts (CountSumOrPercent &Sum, bool IsCS) |
Compute the sum of counts and return in Sum. | |
bool | isEOF () |
Return true if the reader has finished reading the profile data. | |
bool | hasError () |
Return true if the reader encountered an error reading profiling data. | |
Error | getError () |
Get the current error. | |
virtual SmallVector< TemporalProfTraceTy > & | getTemporalProfTraces (std::optional< uint64_t > Weight={}) |
uint64_t | getTemporalProfTraceStreamSize () |
Static Public Member Functions | |
static bool | hasFormat (const MemoryBuffer &DataBuffer) |
Return true if the given buffer is in an indexed instrprof format. | |
static Expected< std::unique_ptr< IndexedInstrProfReader > > | create (const Twine &Path, vfs::FileSystem &FS, const Twine &RemappingPath="") |
Factory method to create an indexed reader. | |
static Expected< std::unique_ptr< IndexedInstrProfReader > > | create (std::unique_ptr< MemoryBuffer > Buffer, std::unique_ptr< MemoryBuffer > RemappingBuffer=nullptr) |
![]() | |
static LLVM_ABI Expected< std::unique_ptr< InstrProfReader > > | create (const Twine &Path, vfs::FileSystem &FS, const InstrProfCorrelator *Correlator=nullptr, const object::BuildIDFetcher *BIDFetcher=nullptr, const InstrProfCorrelator::ProfCorrelatorKind BIDFetcherCorrelatorKind=InstrProfCorrelator::ProfCorrelatorKind::NONE, std::function< void(Error)> Warn=nullptr) |
Factory method to create an appropriately typed reader for the given instrprof file. | |
static LLVM_ABI Expected< std::unique_ptr< InstrProfReader > > | create (std::unique_ptr< MemoryBuffer > Buffer, const InstrProfCorrelator *Correlator=nullptr, const object::BuildIDFetcher *BIDFetcher=nullptr, const InstrProfCorrelator::ProfCorrelatorKind BIDFetcherCorrelatorKind=InstrProfCorrelator::ProfCorrelatorKind::NONE, std::function< void(Error)> Warn=nullptr) |
Additional Inherited Members | |
![]() | |
Error | error (instrprof_error Err, const std::string &ErrMsg="") |
Set the current error and return same. | |
Error | error (Error &&E) |
Error | success () |
Clear the current error and return a successful one. | |
![]() | |
std::unique_ptr< InstrProfSymtab > | Symtab |
SmallVector< TemporalProfTraceTy > | TemporalProfTraces |
A list of temporal profile traces. | |
uint64_t | TemporalProfTraceStreamSize = 0 |
The total number of temporal profile traces seen. | |
Reader for the indexed binary instrprof format.
Definition at line 744 of file InstrProfReader.h.
|
inline |
Definition at line 776 of file InstrProfReader.h.
References llvm::move().
|
delete |
|
static |
Factory method to create an indexed reader.
Definition at line 203 of file InstrProfReader.cpp.
References create(), llvm::setupMemoryBuffer(), and llvm::Twine::str().
Referenced by annotateAllFunctions(), create(), llvm::coverage::CoverageMapping::load(), and llvm::MemProfUsePass::run().
|
static |
Definition at line 225 of file InstrProfReader.cpp.
References llvm::bad_magic, hasFormat(), and initializeReader().
|
inlineoverridevirtual |
Return true if the profile only instruments function entries.
Implements llvm::InstrProfReader.
Definition at line 803 of file InstrProfReader.h.
References Index.
|
inline |
Definition at line 848 of file InstrProfReader.h.
References llvm::IndexedMemProfReader::getAllMemProfData().
|
inline |
Returns non-owned pointer to the data access profile data.
Will be null if unavailable (version < 4).
Definition at line 910 of file InstrProfReader.h.
References llvm::IndexedMemProfReader::getDataAccessProfileData().
Error IndexedInstrProfReader::getFunctionBitmap | ( | StringRef | FuncName, |
uint64_t | FuncHash, | ||
BitVector & | Bitmap | ||
) |
Fill Bitmap with the profile data for the given function name.
Definition at line 1583 of file InstrProfReader.cpp.
References llvm::support::aligned, llvm::BitVector::apply(), assert(), error, getInstrProfRecord(), I, llvm::little, N, llvm::support::endian::read(), llvm::BitVector::resize(), llvm::InstrProfReader::success(), and X.
Error IndexedInstrProfReader::getFunctionCounts | ( | StringRef | FuncName, |
uint64_t | FuncHash, | ||
std::vector< uint64_t > & | Counts | ||
) |
Fill Counts with the profile data for the given function name.
Definition at line 1572 of file InstrProfReader.cpp.
References error, getInstrProfRecord(), and llvm::InstrProfReader::success().
Expected< NamedInstrProfRecord > IndexedInstrProfReader::getInstrProfRecord | ( | StringRef | FuncName, |
uint64_t | FuncHash, | ||
StringRef | DeprecatedFuncName = "" , |
||
uint64_t * | MismatchedFuncSum = nullptr |
||
) |
Return the NamedInstrProfRecord associated with FuncName and FuncHash.
When return a hash_mismatch error and MismatchedFuncSum is not nullptr, the sum of all counters in the mismatched function will be set to MismatchedFuncSum. If there are multiple instances of mismatched functions, MismatchedFuncSum returns the maximum. If FuncName
is not found, try to lookup DeprecatedFuncName
to handle profiles built by older compilers.
Definition at line 1372 of file InstrProfReader.cpp.
References llvm::Data, error, llvm::handleErrors(), llvm::NamedInstrProfRecord::hasCSFlagInHash(), llvm::hash_mismatch, I, if(), llvm::Error::success(), and llvm::unknown_function.
Referenced by getFunctionBitmap(), and getFunctionCounts().
Return the maximum of all known function counts.
UseCS
indicates whether to use the context-sensitive count.
Definition at line 862 of file InstrProfReader.h.
References assert().
|
inline |
Definition at line 844 of file InstrProfReader.h.
References llvm::IndexedMemProfReader::getMemProfCallerCalleePairs().
|
inline |
Return the memprof record for the function identified by llvm::md5(Name).
Definition at line 839 of file InstrProfReader.h.
References llvm::IndexedMemProfReader::getMemProfRecord().
|
inline |
Return the MemProf summary. Will be null if unavailable (version < 4).
Definition at line 904 of file InstrProfReader.h.
References llvm::IndexedMemProfReader::getSummary().
|
inlineoverridevirtual |
Returns a BitsetEnum describing the attributes of the indexed instr profile.
Implements llvm::InstrProfReader.
Definition at line 813 of file InstrProfReader.h.
References Index.
|
inline |
Return the profile summary.
UseCS
indicates whether to use the context-sensitive summary.
Definition at line 893 of file InstrProfReader.h.
References assert().
|
overridevirtual |
Return the PGO symtab.
There are three different readers: Raw, Text, and Indexed profile readers. The first two types of readers are used only by llvm-profdata tool, while the indexed profile reader is also used by llvm-cov tool and the compiler ( backend or frontend). Since creating PGO symtab can create significant runtime and memory overhead (as it touches data for the whole program), InstrProfSymtab for the indexed profile reader should be created on demand and it is recommended to be only used for dumping purpose with llvm-proftool, not with the compiler.
Implements llvm::InstrProfReader.
Definition at line 1351 of file InstrProfReader.cpp.
References llvm::consumeError(), error, llvm::InstrProfReader::Symtab, and llvm::InstrProfError::take().
|
inlineoverridevirtual |
Return the profile version.
Implements llvm::InstrProfReader.
Definition at line 785 of file InstrProfReader.h.
References Index.
|
inlineoverridevirtual |
Implements llvm::InstrProfReader.
Definition at line 787 of file InstrProfReader.h.
References Index.
|
static |
Return true if the given buffer is in an indexed instrprof format.
Definition at line 1169 of file InstrProfReader.cpp.
References llvm::MemoryBuffer::getBufferSize(), llvm::MemoryBuffer::getBufferStart(), and llvm::IndexedInstrProf::Magic.
Referenced by llvm::InstrProfReader::create(), and create().
|
inlineoverridevirtual |
Return true if profile includes a memory profile.
Implements llvm::InstrProfReader.
Definition at line 805 of file InstrProfReader.h.
References Index.
|
inlineoverridevirtual |
Return true if the profile has single byte counters representing coverage.
Implements llvm::InstrProfReader.
Definition at line 799 of file InstrProfReader.h.
References Index.
|
inlineoverridevirtual |
Return true if this has a temporal profile.
Implements llvm::InstrProfReader.
Definition at line 807 of file InstrProfReader.h.
References Index.
|
inlineoverridevirtual |
Implements llvm::InstrProfReader.
Definition at line 791 of file InstrProfReader.h.
References Index.
|
inlineoverridevirtual |
Return true if the profile instruments all loop entries.
Implements llvm::InstrProfReader.
Definition at line 795 of file InstrProfReader.h.
References Index.
|
inlineoverridevirtual |
Implements llvm::InstrProfReader.
Definition at line 786 of file InstrProfReader.h.
References Index.
|
delete |
|
overridevirtual |
Print binary ids.
Reimplemented from llvm::InstrProfReader.
Definition at line 1631 of file InstrProfReader.cpp.
References OS, printBinaryIdsInternal(), readBinaryIds(), and llvm::Error::success().
|
overridevirtual |
Read a list of binary ids.
Reimplemented from llvm::InstrProfReader.
Definition at line 1625 of file InstrProfReader.cpp.
References llvm::little, and readBinaryIdsInternal().
Referenced by printBinaryIds().
|
overridevirtual |
Read the file header.
Implements llvm::InstrProfReader.
Definition at line 1234 of file InstrProfReader.cpp.
References llvm::bad_header, llvm::IndexedMemProfReader::deserialize(), error, llvm::IndexedInstrProf::Last, llvm::malformed, Ptr, llvm::IndexedInstrProf::Header::readFromBuffer(), llvm::InstrProfReader::success(), llvm::InstrProfReader::TemporalProfTraces, llvm::InstrProfReader::TemporalProfTraceStreamSize, llvm::truncated, and llvm::unsupported_hash_type.
|
overridevirtual |
Read a single record.
Implements llvm::InstrProfReader.
Definition at line 1610 of file InstrProfReader.cpp.
References llvm::Data, error, and llvm::InstrProfReader::success().
|
inline |
Definition at line 882 of file InstrProfReader.h.
References Index.