@@ -257,38 +257,18 @@ class AppleAccelTableData : public AccelTableData {
257
257
258
258
// / Helper class to identify an entry in DWARF5AccelTable based on their DIE
259
259
// / offset and UnitID.
260
- struct OffsetAndUnitID {
261
- uint64_t Offset = 0 ;
262
- uint32_t UnitID = 0 ;
263
- bool IsTU = false ;
264
- OffsetAndUnitID () = default ;
265
- OffsetAndUnitID (uint64_t Offset, uint32_t UnitID, bool IsTU)
266
- : Offset(Offset), UnitID(UnitID), IsTU(IsTU) {}
267
- uint64_t offset () const { return Offset; };
268
- uint32_t unitID () const { return UnitID; };
269
- bool isTU () const { return IsTU; }
270
- };
260
+ struct OffsetAndUnitID : std::pair<uint64_t , uint32_t > {
261
+ using Base = std::pair<uint64_t , uint32_t >;
262
+ OffsetAndUnitID (Base B) : Base(B) {}
271
263
272
- template <> struct DenseMapInfo <OffsetAndUnitID> {
273
- static inline OffsetAndUnitID getEmptyKey () {
274
- OffsetAndUnitID Entry;
275
- Entry.Offset = uint64_t (-1 );
276
- return Entry;
277
- }
278
- static inline OffsetAndUnitID getTombstoneKey () {
279
- OffsetAndUnitID Entry;
280
- Entry.Offset = uint64_t (-2 );
281
- return Entry;
282
- }
283
- static unsigned getHashValue (const OffsetAndUnitID &Val) {
284
- return (unsigned )llvm::hash_combine (Val.offset (), Val.unitID (), Val.IsTU );
285
- }
286
- static bool isEqual (const OffsetAndUnitID &LHS, const OffsetAndUnitID &RHS) {
287
- return LHS.offset () == RHS.offset () && LHS.unitID () == RHS.unitID () &&
288
- LHS.IsTU == RHS.isTU ();
289
- }
264
+ OffsetAndUnitID (uint64_t Offset, uint32_t UnitID) : Base(Offset, UnitID) {}
265
+ uint64_t offset () const { return first; };
266
+ uint32_t unitID () const { return second; };
290
267
};
291
268
269
+ template <>
270
+ struct DenseMapInfo <OffsetAndUnitID> : DenseMapInfo<OffsetAndUnitID::Base> {};
271
+
292
272
// / The Data class implementation for DWARF v5 accelerator table. Unlike the
293
273
// / Apple Data classes, this class is just a DIE wrapper, and does not know to
294
274
// / serialize itself. The complete serialization logic is in the
@@ -297,11 +277,12 @@ class DWARF5AccelTableData : public AccelTableData {
297
277
public:
298
278
static uint32_t hash (StringRef Name) { return caseFoldingDjbHash (Name); }
299
279
300
- DWARF5AccelTableData (const DIE &Die, const uint32_t UnitID, const bool IsTU);
280
+ DWARF5AccelTableData (const DIE &Die, const uint32_t UnitID,
281
+ const bool IsTU = false );
301
282
DWARF5AccelTableData (const uint64_t DieOffset,
302
283
const std::optional<uint64_t > DefiningParentOffset,
303
284
const unsigned DieTag, const unsigned UnitID,
304
- const bool IsTU)
285
+ const bool IsTU = false )
305
286
: OffsetVal(DieOffset), ParentOffset(DefiningParentOffset),
306
287
DieTag (DieTag), AbbrevNumber(0 ), IsTU(IsTU), UnitID(UnitID) {}
307
288
@@ -315,7 +296,7 @@ class DWARF5AccelTableData : public AccelTableData {
315
296
}
316
297
317
298
OffsetAndUnitID getDieOffsetAndUnitID () const {
318
- return {getDieOffset (), getUnitID (), isTU () };
299
+ return {getDieOffset (), UnitID };
319
300
}
320
301
321
302
unsigned getDieTag () const { return DieTag; }
@@ -341,7 +322,7 @@ class DWARF5AccelTableData : public AccelTableData {
341
322
assert (isNormalized () && " Accessing DIE Offset before normalizing." );
342
323
if (!ParentOffset)
343
324
return std::nullopt;
344
- return OffsetAndUnitID (*ParentOffset, getUnitID (), isTU () );
325
+ return OffsetAndUnitID (*ParentOffset, getUnitID ());
345
326
}
346
327
347
328
// / Sets AbbrevIndex for an Entry.
@@ -435,7 +416,7 @@ class DWARF5AccelTable : public AccelTable<DWARF5AccelTableData> {
435
416
for (auto *Data : Entry.second .getValues <DWARF5AccelTableData *>()) {
436
417
addName (Entry.second .Name , Data->getDieOffset (),
437
418
Data->getParentDieOffset (), Data->getDieTag (),
438
- Data->getUnitID (), Data-> isTU () );
419
+ Data->getUnitID (), true );
439
420
}
440
421
}
441
422
}
0 commit comments