LLVM: include/llvm/CodeGen/AccelTable.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CODEGEN_ACCELTABLE_H

14#define LLVM_CODEGEN_ACCELTABLE_H

15

27#include

28#include

29#include

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104namespace llvm {

105

111

112

113

114

116public:

118

122

123

124

125

126#ifndef NDEBUG

128#endif

129protected:

131};

132

133

134

135

137public:

139

140

144 std::vector<AccelTableData *> Values;

146

147

148 template <typename T = AccelTableData *> auto getValues() const {

149 static_assert(std::is_pointer());

150 static_assert(

151 std::is_base_of<AccelTableData, std::remove_pointer_t>());

154 }

155

156#ifndef NDEBUG

159#endif

160 };

161 using HashList = std::vector<HashData *>;

163

164protected:

165

167

170

174

177

179

181

182public:

188

189#ifndef NDEBUG

192#endif

193

196};

197

198

199

200

201

202

204public:

206

207 template <typename... Types>

212};

213

214template

215template <typename... Types>

217 Types &&... Args) {

219

220

221 auto &It = Entries[Name.getString()];

222 if (It.Values.empty()) {

223 It.Name = Name;

224 It.HashValue = Hash(Name.getString());

225 }

226 It.Values.push_back(new (Allocator)

227 AccelTableDataT(std::forward(Args)...));

228}

229

230

231

232

234public:

235

236

237

239

241

243

245

246#ifndef NDEBUG

249#endif

250 };

251

252

253

255

257};

258

259

260

272

284 return LHS.offset() == RHS.offset() && LHS.unitID() == RHS.unitID() &&

285 LHS.IsTU == RHS.isTU();

286 }

287};

288

289

290

291

292

294public:

296

298 const bool IsTU);

300 const std::optional<uint64_t> DefiningParentOffset,

301 const unsigned DieTag, const unsigned UnitID,

302 const bool IsTU)

305

306#ifndef NDEBUG

308#endif

309

314

318

324 const DIE *Entry = std::get<const DIE *>(OffsetVal);

327 }

329 return std::holds_alternative<uint64_t>(OffsetVal);

330 }

331

334 return OffsetAndId->offset();

335 return {};

336 }

337

339 assert(isNormalized() && "Accessing DIE Offset before normalizing.");

341 return std::nullopt;

343 }

344

345

347

348

350

351

352

353 LLVM_ABI static std::optional<uint64_t>

355

356protected:

357 std::variant<const DIE *, uint64_t> OffsetVal;

364};

365

367public:

375

377 AttrVect.push_back(Attr);

378 }

379

381

383

385

387

389 return AttrVect;

390 }

391

392private:

394};

395

404

406

407public:

412

414

416

418

419

421 for (auto &Entry : Entries) {

423

424

425

426 if (Data->isNormalized())

427 Data->normalizeDIEToOffset();

428 }

429 }

430 }

431

433 for (auto &Entry : Table.getEntries()) {

435 addName(Entry.second.Name, Data->getDieOffset(),

436 Data->getParentDieOffset(), Data->getDieTag(),

437 Data->getUnitID(), Data->isTU());

438 }

439 }

440 }

441};

442

445 StringRef Prefix, const MCSymbol *SecBegin,

447

448

449

450

451template

454 static_assert(std::is_convertible<DataT *, AppleAccelTableData *>::value);

456}

457

460 const DwarfDebug &DD,

461 ArrayRef<std::unique_ptr> CUs);

462

463

464

465

466

468 AsmPrinter *Asm, DWARF5AccelTable &Contents,

469 ArrayRef<std::variant<MCSymbol *, uint64_t>> CUs,

470 llvm::function_ref<std::optionalDWARF5AccelTable::UnitIndexAndEncoding(

471 const DWARF5AccelTableData &)>

472 getIndexForEntry);

473

474

475

477public:

479

480 void emit(AsmPrinter *Asm) const override;

481

484

485#ifndef NDEBUG

487#endif

488protected:

490

492};

493

494

496public:

498

499 void emit(AsmPrinter *Asm) const override;

500

505

506#ifndef NDEBUG

508#endif

509};

510

511

512

514public:

