Skip to content

Commit f6295ec

Browse files
committed
[DebugInfo] Remove spare bits mask from LLVM IR and DWARF
We are able to calculate the spare bits mask from other information. Remove this from the LLVM IR representation and DWARF. (cherry picked from commit a1bc710)
1 parent 3ff8d55 commit f6295ec

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)