LLVM 22.0.0git
llvm::sampleprof::SampleProfileReader Class Referenceabstract

Sample-based profile reader. More...

#include "llvm/ProfileData/SampleProfReader.h"

Inheritance diagram for llvm::sampleprof::SampleProfileReader:
[legend]

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.
LLVM_ABI 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.
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.
FunctionSamplesgetSamplesFor (const Function &F)
 Return the samples collected for function F.
FunctionSamplesgetSamplesFor (StringRef Fname)
 Return the samples collected for function F.
SampleProfileMapgetProfiles ()
 Return all the profiles.
void reportError (int64_t LineNumber, const Twine &Msg) const
 Report a parse error message.
ProfileSummarygetSummary () const
 Return the profile summary.
MemoryBuffergetBuffer () 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< ProfileSymbolListgetProfileSymbolList ()
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.
SampleProfileReaderItaniumRemappergetRemapper ()
void setModule (const Module *Mod)
void setFuncNameToProfNameMap (const HashKeyMap< std::unordered_map, FunctionId, FunctionId > &FPMap)

Static Public Member Functions

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.

Protected Member Functions

LLVM_ABI 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< ProfileSummarytakeSummary (SampleProfileReader &Reader)
 Take ownership of the summary of this reader.

Protected Attributes

SampleProfileMap Profiles
 Map every function to its associated profile.
LLVMContextCtx
 LLVM context used to emit diagnostics.
std::unique_ptr< MemoryBufferBuffer
 Memory buffer holding the profile file.
std::unique_ptr< ProfileSummarySummary
 Profile summary information.
std::unique_ptr< SampleProfileReaderItaniumRemapperRemapper
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 ModuleM = 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.

Detailed Description

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:

  • A list of functions included in the profile (mangled names).
  • For each function F:
    1. The total number of samples collected in F.
    2. The samples collected at each line in F. To provide some protection against source code shuffling, line numbers should be relative to the start of the function.

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 347 of file SampleProfReader.h.

Constructor & Destructor Documentation

◆ SampleProfileReader()

◆ ~SampleProfileReader()

virtual llvm::sampleprof::SampleProfileReader::~SampleProfileReader ( )
virtualdefault

Member Function Documentation

◆ collectFuncsFromModule()

virtual bool llvm::sampleprof::SampleProfileReader::collectFuncsFromModule ( )
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 406 of file SampleProfReader.h.

◆ computeSummary()

void SampleProfileReader::computeSummary ( )
protected

◆ create() [1/2]

ErrorOr< std::unique_ptr< SampleProfileReader > > SampleProfileReader::create ( std::unique_ptr< MemoryBuffer > & B,
LLVMContext & C,
vfs::FileSystem & FS,
FSDiscriminatorPass P = FSDiscriminatorPass::Base,
StringRef RemapFilename = "" )
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.

Parameters
BThe memory buffer to create the reader from (assumes ownership).
CThe LLVM context to use to emit diagnostics.
PThe FSDiscriminatorPass.
RemapFilenameThe file used for profile remapping.
Returns
an error code indicating the status of the created reader.

Definition at line 2104 of file SampleProfReader.cpp.

References B(), llvm::CallingConv::C, llvm::sampleprof::SampleProfileReaderItaniumRemapper::create(), llvm::StringRef::empty(), llvm::sampleprof::SampleProfileReaderExtBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderGCC::hasFormat(), llvm::sampleprof::SampleProfileReaderRawBinary::hasFormat(), llvm::sampleprof::SampleProfileReaderText::hasFormat(), P, and llvm::unrecognized_format.

◆ create() [2/2]

ErrorOr< std::unique_ptr< SampleProfileReader > > SampleProfileReader::create ( StringRef Filename,
LLVMContext & C,
vfs::FileSystem & FS,
FSDiscriminatorPass P = FSDiscriminatorPass::Base,
StringRef RemapFilename = "" )
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.

Parameters
FilenameThe file to open.
CThe LLVM context to use to emit diagnostics.
PThe FSDiscriminatorPass.
RemapFilenameThe file used for profile remapping.
Returns
an error code indicating the status of the created reader.

