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