LLVM 22.0.0git
llvm::sampleprof::SampleRecord Class Reference

Representation of a single sample record. More...

#include "llvm/ProfileData/SampleProf.h"

Classes

struct  CallTargetComparator

Public Types

using CallTarget = std::pair<FunctionId, uint64_t>
using SortedCallTargetSet = std::set<CallTarget, CallTargetComparator>
using CallTargetMap = std::unordered_map<FunctionId, uint64_t>

Public Member Functions

 SampleRecord ()=default
sampleprof_error addSamples (uint64_t S, uint64_t Weight=1)
 Increment the number of samples for this record by S.
uint64_t removeSamples (uint64_t S)
 Decrease the number of samples for this record by S.
sampleprof_error addCalledTarget (FunctionId F, uint64_t S, uint64_t Weight=1)
 Add called function F with samples S.
uint64_t removeCalledTarget (FunctionId F)
 Remove called function from the call target map.
bool hasCalls () const
 Return true if this sample record contains function calls.
uint64_t getSamples () const
const CallTargetMapgetCallTargets () const
const SortedCallTargetSet getSortedCallTargets () const
uint64_t getCallTargetSum () const
LLVM_ABI sampleprof_error merge (const SampleRecord &Other, uint64_t Weight=1)
 Merge the samples in Other into this record.
LLVM_ABI void print (raw_ostream &OS, unsigned Indent) const
 Print the sample record to the stream OS indented by Indent.
LLVM_ABI void dump () const
LLVM_ABI std::error_code serialize (raw_ostream &OS, const MapVector< FunctionId, uint32_t > &NameTable) const
 Serialize the sample record to the output stream using ULEB128 encoding.
bool operator== (const SampleRecord &Other) const
bool operator!= (const SampleRecord &Other) const

Static Public Member Functions

static const SortedCallTargetSet sortCallTargets (const CallTargetMap &Targets)
 Sort call targets in descending order of call frequency.
static const CallTargetMap adjustCallTargets (const CallTargetMap &Targets, float DistributionFactor)
 Prorate call targets by a distribution factor.

Detailed Description

Representation of a single sample record.

A sample record is represented by a positive integer value, which indicates how frequently was the associated line location executed.

Additionally, if the associated location contains a function call, the record will hold a list of all the possible called targets and the types for virtual table dispatches. For direct calls, this will be the exact function being invoked. For indirect calls (function pointers, virtual table dispatch), this will be a list of one or more functions. For virtual table dispatches, this record will also hold the type of the object.

Definition at line 350 of file SampleProf.h.

Member Typedef Documentation

◆ CallTarget

Definition at line 352 of file SampleProf.h.

◆ CallTargetMap

Definition at line 363 of file SampleProf.h.

◆ SortedCallTargetSet

Constructor & Destructor Documentation

◆ SampleRecord()

llvm::sampleprof::SampleRecord::SampleRecord ( )
default

Referenced by merge(), operator!=(), and operator==().

Member Function Documentation

◆ addCalledTarget()

sampleprof_error llvm::sampleprof::SampleRecord::addCalledTarget ( FunctionId F,
uint64_t S,
uint64_t Weight = 1 )
inline

Add called function F with samples S.

Optionally scale sample count S by Weight.

Sample counts accumulate using saturating arithmetic, to avoid wrapping around unsigned integers.

Definition at line 392 of file SampleProf.h.

References llvm::counter_overflow, F, llvm::SaturatingMultiplyAdd(), and llvm::success.

Referenced by merge().

◆ addSamples()

sampleprof_error llvm::sampleprof::SampleRecord::addSamples ( uint64_t S,
uint64_t Weight = 1 )
inline

Increment the number of samples for this record by S.

Optionally scale sample count S by Weight.

Sample counts accumulate using saturating arithmetic, to avoid wrapping around unsigned integers.

Definition at line 371 of file SampleProf.h.

References llvm::counter_overflow, llvm::SaturatingMultiplyAdd(), and llvm::success.

Referenced by merge().

◆ adjustCallTargets()

