Skip to content

Commit 28dfa53

Browse files
authored
Merge pull request #9466 from augusto2112/remove-spare-bits-debug-2
[DebugInfo] Remove spare bits mask from LLVM IR and DWARF
2 parents 87382ef + a1bc710 commit 28dfa53

File tree

15 files changed

+719
-186
lines changed

15 files changed

+719
-186
lines changed

llvm/include/llvm/BinaryFormat/Dwarf.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,6 @@ HANDLE_DW_AT(0x3fee, APPLE_objc_direct, 0, APPLE)
636636
HANDLE_DW_AT(0x3fef, APPLE_sdk, 0, APPLE)
637637
HANDLE_DW_AT(0x3ff0, APPLE_origin, 0, APPLE)
638638
HANDLE_DW_AT(0x3ff1, APPLE_num_extra_inhabitants, 0, APPLE)
639-
HANDLE_DW_AT(0x3ff2, APPLE_spare_bits_mask, 0, APPLE)
640639

641640
// Attribute form encodings.
642641
HANDLE_DW_FORM(0x01, addr, 2, DWARF)

llvm/include/llvm/IR/DIBuilder.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -533,17 +533,12 @@ namespace llvm {
533533
/// \param Discriminator Discriminant member
534534
/// \param Elements Variant elements.
535535
/// \param UniqueIdentifier A unique identifier for the union.
536-
/// \param OffsetInBits The offset of the variant payload in the variant
537-
/// type.
538-
/// \param SpareBitMask A mask of spare bits of the payload, spare bits are
539-
/// bits that aren't used in any of the variant's cases.
540536
DICompositeType *
541537
createVariantPart(DIScope *Scope, StringRef Name, DIFile *File,
542538
unsigned LineNumber, uint64_t SizeInBits,
543539
uint32_t AlignInBits, DINode::DIFlags Flags,
544540
DIDerivedType *Discriminator, DINodeArray Elements,
545-
StringRef UniqueIdentifier = "",
546-
uint64_t OffsetInBits = 0, APInt SpareBitsMask = APInt());
541+
StringRef UniqueIdentifier = "");
547542

548543
/// Create debugging information for template
549544
/// type parameter.

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,16 +1172,15 @@ class DICompositeType : public DIType {
11721172
friend class MDNode;
11731173

11741174
unsigned RuntimeLang;
1175-
llvm::APInt SpareBitsMask;
11761175

11771176
DICompositeType(LLVMContext &C, StorageType Storage, unsigned Tag,
11781177
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
11791178
uint32_t AlignInBits, uint64_t OffsetInBits,
1180-
uint32_t NumExtraInhabitants, APInt SpareBitsMask,
1181-
DIFlags Flags, ArrayRef<Metadata *> Ops)
1179+
uint32_t NumExtraInhabitants, DIFlags Flags,
1180+
ArrayRef<Metadata *> Ops)
11821181
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
11831182
AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1184-
RuntimeLang(RuntimeLang), SpareBitsMask(SpareBitsMask) {}
1183+
RuntimeLang(RuntimeLang) {}
11851184
~DICompositeType() = default;
11861185

