[llvm] r203057 - DebugInfo: Shrink pubnames/pubtypes in the presence of type units by only emitting pub sections for compile units

David Blaikie dblaikie at gmail.com
Wed Mar 5 17:42:00 PST 2014


Author: dblaikie
Date: Wed Mar  5 19:42:00 2014
New Revision: 203057

URL: http://llvm.org/viewvc/llvm-project?rev=203057&view=rev
Log:
DebugInfo: Shrink pubnames/pubtypes in the presence of type units by only emitting pub sections for compile units

Modified:
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
    llvm/trunk/test/DebugInfo/X86/generate-odr-hash.ll

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=203057&r1=203056&r2=203057&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Mar  5 19:42:00 2014
@@ -2310,10 +2310,10 @@ void DwarfDebug::emitDebugPubNames(bool
       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
                : Asm->getObjFileLowering().getDwarfPubNamesSection();
 
-  DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
-  const SmallVectorImpl<DwarfUnit *> &Units = Holder.getUnits();
-  for (unsigned i = 0; i != Units.size(); ++i) {
-    DwarfUnit *TheU = Units[i];
+  for (const auto &NU : CUMap) {
+    DwarfCompileUnit *TheU = NU.second;
+    if (auto Skeleton = static_cast<DwarfCompileUnit *>(TheU->getSkeleton()))
+      TheU = Skeleton;
     unsigned ID = TheU->getUniqueID();
 
     // Start the dwarf pubnames section.
@@ -2374,10 +2374,10 @@ void DwarfDebug::emitDebugPubTypes(bool
       GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
                : Asm->getObjFileLowering().getDwarfPubTypesSection();
 
-  DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
-  const SmallVectorImpl<DwarfUnit *> &Units = Holder.getUnits();
-  for (unsigned i = 0; i != Units.size(); ++i) {
-    DwarfUnit *TheU = Units[i];
+  for (const auto &NU : CUMap) {
+    DwarfCompileUnit *TheU = NU.second;
+    if (auto Skeleton = static_cast<DwarfCompileUnit *>(TheU->getSkeleton()))
+      TheU = Skeleton;
     unsigned ID = TheU->getUniqueID();
 
     // Start the dwarf pubtypes section.

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=203057&r1=203056&r2=203057&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Mar  5 19:42:00 2014
@@ -958,6 +958,8 @@ DIE *DwarfUnit::getOrCreateTypeDIE(const
   // Create new type.
   TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
 
+  updateAcceleratorTables(Context, Ty, TyDIE);
+
   if (Ty.isBasicType())
     constructTypeDIE(*TyDIE, DIBasicType(Ty));
   else if (Ty.isCompositeType()) {
@@ -974,8 +976,6 @@ DIE *DwarfUnit::getOrCreateTypeDIE(const
     constructTypeDIE(*TyDIE, DIDerivedType(Ty));
   }
 
-  updateAcceleratorTables(Context, Ty, TyDIE);
-
   return TyDIE;
 }
 

Modified: llvm/trunk/test/DebugInfo/X86/generate-odr-hash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/generate-odr-hash.ll?rev=203057&r1=203056&r2=203057&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/generate-odr-hash.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/generate-odr-hash.ll Wed Mar  5 19:42:00 2014
@@ -53,20 +53,25 @@
 ; FISSION-LABEL: .debug_info.dwo contents:
 ; CHECK: Compile Unit: length = [[CU_SIZE:[0-9a-f]+]]
 
-; CHECK: DW_TAG_structure_type
+; CHECK: [[BAR:^0x........]]: DW_TAG_structure_type
 ; CHECK-NEXT: DW_AT_declaration
-; CHECK-NEXT: DW_AT_signature
-; CHECK: DW_TAG_class_type
+; CHECK-NEXT: DW_AT_signature {{.*}} (0x1d02f3be30cc5688)
+; CHECK: [[FLUFFY:^0x........]]: DW_TAG_class_type
 ; CHECK-NEXT: DW_AT_declaration
-; CHECK-NEXT: DW_AT_signature
+; CHECK-NEXT: DW_AT_signature {{.*}} (0xb04af47397402e77)
 
 ; Ensure the CU-local type 'walrus' is not placed in a type unit.
-; CHECK: DW_TAG_structure_type
+; CHECK: [[WALRUS:^0x........]]: DW_TAG_structure_type
 ; CHECK-NEXT: DW_AT_name{{.*}}"walrus"
 ; CHECK-NEXT: DW_AT_byte_size
 ; CHECK-NEXT: DW_AT_decl_file
 ; CHECK-NEXT: DW_AT_decl_line
 
+
+; CHECK: [[WOMBAT:^0x........]]: DW_TAG_structure_type
+; CHECK-NEXT: DW_AT_declaration
+; CHECK-NEXT: DW_AT_signature {{.*}} (0xfd756cee88f8a118)
+
 ; FISSION-LABEL: .debug_types contents:
 ; FISSION-NOT: type_signature
 ; FISSION-LABEL: type_signature = 0x1d02f3be30cc5688
@@ -142,25 +147,10 @@
 ; Don't emit pubtype entries for type DIEs in the compile unit that just indirect to a type unit.
 ; CHECK-NEXT: unit_size = [[CU_SIZE]]
 ; CHECK-NEXT: Offset Name
-; CHECK-NEXT: "walrus"
-; Type unit for 'bar'
-; SINGLE-NEXT: unit_size = 0x00000027
-; FISSION-NEXT: unit_size = 0x00000028
-; CHECK-NEXT: Offset Name
-; CHECK-NEXT: "bar"
-; SINGLE-NEXT: unit_size = 0x00000061
-; FISSION-NEXT: unit_size = 0x00000028
-; CHECK-NEXT: Offset Name
-; CHECK-NEXT: "int"
-; CHECK-NEXT: "echidna::capybara::mongoose::fluffy"
-; SINGLE-NEXT: unit_size = 0x0000003e
-; FISSION-NEXT: unit_size = 0x00000028
-; CHECK-NEXT: Offset Name
-; CHECK-NEXT: "wombat"
-; SINGLE-NEXT: unit_size = 0x0000004f
-; FISSION-NEXT: unit_size = 0x00000028
-; CHECK-NEXT: Offset Name
-; CHECK-NEXT: "int"
+; CHECK-NEXT: [[BAR]] "bar"
+; CHECK-NEXT: [[WOMBAT]] "wombat"
+; CHECK-NEXT: [[FLUFFY]] "echidna::capybara::mongoose::fluffy"
+; CHECK-NEXT: [[WALRUS]] "walrus"
 
 %struct.bar = type { i8 }
 %"class.echidna::capybara::mongoose::fluffy" = type { i32, i32 }





More information about the llvm-commits mailing list