const CallTargetMap llvm::sampleprof::SampleRecord::adjustCallTargets ( const CallTargetMap & Targets,
float DistributionFactor )
inlinestatic

Prorate call targets by a distribution factor.

Definition at line 441 of file SampleProf.h.

◆ dump()

LLVM_DUMP_METHOD void SampleRecord::dump ( ) const

Definition at line 190 of file SampleProf.cpp.

References llvm::dbgs(), LLVM_DUMP_METHOD, and print().

◆ getCallTargets()

const CallTargetMap & llvm::sampleprof::SampleRecord::getCallTargets ( ) const
inline

◆ getCallTargetSum()

uint64_t llvm::sampleprof::SampleRecord::getCallTargetSum ( ) const
inline

Definition at line 423 of file SampleProf.h.

References I.

◆ getSamples()

uint64_t llvm::sampleprof::SampleRecord::getSamples ( ) const
inline

◆ getSortedCallTargets()

const SortedCallTargetSet llvm::sampleprof::SampleRecord::getSortedCallTargets ( ) const
inline

◆ hasCalls()

bool llvm::sampleprof::SampleRecord::hasCalls ( ) const
inline

Return true if this sample record contains function calls.

Definition at line 415 of file SampleProf.h.

Referenced by print().

◆ merge()

sampleprof_error SampleRecord::merge ( const SampleRecord & Other,
uint64_t Weight = 1 )

Merge the samples in Other into this record.

Optionally scale sample counts by Weight.

Definition at line 140 of file SampleProf.cpp.

References addCalledTarget(), addSamples(), I, llvm::mergeSampleProfErrors(), llvm::Other, and SampleRecord().

◆ operator!=()

bool llvm::sampleprof::SampleRecord::operator!= ( const SampleRecord & Other) const
inline

Definition at line 466 of file SampleProf.h.

References llvm::Other, and SampleRecord().

◆ operator==()

bool llvm::sampleprof::SampleRecord::operator== ( const SampleRecord & Other) const
inline

Definition at line 462 of file SampleProf.h.

References llvm::Other, and SampleRecord().

◆ print()

void SampleRecord::print ( raw_ostream & OS,
unsigned Indent ) const

Print the sample record to the stream OS indented by Indent.

Definition at line 179 of file SampleProf.cpp.

References getSortedCallTargets(), hasCalls(), and I.

Referenced by dump(), and llvm::sampleprof::operator<<().

◆ removeCalledTarget()

uint64_t llvm::sampleprof::SampleRecord::removeCalledTarget ( FunctionId F)
inline

Remove called function from the call target map.

Return the target sample count of the called function.

Definition at line 404 of file SampleProf.h.

References llvm::Count, F, and I.

◆ removeSamples()

uint64_t llvm::sampleprof::SampleRecord::removeSamples ( uint64_t S)
inline

Decrease the number of samples for this record by S.

Return the amout of samples actually decreased.

Definition at line 380 of file SampleProf.h.

◆ serialize()

std::error_code SampleRecord::serialize ( raw_ostream & OS,
const MapVector< FunctionId, uint32_t > & NameTable ) const

Serialize the sample record to the output stream using ULEB128 encoding.

The NameTable is used to map function names to their IDs.

Definition at line 150 of file SampleProf.cpp.

References llvm::encodeULEB128(), llvm::MapVector< KeyT, ValueT, MapType, VectorType >::end(), llvm::MapVector< KeyT, ValueT, MapType, VectorType >::find(), getCallTargets(), getSamples(), getSortedCallTargets(), llvm::size(), llvm::success, and llvm::truncated_name_table.

Referenced by llvm::sampleprof::SampleProfileWriterBinary::writeBody().

◆ sortCallTargets()

const SortedCallTargetSet llvm::sampleprof::SampleRecord::sortCallTargets ( const CallTargetMap & Targets)
inlinestatic

Sort call targets in descending order of call frequency.

Definition at line 432 of file SampleProf.h.

Referenced by getSortedCallTargets(), and GetSortedValueDataFromCallTargets().


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