11871186
/// Change fields in place.
@@ -1199,20 +1198,20 @@ class DICompositeType : public DIType {
11991198
getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
12001199
unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
12011200
uint32_t AlignInBits, uint64_t OffsetInBits, DIType *SpecificationOf,
1202-
uint32_t NumExtraInhabitants, APInt SpareBitsMask, DIFlags Flags,
1203-
DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder,
1201+
uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
1202+
unsigned RuntimeLang, DIType *VTableHolder,
12041203
DITemplateParameterArray TemplateParams, StringRef Identifier,
12051204
DIDerivedType *Discriminator, Metadata *DataLocation,
12061205
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
12071206
DINodeArray Annotations, StorageType Storage,
12081207
bool ShouldCreate = true) {
1209-
return getImpl(
1210-
Context, Tag, getCanonicalMDString(Context, Name), File, Line, Scope,
1211-
BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, Elements.get(),
1212-
RuntimeLang, VTableHolder, TemplateParams.get(),
1213-
getCanonicalMDString(Context, Identifier), Discriminator, DataLocation,
1214-
Associated, Allocated, Rank, Annotations.get(), SpecificationOf,
1215-
NumExtraInhabitants, SpareBitsMask, Storage, ShouldCreate);
1208+
return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File,
1209+
Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1210+
Flags, Elements.get(), RuntimeLang, VTableHolder,
1211+
TemplateParams.get(),
1212+
getCanonicalMDString(Context, Identifier), Discriminator,
1213+
DataLocation, Associated, Allocated, Rank, Annotations.get(),
1214+
SpecificationOf, NumExtraInhabitants, Storage, ShouldCreate);
12161215
}
12171216
static DICompositeType *
12181217
getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1223,8 +1222,8 @@ class DICompositeType : public DIType {
12231222
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
12241223
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
12251224
Metadata *Annotations, Metadata *SpecificationOf,
1226-
uint32_t NumExtraInhabitants, APInt SpareBitsMask,
1227-
StorageType Storage, bool ShouldCreate = true);
1225+
uint32_t NumExtraInhabitants, StorageType Storage,
1226+
bool ShouldCreate = true);
12281227

12291228
TempDICompositeType cloneImpl() const {
12301229
return getTemporary(
@@ -1234,7 +1233,7 @@ class DICompositeType : public DIType {
12341233
getTemplateParams(), getIdentifier(), getDiscriminator(),
12351234
getRawDataLocation(), getRawAssociated(), getRawAllocated(),
12361235
getRawRank(), getAnnotations(), getSpecificationOf(),
1237-
getNumExtraInhabitants(), getSpareBitsMask());
1236+
getNumExtraInhabitants());
12381237
}
12391238

12401239
public:
@@ -1249,11 +1248,11 @@ class DICompositeType : public DIType {
12491248
Metadata *DataLocation = nullptr, Metadata *Associated = nullptr,
12501249
Metadata *Allocated = nullptr, Metadata *Rank = nullptr,
12511250
DINodeArray Annotations = nullptr, DIType *SpecificationOf = nullptr,
1252-
uint32_t NumExtraInhabitants = 0, APInt SpareBitsMask = APInt()),
1251+
uint32_t NumExtraInhabitants = 0),
12531252
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1254-
OffsetInBits, SpecificationOf, NumExtraInhabitants, SpareBitsMask, Flags,
1255-
Elements, RuntimeLang, VTableHolder, TemplateParams, Identifier,
1256-
Discriminator, DataLocation, Associated, Allocated, Rank, Annotations))
1253+
OffsetInBits, SpecificationOf, NumExtraInhabitants, Flags, Elements,
1254+
RuntimeLang, VTableHolder, TemplateParams, Identifier, Discriminator,
1255+
DataLocation, Associated, Allocated, Rank, Annotations))
12571256
DEFINE_MDNODE_GET(
12581257
DICompositeType,
12591258
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1264,12 +1263,11 @@ class DICompositeType : public DIType {
12641263
Metadata *Discriminator = nullptr, Metadata *DataLocation = nullptr,
12651264
Metadata *Associated = nullptr, Metadata *Allocated = nullptr,
12661265
Metadata *Rank = nullptr, Metadata *Annotations = nullptr,
1267-
Metadata *SpecificationOf = nullptr, uint32_t NumExtraInhabitants = 0,
1268-
APInt SpareBitsMask = APInt()),
1266+
Metadata *SpecificationOf = nullptr, uint32_t NumExtraInhabitants = 0),
12691267
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
12701268
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
12711269
Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1272-
Annotations, SpecificationOf, NumExtraInhabitants, SpareBitsMask))
1270+
Annotations, SpecificationOf, NumExtraInhabitants))
12731271

