LLVM: include/llvm/ProfileData/MemProfRadixTree.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_PROFILEDATA_MEMPROFRADIXTREE_H
14#define LLVM_PROFILEDATA_MEMPROFRADIXTREE_H
15
20
21#include
22
23namespace llvm {
26
27
28
29template <typename value_type, typename IterTy>
32 if constexpr (std::is_same_v<deref_type, value_type>)
33 return *Iter;
34 else
35 return Iter->second;
36}
37}
38
39
43
46
47
48
49
52
54 auto Iter = Map.find(Id);
55 if (Iter == Map.end()) {
58 }
60 }
61};
62
63
68
73
74
75
76
79
81 std::vector Frames;
82 auto CSIter = Map.find(CSId);
83 if (CSIter == Map.end()) {
85 } else {
88 Frames.reserve(CS.size());
91 }
92 return Frames;
93 }
94};
95
96
97
110
111
112
116
122
124 std::vector Frames;
125
126 const unsigned char *Ptr =
131 Frames.reserve(NumFrames);
132 for (; NumFrames; --NumFrames) {
135
136
137 if (static_cast<std::make_signed_t>(Elem) < 0) {
139 Elem =
141 }
142
143 assert(static_cast<std::make_signed_t>(Elem) >= 0);
146 }
147
148 return Frames;
149 }
150};
151
152
153
154
155
156
157
159
161
163
165
166
168
173 unsigned RadixTreeSize)
175 Visited(RadixTreeSize) {}
176
178 const unsigned char *Ptr =
183
185 for (; NumFrames; --NumFrames) {
188
189
190 if (static_cast<std::make_signed_t>(Elem) < 0) {
192 Elem =
194 }
195
196 assert(static_cast<std::make_signed_t>(Elem) >= 0);
197
198
200 uint64_t CallerGUID = F.Function;
203
204
205
206
210 break;
212
214 CalleeGUID = CallerGUID;
215 }
216 }
217};
218
219
220
226
227
228
229
233
235
238};
239
246
247
248template
251 &MemProfCallStackData);
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
309
310 std::vector RadixArray;
311
312
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333 std::vector Indexes;
334
335 using CSIdPair = std::pair<CallStackId, llvm::SmallVector>;
336
337
338
343
344public:
346
347
348 void
350 &&MemProfCallStackData,
353
355
357 return std::move(CallStackPos);
358 }
359};
360
361
365
366}
367}
368#endif
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
Definition MemProfRadixTree.h:354
llvm::DenseMap< CallStackId, LinearCallStackId > takeCallStackPos()
Definition MemProfRadixTree.h:356
Helper class to iterate through stack ids in both metadata (memprof MIB and callsite) and the corresp...
value_type DerefIterator(IterTy Iter)
Definition MemProfRadixTree.h:30
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.
Definition MemProfRadixTree.h:64
CallStackIdConverter & operator=(const CallStackIdConverter &)=delete
CallStackIdConverter()=delete
llvm::function_ref< Frame(FrameId)> FrameIdToFrame
Definition MemProfRadixTree.h:67
std::optional< CallStackId > LastUnmappedId
Definition MemProfRadixTree.h:65
CallStackIdConverter(MapTy &Map, llvm::function_ref< Frame(FrameId)> FrameIdToFrame)
Definition MemProfRadixTree.h:70
std::vector< Frame > operator()(CallStackId CSId)
Definition MemProfRadixTree.h:80
CallStackIdConverter(const CallStackIdConverter &)=delete
MapTy & Map
Definition MemProfRadixTree.h:66
Definition MemProfRadixTree.h:40
FrameIdConverter(const FrameIdConverter &)=delete
MapTy & Map
Definition MemProfRadixTree.h:42
Frame operator()(FrameId Id)
Definition MemProfRadixTree.h:53
FrameIdConverter(MapTy &Map)
Definition MemProfRadixTree.h:45
std::optional< FrameId > LastUnmappedId
Definition MemProfRadixTree.h:41
FrameIdConverter()=delete
FrameIdConverter & operator=(const FrameIdConverter &)=delete
Definition MemProfRadixTree.h:240
uint64_t Count
Definition MemProfRadixTree.h:242
uint64_t PositionSum
Definition MemProfRadixTree.h:244
static constexpr size_t serializedSize()
static Frame deserialize(const unsigned char *Ptr)
IndexedCallstackIdConverter()=delete
CallStackIdConverter< decltype(IndexedMemProfData::CallStacks)> CSIdConv
Definition MemProfRadixTree.h:237
std::vector< Frame > operator()(CallStackId CSId)
Definition MemProfRadixTree.h:234
FrameIdConverter< decltype(IndexedMemProfData::Frames)> FrameIdConv
Definition MemProfRadixTree.h:236
IndexedCallstackIdConverter(const IndexedCallstackIdConverter &)=delete
IndexedCallstackIdConverter & operator=(const IndexedCallstackIdConverter &)=delete
IndexedCallstackIdConverter(IndexedMemProfData &MemProfData)
Definition MemProfRadixTree.h:223
llvm::MapVector< CallStackId, llvm::SmallVector< FrameId > > CallStacks
llvm::MapVector< FrameId, Frame > Frames
llvm::function_ref< Frame(LinearFrameId)> FrameIdToFrame
Definition MemProfRadixTree.h:115
const unsigned char * CallStackBase
Definition MemProfRadixTree.h:114
LinearCallStackIdConverter()=delete
std::vector< Frame > operator()(LinearCallStackId LinearCSId)
Definition MemProfRadixTree.h:123
LinearCallStackIdConverter(const unsigned char *CallStackBase, llvm::function_ref< Frame(LinearFrameId)> FrameIdToFrame)
Definition MemProfRadixTree.h:118
LinearFrameIdConverter()=delete
LinearFrameIdConverter(const unsigned char *FrameBase)
Definition MemProfRadixTree.h:102
const unsigned char * FrameBase
Definition MemProfRadixTree.h:99
Frame operator()(LinearFrameId LinearId)
Definition MemProfRadixTree.h:105