516

517 void emit(AsmPrinter *Asm) const override;

518

521

522#ifndef NDEBUG

524#endif

525protected:

527

529};

530

531

532

535public:

542

543 void emit(AsmPrinter *Asm) const override;

544

548 Atom(5, dwarf::DW_FORM_data1), Atom(6, dwarf::DW_FORM_data4)};

549

550#ifndef NDEBUG

552#endif

553protected:

555

559};

560

561}

562

563#endif

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

This file defines the BumpPtrAllocator interface.

static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)

static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")

This file contains constants used for implementing Dwarf debug support.

This file implements a map that provides insertion order iteration.

BucketList Buckets

Definition AccelTable.h:176

uint32_t getUniqueNameCount() const

Definition AccelTable.h:187

uint32_t BucketCount

Definition AccelTable.h:172

std::vector< HashData * > HashList

Definition AccelTable.h:161

std::vector< HashList > BucketList

Definition AccelTable.h:162

BumpPtrAllocator Allocator

Allocator for HashData and Values.

Definition AccelTable.h:166

void operator=(const AccelTableBase &)=delete

LLVM_ABI void computeBucketCount()

HashFn * Hash

Definition AccelTable.h:171

uint32_t getUniqueHashCount() const

Definition AccelTable.h:186

void print(raw_ostream &OS) const

void dump() const

Definition AccelTable.h:191

AccelTableBase(const AccelTableBase &)=delete

HashList Hashes

Definition AccelTable.h:175

AccelTableBase(HashFn *Hash)

Definition AccelTable.h:180

MapVector< StringRef, HashData > StringEntries

Definition AccelTable.h:168

ArrayRef< HashList > getBuckets() const

Definition AccelTable.h:184

uint32_t getBucketCount() const

Definition AccelTable.h:185

uint32_t(StringRef) HashFn

Definition AccelTable.h:138

uint32_t UniqueHashCount

Definition AccelTable.h:173

StringEntries Entries

Definition AccelTable.h:169

Interface which the different types of accelerator table data have to conform.

Definition AccelTable.h:115

virtual uint64_t order() const =0

virtual ~AccelTableData()=default

virtual void print(raw_ostream &OS) const =0

bool operator<(const AccelTableData &Other) const

Definition AccelTable.h:119

This class holds an abstract representation of an Accelerator Table, consisting of a sequence of buck...

Definition AccelTable.h:203

void clear()

Definition AccelTable.h:209

const StringEntries getEntries() const

Definition AccelTable.h:211

void addEntries(AccelTable< DataT > &Table)

void addName(DwarfStringPoolEntryRef Name, Types &&... Args)

Definition AccelTable.h:216

AccelTable()

Definition AccelTable.h:205

A base class for different implementations of Data classes for Apple Accelerator Tables.

Definition AccelTable.h:233

virtual void emit(AsmPrinter *Asm) const =0

static uint32_t hash(StringRef Buffer)

Definition AccelTable.h:256

uint64_t order() const override

Definition AccelTable.h:489

const DIE & Die

Definition AccelTable.h:491

AppleAccelTableOffsetData(const DIE &D)

Definition AccelTable.h:478

static constexpr Atom Atoms[]

Definition AccelTable.h:482

AppleAccelTableStaticOffsetData(uint32_t Offset)

Definition AccelTable.h:515

uint32_t Offset

Definition AccelTable.h:528

static constexpr Atom Atoms[]

Definition AccelTable.h:519

uint64_t order() const override

Definition AccelTable.h:526

uint32_t QualifiedNameHash

Definition AccelTable.h:556

uint16_t Tag

Definition AccelTable.h:557

bool ObjCClassIsImplementation

Definition AccelTable.h:558

uint64_t order() const override

Definition AccelTable.h:554

static constexpr Atom Atoms[]

Definition AccelTable.h:545

AppleAccelTableStaticTypeData(uint32_t Offset, uint16_t Tag, bool ObjCClassIsImplementation, uint32_t QualifiedNameHash)

Definition AccelTable.h:536

static constexpr Atom Atoms[]

Definition AccelTable.h:501

AppleAccelTableTypeData(const DIE &D)