Definition at line 2033 of file SampleProfReader.cpp.

References llvm::CallingConv::C, create(), P, and llvm::setupMemoryBuffer().

Referenced by create(), and llvm::MIRProfileLoader::doInitialization().

◆ dump()

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, Profiles, and llvm::sampleprof::sortFuncProfiles().

◆ dumpFunctionProfile()

void SampleProfileReader::dumpFunctionProfile ( const FunctionSamples & FS,
raw_ostream & OS = dbgs() )

Print the profile for FunctionSamples on stream OS.

Dump the function profile for FName.

Parameters
FContextName + context of the function to print.
OSStream to emit the output to.

Definition at line 64 of file SampleProfReader.cpp.

Referenced by dump().

◆ dumpJson()

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, Profiles, and llvm::sampleprof::sortFuncProfiles().

◆ dumpSectionInfo()

virtual bool llvm::sampleprof::SampleProfileReader::dumpSectionInfo ( raw_ostream & OS = dbgs())
inlinevirtual

Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.

Definition at line 501 of file SampleProfReader.h.

◆ getBuffer()

MemoryBuffer * llvm::sampleprof::SampleProfileReader::getBuffer ( ) const
inline

Definition at line 477 of file SampleProfReader.h.

References Buffer.

◆ getDiscriminatorMask()

uint32_t llvm::sampleprof::SampleProfileReader::getDiscriminatorMask ( ) const
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 367 of file SampleProfReader.h.

References assert(), llvm::getN1Bits(), MaskedBitFrom, and ProfileIsFS.

Referenced by llvm::sampleprof::SampleProfileReaderBinary::readCallsiteVTableProf(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and llvm::sampleprof::SampleProfileReaderBinary::readProfile().

◆ getFormat()

SampleProfileFormat llvm::sampleprof::SampleProfileReader::getFormat ( ) const
inline

Return the profile format.

Definition at line 480 of file SampleProfReader.h.

References Format.

◆ getNameTable()

virtual std::vector< FunctionId > * llvm::sampleprof::SampleProfileReader::getNameTable ( )
inlinevirtual

It includes all the names that have samples either in outline instance or inline instance.

Reimplemented in llvm::sampleprof::SampleProfileReaderBinary.

Definition at line 500 of file SampleProfReader.h.

◆ getProfiles()

SampleProfileMap & llvm::sampleprof::SampleProfileReader::getProfiles ( )
inline

Return all the profiles.

Definition at line 450 of file SampleProfReader.h.

References Profiles.

◆ getProfileSymbolList()

virtual std::unique_ptr< ProfileSymbolList > llvm::sampleprof::SampleProfileReader::getProfileSymbolList ( )
inlinevirtual

Reimplemented in llvm::sampleprof::SampleProfileReaderExtBinaryBase.

Definition at line 494 of file SampleProfReader.h.

◆ getRemapper()

SampleProfileReaderItaniumRemapper * llvm::sampleprof::SampleProfileReader::getRemapper ( )
inline

Definition at line 516 of file SampleProfReader.h.

References Remapper.

◆ getSamplesFor() [1/2]

FunctionSamples * llvm::sampleprof::SampleProfileReader::getSamplesFor ( const Function & F)
inline

Return the samples collected for function F.

Definition at line 415 of file SampleProfReader.h.

References F, llvm::sampleprof::FunctionSamples::getCanonicalFnName(), and getSamplesFor().

Referenced by getSamplesFor().

◆ getSamplesFor() [2/2]

FunctionSamples * llvm::sampleprof::SampleProfileReader::getSamplesFor ( StringRef Fname)
inline

Return the samples collected for function F.

Definition at line 424 of file SampleProfReader.h.

References FuncNameToProfNameMap, Profiles, and Remapper.

◆ getSummary()

ProfileSummary & llvm::sampleprof::SampleProfileReader::getSummary ( ) const
inline

Return the profile summary.

Definition at line 475 of file SampleProfReader.h.

References Summary.

◆ hasUniqSuffix()

virtual bool llvm::sampleprof::SampleProfileReader::hasUniqSuffix ( )
inlinevirtual

Return whether any name in the profile contains ".__uniq." suffix.

Definition at line 514 of file SampleProfReader.h.

◆ profileIsCS()

bool llvm::sampleprof::SampleProfileReader::profileIsCS ( ) const
inline

Whether input profile is fully context-sensitive.

Definition at line 486 of file SampleProfReader.h.

References ProfileIsCS.

◆ profileIsFS()

bool llvm::sampleprof::SampleProfileReader::profileIsFS ( ) const
inline

Whether input profile is flow-sensitive.

Definition at line 492 of file SampleProfReader.h.

References ProfileIsFS.

◆ profileIsPreInlined()

bool llvm::sampleprof::SampleProfileReader::profileIsPreInlined ( ) const
inline

Whether input profile contains ShouldBeInlined contexts.

Definition at line 489 of file SampleProfReader.h.

References ProfileIsPreInlined.

◆ profileIsProbeBased()

bool llvm::sampleprof::SampleProfileReader::profileIsProbeBased ( ) const
inline

Whether input profile is based on pseudo probes.

Definition at line 483 of file SampleProfReader.h.

References ProfileIsProbeBased.

◆ read() [1/3]

std::error_code llvm::sampleprof::SampleProfileReader::read ( )
inline

The interface to read sample profiles from the associated file.

Definition at line 375 of file SampleProfReader.h.

References Ctx, readImpl(), Remapper, llvm::success, llvm::sampleprof::FunctionSamples::UseMD5, and useMD5().

Referenced by read().

◆ read() [2/3]

std::error_code llvm::sampleprof::SampleProfileReader::read ( const DenseSet< StringRef > & FuncsToUse)
inline

Read sample profiles for the given functions.

Definition at line 385 of file SampleProfReader.h.

References F, llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), Profiles, read(), and llvm::success.

