Skip to content

Commit f49c61d

Browse files
authored
Merge pull request #9535 from augusto2112/next-a1bc71065db47
[DebugInfo] Remove spare bits mask from LLVM IR and DWARF
2 parents 3ff8d55 + f6295ec commit f49c61d

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
@@ -5442,8 +5442,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54425442
OPTIONAL(rank, MDSignedOrMDField, ); \
54435443
OPTIONAL(annotations, MDField, ); \
54445444
OPTIONAL(num_extra_inhabitants, MDUnsignedField, (0, UINT32_MAX)); \
5445-
OPTIONAL(specification_of, MDField, ); \
5446-
OPTIONAL(spare_bits_mask, MDAPSIntField, );
5445+
OPTIONAL(specification_of, MDField, );
54475446
PARSE_MD_FIELDS();
54485447
#undef VISIT_MD_FIELDS
54495448

@@ -5459,11 +5458,10 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54595458
if (auto *CT = DICompositeType::buildODRType(
54605459
Context, *identifier.Val, tag.Val, name.Val, file.Val, line.Val,
54615460
scope.Val, baseType.Val, size.Val, align.Val, offset.Val,
5462-
specification_of.Val, num_extra_inhabitants.Val,
5463-
spare_bits_mask.Val, flags.Val, elements.Val, runtimeLang.Val,
5464-
vtableHolder.Val, templateParams.Val, discriminator.Val,
5465-
dataLocation.Val, associated.Val, allocated.Val, Rank,
5466-
annotations.Val)) {
5461+
specification_of.Val, num_extra_inhabitants.Val, flags.Val,
5462+
elements.Val, runtimeLang.Val, vtableHolder.Val, templateParams.Val,
5463+
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val,
5464+
Rank, annotations.Val)) {
54675465
Result = CT;
54685466
return false;
54695467
}
@@ -5476,8 +5474,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54765474
size.Val, align.Val, offset.Val, flags.Val, elements.Val,
54775475
runtimeLang.Val, vtableHolder.Val, templateParams.Val, identifier.Val,
54785476
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val, Rank,
5479-
annotations.Val, specification_of.Val, num_extra_inhabitants.Val,
5480-
spare_bits_mask.Val));
5477+
annotations.Val, specification_of.Val, num_extra_inhabitants.Val));
54815478
return false;
54825479
}
54835480

llvm/lib/Bitcode/Reader/MetadataLoader.cpp

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

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

17141696
// Create a node if we didn't get a lazy ODR type.
17151697
if (!CT)
@@ -1719,7 +1701,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
17191701
Elements, RuntimeLang, VTableHolder, TemplateParams,
17201702
Identifier, Discriminator, DataLocation, Associated,
17211703
Allocated, Rank, Annotations, SpecificationOf,
1722-
NumExtraInhabitants, SpareBitsMask));
1704+
NumExtraInhabitants));
17231705
if (!IsNotUsedInTypeRef && Identifier)
17241706
MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
17251707

llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

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

1926-
APInt SpareBitsMask = N->getSpareBitsMask();
1927-
unsigned IsWideAPInt = 0;;
1928-
if (!SpareBitsMask.isZero() && SpareBitsMask.getBitWidth() > 64)
1929-
IsWideAPInt = 1 << 3;
19301926

19311927
const unsigned IsNotUsedInOldTypeRef = 0x2;
1932-
Record.push_back(IsWideAPInt | IsNotUsedInOldTypeRef |
1933-
(unsigned)N->isDistinct());
1928+
Record.push_back(IsNotUsedInOldTypeRef | (unsigned)N->isDistinct());
19341929
Record.push_back(N->getTag());
19351930
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
19361931
Record.push_back(VE.getMetadataOrNullID(N->getFile()));
@@ -1955,17 +1950,6 @@ void ModuleBitcodeWriter::writeDICompositeType(
19551950
Record.push_back(N->getNumExtraInhabitants());
19561951
Record.push_back(VE.getMetadataOrNullID(N->getRawSpecificationOf()));
19571952

1958-
1959-
if (!SpareBitsMask.isZero()) {
1960-
if (IsWideAPInt) {
1961-
Record.push_back(SpareBitsMask.getBitWidth());
1962-
emitWideAPInt(Record, SpareBitsMask);
1963-
} else {
1964-
uint64_t V = SpareBitsMask.getZExtValue();
1965-
Record.push_back(V);
1966-
}
1967-
}
1968-
19691953
Stream.EmitRecord(bitc::METADATA_COMPOSITE_TYPE, Record, Abbrev);
19701954
Record.clear();
19711955
}

llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp

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

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

11171110
void DwarfUnit::constructTemplateTypeParameterDIE(

llvm/lib/IR/AsmWriter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2218,8 +2218,6 @@ static void writeDICompositeType(raw_ostream &Out, const DICompositeType *N,
22182218
Printer.printInt("align", N->getAlignInBits());
22192219
Printer.printInt("offset", N->getOffsetInBits());
22202220
Printer.printInt("num_extra_inhabitants", N->getNumExtraInhabitants());
2221-
if (!N->getSpareBitsMask().isZero())
2222-
Printer.printAPInt("spare_bits_mask", N->getSpareBitsMask(), true, false);
22232221
Printer.printDIFlags("flags", N->getFlags());
22242222
Printer.printMetadata("elements", N->getRawElements());
22252223
Printer.printDwarfEnum("runtimeLang", N->getRuntimeLang(),

llvm/lib/IR/DIBuilder.cpp

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

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

0 commit comments

Comments
 (0)