Definition AccelTable.h:497

ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...

This class is intended to be used as a driving class for all asm writers.

A structured debug information entry.

The Data class implementation for DWARF v5 accelerator table.

Definition AccelTable.h:293

uint32_t IsTU

Definition AccelTable.h:361

static uint32_t hash(StringRef Name)

Definition AccelTable.h:295

void print(raw_ostream &OS) const override

unsigned getDieTag() const

Definition AccelTable.h:319

void normalizeDIEToOffset()

Definition AccelTable.h:322

std::optional< OffsetAndUnitID > getParentDieOffsetAndUnitID() const

Definition AccelTable.h:338

uint32_t AbbrevNumber

Definition AccelTable.h:360

std::optional< uint64_t > getParentDieOffset() const

Definition AccelTable.h:332

std::variant< const DIE *, uint64_t > OffsetVal

Definition AccelTable.h:357

LLVM_ABI DWARF5AccelTableData(const DIE &Die, const uint32_t UnitID, const bool IsTU)

unsigned getUnitID() const

Definition AccelTable.h:320

void setAbbrevNumber(uint16_t AbbrevNum)

Sets AbbrevIndex for an Entry.

Definition AccelTable.h:346

uint64_t order() const override

Definition AccelTable.h:363

uint32_t UnitID

Definition AccelTable.h:362

OffsetAndUnitID getDieOffsetAndUnitID() const

Definition AccelTable.h:315

uint32_t DieTag

Definition AccelTable.h:359

static LLVM_ABI std::optional< uint64_t > getDefiningParentDieOffset(const DIE &Die)

If Die has a non-null parent and the parent is not a declaration, return its offset.

DWARF5AccelTableData(const uint64_t DieOffset, const std::optional< uint64_t > DefiningParentOffset, const unsigned DieTag, const unsigned UnitID, const bool IsTU)

Definition AccelTable.h:299

uint16_t getAbbrevNumber() const

Returns AbbrevIndex for an Entry.

Definition AccelTable.h:349

bool isNormalized() const

Definition AccelTable.h:328

bool isTU() const

Definition AccelTable.h:321

uint64_t getDieOffset() const

Definition AccelTable.h:310

std::optional< uint64_t > ParentOffset

Definition AccelTable.h:358

Definition AccelTable.h:403

LLVM_ABI void addTypeUnitSignature(DwarfTypeUnit &U)

Add a type unit Signature.

void convertDieToOffset()

Convert DIE entries to explicit offset.

Definition AccelTable.h:420

const TUVectorTy & getTypeUnitsSymbols()

Returns type units that were constructed.

Definition AccelTable.h:413

LLVM_ABI void addTypeUnitSymbol(DwarfTypeUnit &U)

Add a type unit start symbol.

void addTypeEntries(DWARF5AccelTable &Table)

Definition AccelTable.h:432

void addAttribute(const DebugNamesAbbrev::AttributeEncoding &Attr)

Add attribute encoding to an abbreviation.

Definition AccelTable.h:376

uint32_t DieTag

Definition AccelTable.h:368

void setNumber(uint32_t AbbrevNumber)

Set abbreviation tag index.

Definition AccelTable.h:380

const SmallVector< AttributeEncoding, 1 > & getAttributes() const

Returns attributes for an abbreviation.

Definition AccelTable.h:388

uint32_t Number

Definition AccelTable.h:369

uint32_t getNumber() const

Get abbreviation tag index.

Definition AccelTable.h:382

uint32_t getDieTag() const

Get DIE Tag.

Definition AccelTable.h:384

DebugNamesAbbrev(uint32_t DieTag)

Definition AccelTable.h:374

Collects and handles dwarf debug information.

DwarfStringPoolEntryRef: Dwarf string pool entry reference.

FoldingSetNodeID - This class is used to gather all the unique data bits of a node.

MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...

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.

StringRef - Represent a constant reference to a string, i.e.

An efficient, type-erasing, non-owning reference to a callable.

This class implements an extremely fast bulk output stream that can only output to a stream.

unsigned ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

@ DW_ATOM_die_offset

Marker as the end of a list of atoms.

This is an optimization pass for GlobalISel generic memory operations.

