13#ifndef LLVM_PROFILEDATA_MEMPROFRADIXTREE_H
14#define LLVM_PROFILEDATA_MEMPROFRADIXTREE_H
29template <
typename value_type,
typename IterTy>
32 if constexpr (std::is_same_v<deref_type, value_type>)
54 auto Iter =
Map.find(Id);
55 if (Iter ==
Map.end()) {
81 std::vector<Frame> Frames;
82 auto CSIter =
Map.find(CSId);
83 if (CSIter ==
Map.end()) {
88 Frames.reserve(CS.
size());
124 std::vector<Frame> Frames;
126 const unsigned char *
Ptr =
131 Frames.reserve(NumFrames);
132 for (; NumFrames; --NumFrames) {
137 if (
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) < 0) {
143 assert(
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) >= 0);
173 unsigned RadixTreeSize)
178 const unsigned char *
Ptr =
185 for (; NumFrames; --NumFrames) {
190 if (
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) < 0) {
196 assert(
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) >= 0);
214 CalleeGUID = CallerGUID;
248template <
typename FrameIdTy>
251 &MemProfCallStackData);
310 std::vector<LinearFrameId> RadixArray;
333 std::vector<LinearCallStackId> Indexes;
335 using CSIdPair = std::pair<CallStackId, llvm::SmallVector<FrameIdTy>>;
350 &&MemProfCallStackData,
357 return std::move(CallStackPos);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements the BitVector class.
#define LLVM_TEMPLATE_ABI
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
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...
value_type DerefIterator(IterTy Iter)
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)