12741272
TempDICompositeType clone() const { return cloneImpl(); }
12751273

@@ -1285,7 +1283,7 @@ class DICompositeType : public DIType {
12851283
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
12861284
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
12871285
uint64_t OffsetInBits, Metadata *SpecificationOf,
1288-
uint32_t NumExtraInhabitants, APInt SpareBitsMask, DIFlags Flags,
1286+
uint32_t NumExtraInhabitants, DIFlags Flags,
12891287
Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
12901288
Metadata *TemplateParams, Metadata *Discriminator,
12911289
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
@@ -1307,8 +1305,8 @@ class DICompositeType : public DIType {
13071305
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
13081306
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
13091307
uint64_t OffsetInBits, Metadata *SpecificationOf,
1310-
uint32_t NumExtraInhabitants, APInt SpareBitsMask, DIFlags Flags,
1311-
Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1308+
uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1309+
unsigned RuntimeLang, Metadata *VTableHolder,
13121310
Metadata *TemplateParams, Metadata *Discriminator,
13131311
Metadata *DataLocation, Metadata *Associated,
13141312
Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
@@ -1325,7 +1323,6 @@ class DICompositeType : public DIType {
13251323
}
13261324
StringRef getIdentifier() const { return getStringOperand(7); }
13271325
unsigned getRuntimeLang() const { return RuntimeLang; }
1328-
const APInt &getSpareBitsMask() const { return SpareBitsMask; }
13291326

13301327
Metadata *getRawBaseType() const { return getOperand(3); }
13311328
Metadata *getRawElements() const { return getOperand(4); }

llvm/lib/AsmParser/LLParser.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5433,8 +5433,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54335433
OPTIONAL(rank, MDSignedOrMDField, ); \
54345434
OPTIONAL(annotations, MDField, ); \
54355435
OPTIONAL(num_extra_inhabitants, MDUnsignedField, (0, UINT32_MAX)); \
5436-
OPTIONAL(specification_of, MDField, ); \
5437-
OPTIONAL(spare_bits_mask, MDAPSIntField, );
5436+
OPTIONAL(specification_of, MDField, );
54385437
PARSE_MD_FIELDS();
54395438
#undef VISIT_MD_FIELDS
54405439

@@ -5450,11 +5449,10 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54505449
if (auto *CT = DICompositeType::buildODRType(
54515450
Context, *identifier.Val, tag.Val, name.Val, file.Val, line.Val,
54525451
scope.Val, baseType.Val, size.Val, align.Val, offset.Val,
5453-
specification_of.Val, num_extra_inhabitants.Val,
5454-
spare_bits_mask.Val, flags.Val, elements.Val, runtimeLang.Val,
5455-
vtableHolder.Val, templateParams.Val, discriminator.Val,
5456-
dataLocation.Val, associated.Val, allocated.Val, Rank,
5457-
annotations.Val)) {
5452+
specification_of.Val, num_extra_inhabitants.Val, flags.Val,
5453+
elements.Val, runtimeLang.Val, vtableHolder.Val, templateParams.Val,
5454+
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val,
5455+
Rank, annotations.Val)) {
54585456
Result = CT;
54595457
return false;
54605458
}
@@ -5467,8 +5465,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54675465
size.Val, align.Val, offset.Val, flags.Val, elements.Val,
54685466
runtimeLang.Val, vtableHolder.Val, templateParams.Val, identifier.Val,
54695467
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val, Rank,
5470-
annotations.Val, specification_of.Val, num_extra_inhabitants.Val,
5471-
spare_bits_mask.Val));
5468+
annotations.Val, specification_of.Val, num_extra_inhabitants.Val));
54725469
return false;
54735470
}
54745471

