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()) {
59 return detail::DerefIterator<Frame>(Iter);
81 std::vector<Frame> Frames;
82 auto CSIter =
Map.find(CSId);
83 if (CSIter ==
Map.end()) {
87 detail::DerefIterator<llvm::SmallVector<FrameId>>(CSIter);
124 std::vector<Frame> Frames;
126 const unsigned char *
Ptr =
130 support::endian::readNext<uint32_t, llvm::endianness::little>(
Ptr);
131 Frames.reserve(NumFrames);
132 for (; NumFrames; --NumFrames) {
134 support::endian::read<LinearFrameId, llvm::endianness::little>(
Ptr);
137 if (
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) < 0) {
140 support::endian::read<LinearFrameId, llvm::endianness::little>(
Ptr);
143 assert(
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) >= 0);
173 unsigned RadixTreeSize)
178 const unsigned char *
Ptr =
182 support::endian::readNext<uint32_t, llvm::endianness::little>(
Ptr);
185 for (; NumFrames; --NumFrames) {
187 support::endian::read<LinearFrameId, llvm::endianness::little>(
Ptr);
190 if (
static_cast<std::make_signed_t<LinearFrameId>
>(Elem) < 0) {
193 support::endian::read<LinearFrameId, llvm::endianness::little>(
Ptr);
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),...
bool test(unsigned Idx) const
This class implements a map that also provides access to all stored values in a deterministic order.
void reserve(size_type N)
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)
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)
This is an optimization pass for GlobalISel generic memory operations.
typename llvm::remove_cvref< T >::type remove_cvref_t
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)