13#ifndef LLVM_PROFILEDATA_MEMPROFRADIXTREE_H
14#define LLVM_PROFILEDATA_MEMPROFRADIXTREE_H
41 auto Iter =
Map.find(Id);
42 if (Iter ==
Map.end()) {
68 std::vector<Frame> Frames;
69 auto CSIter =
Map.find(CSId);
70 if (CSIter ==
Map.end()) {
74 Frames.reserve(CS.
size());
110 std::vector<Frame> Frames;
112 const unsigned char *Ptr =
117 Frames.reserve(NumFrames);
118 for (; NumFrames; --NumFrames) {
123 if (
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) < 0) {
129 assert(
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) >= 0);
159 unsigned RadixTreeSize)
164 const unsigned char *Ptr =
171 for (; NumFrames; --NumFrames) {
176 if (
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) < 0) {
182 assert(
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) >= 0);
200 CalleeGUID = CallerGUID;
234template <
typename FrameIdTy>
237 &MemProfCallStackData);
296 std::vector<LinearFrameId> RadixArray;
319 std::vector<LinearCallStackId> Indexes;
321 using CSIdPair = std::pair<CallStackId, llvm::SmallVector<FrameIdTy>>;
336 &&MemProfCallStackData,
343 return std::move(CallStackPos);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements the BitVector class.
#define LLVM_TEMPLATE_ABI
Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
Get the array size.
This class implements a map that also provides access to all stored values in a deterministic order.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An efficient, type-erasing, non-owning reference to a callable.
void build(llvm::MapVector< CallStackId, llvm::SmallVector< FrameIdTy > > &&MemProfCallStackData, const llvm::DenseMap< FrameIdTy, LinearFrameId > *MemProfFrameIndexes, llvm::DenseMap< FrameIdTy, FrameStat > &FrameHistogram)
CallStackRadixTreeBuilder()=default
ArrayRef< LinearFrameId > getRadixArray() const
llvm::DenseMap< CallStackId, LinearCallStackId > takeCallStackPos()
Helper class to iterate through stack ids in both metadata (memprof MIB and callsite) and the corresp...
uint32_t LinearCallStackId
template class LLVM_TEMPLATE_ABI CallStackRadixTreeBuilder< FrameId >
template class LLVM_TEMPLATE_ABI CallStackRadixTreeBuilder< LinearFrameId >
llvm::DenseMap< FrameIdTy, FrameStat > computeFrameHistogram(llvm::MapVector< CallStackId, llvm::SmallVector< FrameIdTy > > &MemProfCallStackData)
value_type read(const void *memory, endianness endian)
Read a value of a particular endianness from memory.
value_type readNext(const CharT *&memory, endianness endian)
Read a value of a particular endianness from a buffer, and increment the buffer past that value.
This is an optimization pass for GlobalISel generic memory operations.
CallStackIdConverter & operator=(const CallStackIdConverter &)=delete
CallStackIdConverter()=delete
llvm::function_ref< Frame(FrameId)> FrameIdToFrame
std::optional< CallStackId > LastUnmappedId
CallStackIdConverter(MapTy &Map, llvm::function_ref< Frame(FrameId)> FrameIdToFrame)
std::vector< Frame > operator()(CallStackId CSId)
CallStackIdConverter(const CallStackIdConverter &)=delete
FrameIdConverter(const FrameIdConverter &)=delete
Frame operator()(FrameId Id)
FrameIdConverter(MapTy &Map)
std::optional< FrameId > LastUnmappedId
FrameIdConverter()=delete
FrameIdConverter & operator=(const FrameIdConverter &)=delete
static constexpr size_t serializedSize()
static Frame deserialize(const unsigned char *Ptr)
IndexedCallstackIdConverter()=delete
CallStackIdConverter< decltype(IndexedMemProfData::CallStacks)> CSIdConv
std::vector< Frame > operator()(CallStackId CSId)
FrameIdConverter< decltype(IndexedMemProfData::Frames)> FrameIdConv
IndexedCallstackIdConverter(const IndexedCallstackIdConverter &)=delete
IndexedCallstackIdConverter & operator=(const IndexedCallstackIdConverter &)=delete
IndexedCallstackIdConverter(IndexedMemProfData &MemProfData)
llvm::MapVector< CallStackId, llvm::SmallVector< FrameId > > CallStacks
llvm::MapVector< FrameId, Frame > Frames
llvm::function_ref< Frame(LinearFrameId)> FrameIdToFrame
const unsigned char * CallStackBase
LinearCallStackIdConverter()=delete
std::vector< Frame > operator()(LinearCallStackId LinearCSId)
LinearCallStackIdConverter(const unsigned char *CallStackBase, llvm::function_ref< Frame(LinearFrameId)> FrameIdToFrame)
LinearFrameIdConverter()=delete
LinearFrameIdConverter(const unsigned char *FrameBase)
const unsigned char * FrameBase
Frame operator()(LinearFrameId LinearId)