llvm/lib/Bitcode/Reader/MetadataLoader.cpp

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,13 +1602,10 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
16021602
break;
16031603
}
16041604
case bitc::METADATA_COMPOSITE_TYPE: {
1605-
// The last field is a variable sized APInt, so the metadata loader can't
1606-
// reliably check the end for this record.
16071605
if (Record.size() < 16)
16081606
return error("Invalid record");
16091607

16101608
IsDistinct = Record[0] & 1;
1611-
bool IsBigInt = (Record[0] >> 3) & 1;
16121609
// If we have a UUID and this is not a forward declaration, lookup the
16131610
// mapping.
16141611
IsDistinct = Record[0] & 0x1;
@@ -1690,28 +1687,13 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
16901687
}
16911688
}
16921689
DICompositeType *CT = nullptr;
1693-
APInt SpareBitsMask;
1694-
// SpareBitsMask is an optional field so the metadata loader has to check if
1695-
// it was emitted before accessing it.
1696-
if (Record.size() > 24) {
1697-
if (IsBigInt) {
1698-
const uint64_t BitWidth = Record[24];
1699-
const size_t NumWords = Record.size() - 3;
1700-
SpareBitsMask =
1701-
readWideAPInt(ArrayRef(&Record[25], NumWords), BitWidth);
1702-
} else {
1703-
const uint64_t IntValue = Record[24];
1704-
SpareBitsMask = APInt(64, IntValue);
1705-
}
1706-
}
1707-
17081690
if (Identifier)
17091691
CT = DICompositeType::buildODRType(
17101692
Context, *Identifier, Tag, Name, File, Line, Scope, BaseType,
17111693
SizeInBits, AlignInBits, OffsetInBits, SpecificationOf,
1712-
NumExtraInhabitants, SpareBitsMask, Flags, Elements, RuntimeLang,
1713-
VTableHolder, TemplateParams, Discriminator, DataLocation, Associated,
1714-
Allocated, Rank, Annotations);
1694+
NumExtraInhabitants, Flags, Elements, RuntimeLang, VTableHolder,
1695+
TemplateParams, Discriminator, DataLocation, Associated, Allocated,
1696+
Rank, Annotations);
17151697

17161698
// Create a node if we didn't get a lazy ODR type.
17171699
if (!CT)
@@ -1721,7 +1703,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
17211703
Elements, RuntimeLang, VTableHolder, TemplateParams,
17221704
Identifier, Discriminator, DataLocation, Associated,
17231705
Allocated, Rank, Annotations, SpecificationOf,
1724-
NumExtraInhabitants, SpareBitsMask));
1706+
NumExtraInhabitants));
17251707
if (!IsNotUsedInTypeRef && Identifier)
17261708
MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
17271709

llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1903,14 +1903,9 @@ void ModuleBitcodeWriter::writeDICompositeType(
19031903
const DICompositeType *N, SmallVectorImpl<uint64_t> &Record,
19041904
unsigned Abbrev) {
19051905

1906-
APInt SpareBitsMask = N->getSpareBitsMask();
1907-
unsigned IsWideAPInt = 0;;
1908-
if (!SpareBitsMask.isZero() && SpareBitsMask.getBitWidth() > 64)
1909-
IsWideAPInt = 1 << 3;
19101906

19111907
const unsigned IsNotUsedInOldTypeRef = 0x2;
1912-
Record.push_back(IsWideAPInt | IsNotUsedInOldTypeRef |
1913-
(unsigned)N->isDistinct());
1908+
Record.push_back(IsNotUsedInOldTypeRef | (unsigned)N->isDistinct());
19141909
Record.push_back(N->getTag());
19151910
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
19161911
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
@@ -1935,17 +1930,6 @@ void ModuleBitcodeWriter::writeDICompositeType(
19351930
Record.push_back(N->getNumExtraInhabitants());
19361931
Record.push_back(VE.getMetadataOrNullID(N->getRawSpecificationOf()));
19371932

1938-
1939-
if (!SpareBitsMask.isZero()) {
1940-
if (IsWideAPInt) {
1941-
Record.push_back(SpareBitsMask.getBitWidth());
1942-
emitWideAPInt(Record, SpareBitsMask);
1943-
} else {
1944-
uint64_t V = SpareBitsMask.getZExtValue();
1945-
Record.push_back(V);
1946-
}
1947-
}
1948-
19491933
Stream.EmitRecord(bitc::METADATA_COMPOSITE_TYPE, Record, Abbrev);
19501934
Record.clear();
19511935
}

llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,14 +1103,7 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
11031103
addUInt(Buffer, dwarf::DW_AT_APPLE_num_extra_inhabitants,
11041104
std::nullopt, NumExtraInhabitants);
11051105

1106-
} else if (Tag == dwarf::DW_TAG_variant_part) {
1107-
auto SpareBitsMask = CTy->getSpareBitsMask();
1108-
if (!SpareBitsMask.isZero())
1109-
addConstantValue(Buffer, SpareBitsMask, false,
1110-
dwarf::DW_AT_APPLE_spare_bits_mask);
1111-
if (auto OffsetInBits = CTy->getOffsetInBits())
1112-
addUInt(Buffer, dwarf::DW_AT_bit_offset, std::nullopt, OffsetInBits);
1113-
}
1106+
}
11141107
}
11151108

11161109
void DwarfUnit::constructTemplateTypeParameterDIE(

llvm/lib/IR/AsmWriter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,8 +2202,6 @@ static void writeDICompositeType(raw_ostream &Out, const DICompositeType *N,
22022202
Printer.printInt("align", N->getAlignInBits());
22032203
Printer.printInt("offset", N->getOffsetInBits());
22042204
Printer.printInt("num_extra_inhabitants", N->getNumExtraInhabitants());
2205-
if (!N->getSpareBitsMask().isZero())
2206-
Printer.printAPInt("spare_bits_mask", N->getSpareBitsMask(), true, false);
22072205
Printer.printDIFlags("flags", N->getFlags());
22082206
Printer.printMetadata("elements", N->getRawElements());
22092207
Printer.printDwarfEnum("runtimeLang", N->getRuntimeLang(),

llvm/lib/IR/DIBuilder.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -546,17 +546,17 @@ DICompositeType *DIBuilder::createUnionType(
546546
return R;
547547
}
548548

549-
DICompositeType *DIBuilder::createVariantPart(
550-
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
551-
uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags,
552-
DIDerivedType *Discriminator, DINodeArray Elements,
553-
StringRef UniqueIdentifier, uint64_t OffsetInBits, APInt SpareBitsMask) {
549+
DICompositeType *
550+
DIBuilder::createVariantPart(DIScope *Scope, StringRef Name, DIFile *File,
551+
unsigned LineNumber, uint64_t SizeInBits,
552+
uint32_t AlignInBits, DINode::DIFlags Flags,
553+
DIDerivedType *Discriminator, DINodeArray Elements,
554+
StringRef UniqueIdentifier) {
554555
auto *R = DICompositeType::get(
555556
VMContext, dwarf::DW_TAG_variant_part, Name, File, LineNumber,
556-
getNonCompileUnitScope(Scope), nullptr, SizeInBits, AlignInBits,
557-
OffsetInBits, Flags, Elements, 0, nullptr, nullptr, UniqueIdentifier,
558-
nullptr, 0, Discriminator, nullptr, nullptr, nullptr, {}, {},
559-
SpareBitsMask);
557+
getNonCompileUnitScope(Scope), nullptr, SizeInBits, AlignInBits, 0, Flags,
558+
Elements, 0, nullptr, nullptr, UniqueIdentifier, nullptr, 0,
559+
Discriminator, nullptr, nullptr, nullptr, {}, {});
560560
trackIfUnresolved(R);
561561
return R;
562562
}

0 commit comments

Comments
 (0)