◆ read() [3/3]

virtual std::error_code llvm::sampleprof::SampleProfileReader::read ( const DenseSet< StringRef > & FuncsToUse,
SampleProfileMap & Profiles )
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 554 of file SampleProfReader.h.

References llvm::not_implemented, and Profiles.

◆ readHeader()

virtual std::error_code llvm::sampleprof::SampleProfileReader::readHeader ( )
pure virtual

◆ readImpl()

virtual std::error_code llvm::sampleprof::SampleProfileReader::readImpl ( )
pure virtual

◆ reportError()

◆ setDiscriminatorMaskedBitFrom()

void llvm::sampleprof::SampleProfileReader::setDiscriminatorMaskedBitFrom ( FSDiscriminatorPass P)
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 361 of file SampleProfReader.h.

References llvm::getFSPassBitEnd(), MaskedBitFrom, and P.

◆ setFuncNameToProfNameMap()

void llvm::sampleprof::SampleProfileReader::setFuncNameToProfNameMap ( const HashKeyMap< std::unordered_map, FunctionId, FunctionId > & FPMap)
inline

Definition at line 520 of file SampleProfReader.h.

References FuncNameToProfNameMap.

◆ setModule()

void llvm::sampleprof::SampleProfileReader::setModule ( const Module * Mod)
inline

Definition at line 518 of file SampleProfReader.h.

References M, and llvm::Mod.

◆ setProfileUseMD5()

virtual void llvm::sampleprof::SampleProfileReader::setProfileUseMD5 ( )
inlinevirtual

Force the profile to use MD5 in Sample contexts, even if function names are present.

Reimplemented in llvm::sampleprof::SampleProfileReaderText.

Definition at line 508 of file SampleProfReader.h.

References ProfileIsMD5.

◆ setSkipFlatProf()

void llvm::sampleprof::SampleProfileReader::setSkipFlatProf ( bool Skip)
inline

Don't read profile without context if the flag is set.

Definition at line 511 of file SampleProfReader.h.

References SkipFlatProf.

◆ takeSummary()