SmallVector< TypeUnitMetaInfo, 1 > TUVectorTy

Definition AccelTable.h:402

FoldingSetBase::Node FoldingSetNode

auto map_range(ContainerTy &&C, FuncTy F)

LLVM_ABI void emitAppleAccelTableImpl(AsmPrinter *Asm, AccelTableBase &Contents, StringRef Prefix, const MCSymbol *SecBegin, ArrayRef< AppleAccelTableData::Atom > Atoms)

LLVM_ABI raw_ostream & dbgs()

dbgs() - This returns a reference to a raw_ostream for debugging messages.

FunctionAddr VTableAddr uintptr_t uintptr_t Data

void emitAppleAccelTable(AsmPrinter *Asm, AccelTable< DataT > &Contents, StringRef Prefix, const MCSymbol *SecBegin)

Emit an Apple Accelerator Table consisting of entries in the specified AccelTable.

Definition AccelTable.h:452

LLVM_ABI uint32_t caseFoldingDjbHash(StringRef Buffer, uint32_t H=5381)

Computes the Bernstein hash after folding the input according to the Dwarf 5 standard case folding ru...

ArrayRef(const T &OneElt) -> ArrayRef< T >

uint32_t djbHash(StringRef Buffer, uint32_t H=5381)

The Bernstein hash function used by the DWARF accelerator tables.

LLVM_ABI void emitDWARF5AccelTable(AsmPrinter *Asm, DWARF5AccelTable &Contents, const DwarfDebug &DD, ArrayRef< std::unique_ptr< DwarfCompileUnit > > CUs)

hash_code hash_combine(const Ts &...args)

Combine values into a single hash_code.

BumpPtrAllocatorImpl<> BumpPtrAllocator

The standard BumpPtrAllocator which just uses the default template parameters.

Represents a group of entries with identical name (and hence, hash value).

Definition AccelTable.h:141

void print(raw_ostream &OS) const

uint32_t HashValue

Definition AccelTable.h:143

auto getValues() const

Get all AccelTableData cast as a T.

Definition AccelTable.h:148

MCSymbol * Sym

Definition AccelTable.h:145

void dump() const

Definition AccelTable.h:158

DwarfStringPoolEntryRef Name

Definition AccelTable.h:142

std::vector< AccelTableData * > Values

Definition AccelTable.h:144

An Atom defines the form of the data in an Apple accelerator table.

Definition AccelTable.h:238

const uint16_t Form

DWARF Form.

Definition AccelTable.h:242

void dump() const

Definition AccelTable.h:248

void print(raw_ostream &OS) const

const uint16_t Type

Atom Type.

Definition AccelTable.h:240

constexpr Atom(uint16_t Type, uint16_t Form)

Definition AccelTable.h:244

Definition AccelTable.h:408

unsigned Index

Definition AccelTable.h:409

DebugNamesAbbrev::AttributeEncoding Encoding

Definition AccelTable.h:410

Definition AccelTable.h:370

dwarf::Index Index

Definition AccelTable.h:371

dwarf::Form Form

Definition AccelTable.h:372

static bool isEqual(const OffsetAndUnitID &LHS, const OffsetAndUnitID &RHS)

Definition AccelTable.h:283

static OffsetAndUnitID getEmptyKey()

Definition AccelTable.h:274

static unsigned getHashValue(const OffsetAndUnitID &Val)

Definition AccelTable.h:280

static OffsetAndUnitID getTombstoneKey()

Definition AccelTable.h:277

An information struct used to provide DenseMap with the various necessary components for a given valu...

Helper class to identify an entry in DWARF5AccelTable based on their DIE offset and UnitID.

Definition AccelTable.h:261

bool isTU() const

Definition AccelTable.h:270

bool IsTU

Definition AccelTable.h:264

uint64_t Offset

Definition AccelTable.h:262

uint32_t unitID() const

Definition AccelTable.h:269

uint64_t offset() const

Definition AccelTable.h:268

OffsetAndUnitID(uint64_t Offset, uint32_t UnitID, bool IsTU)

Definition AccelTable.h:266

uint32_t UnitID

Definition AccelTable.h:263