std::unique_ptr< ProfileSummary > llvm::sampleprof::SampleProfileReader::takeSummary ( SampleProfileReader & Reader)
inlinestaticprotected

Take ownership of the summary of this reader.

Definition at line 544 of file SampleProfReader.h.

References SampleProfileReader(), and Summary.

◆ useMD5()

bool llvm::sampleprof::SampleProfileReader::useMD5 ( ) const
inline

Member Data Documentation

◆ Buffer

◆ CSProfileCount

uint32_t llvm::sampleprof::SampleProfileReader::CSProfileCount = 0
protected

◆ Ctx

LLVMContext& llvm::sampleprof::SampleProfileReader::Ctx
protected

◆ Format

◆ FuncMetadataIndex

std::unordered_map<uint64_t, std::pair<const uint8_t *, const uint8_t *> > llvm::sampleprof::SampleProfileReader::FuncMetadataIndex
protected

◆ FuncNameToProfNameMap

const HashKeyMap<std::unordered_map, FunctionId, FunctionId>* llvm::sampleprof::SampleProfileReader::FuncNameToProfNameMap = nullptr
protected

Definition at line 565 of file SampleProfReader.h.

Referenced by getSamplesFor(), and setFuncNameToProfNameMap().

◆ M

const Module* llvm::sampleprof::SampleProfileReader::M = nullptr
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 602 of file SampleProfReader.h.

Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::collectFuncsFromModule(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), llvm::sampleprof::SampleProfileReaderBinary::readVTableTypeCountMap(), and setModule().

◆ MaskedBitFrom

uint32_t llvm::sampleprof::SampleProfileReader::MaskedBitFrom = 31
protected

Zero out the discriminator bits higher than bit MaskedBitFrom (0 based).

The default is to keep all the bits.

Definition at line 606 of file SampleProfReader.h.

Referenced by getDiscriminatorMask(), and setDiscriminatorMaskedBitFrom().

◆ ProfileHasAttribute

◆ ProfileIsCS

◆ ProfileIsFS

bool llvm::sampleprof::SampleProfileReader::ProfileIsFS = false
protected

◆ ProfileIsMD5

bool llvm::sampleprof::SampleProfileReader::ProfileIsMD5 = false
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 610 of file SampleProfReader.h.

Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), setProfileUseMD5(), and useMD5().

◆ ProfileIsPreInlined

bool llvm::sampleprof::SampleProfileReader::ProfileIsPreInlined = false
protected

Whether function profile contains ShouldBeInlined contexts.

Definition at line 584 of file SampleProfReader.h.

Referenced by profileIsPreInlined(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection().

◆ ProfileIsProbeBased

bool llvm::sampleprof::SampleProfileReader::ProfileIsProbeBased = false
protected

◆ Profiles

◆ ProfileSecRange

std::pair<const uint8_t *, const uint8_t *> llvm::sampleprof::SampleProfileReader::ProfileSecRange
protected

◆ ReadVTableProf

bool llvm::sampleprof::SampleProfileReader::ReadVTableProf = false
protected

If true, the profile has vtable profiles and reader should decode them to parse profiles correctly.

Definition at line 594 of file SampleProfReader.h.

Referenced by llvm::sampleprof::SampleProfileReaderBinary::readCallsiteVTableProf(), llvm::sampleprof::SampleProfileReaderExtBinaryBase::readOneSection(), and llvm::sampleprof::SampleProfileReaderBinary::readProfile().

◆ Remapper

◆ SkipFlatProf

bool llvm::sampleprof::SampleProfileReader::SkipFlatProf = false
protected

If SkipFlatProf is true, skip functions marked with !Flat in text mode or sections with SecFlagFlat flag in ExtBinary mode.

Definition at line 614 of file SampleProfReader.h.

Referenced by llvm::sampleprof::SampleProfileReaderExtBinaryBase::readImpl(), llvm::sampleprof::SampleProfileReaderText::readImpl(), and setSkipFlatProf().

◆ Summary

std::unique_ptr<ProfileSummary> llvm::sampleprof::SampleProfileReader::Summary
protected

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