[llvm] r304020 - DebugInfo: Do not emit empty CUs

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Fri May 26 14:03:16 PDT 2017


Hi David,

I think this change may be causing a test failure on our incremental bot:

    http://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-incremental_check/36948/

The affected test started passing after I reverted your commit locally. Is there a chance your change drops the DICompileUnit defined in the test file? It looks like there's a "@debug_info" function which tries to access that information in some way (though I admit, I don't really follow what's happening here).

Here is the test error:

******************** TEST 'LLVM :: CodeGen/ARM/arm-shrink-wrapping.ll' FAILED ********************

Script:
--
/Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/llc /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll -o - -enable-shrink-wrap=true -ifcvt-fn-start=1 -ifcvt-fn-stop=0 -mtriple=armv7-apple-ios       | /Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/FileCheck /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll --check-prefix=CHECK --check-prefix=ARM --check-prefix=ENABLE --check-prefix=ARM-ENABLE
/Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/llc /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll -o - -enable-shrink-wrap=false -ifcvt-fn-start=1 -ifcvt-fn-stop=0 -mtriple=armv7-apple-ios       | /Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/FileCheck /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll --check-prefix=CHECK --check-prefix=ARM --check-prefix=DISABLE --check-prefix=ARM-DISABLE
/Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/llc /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll -o - -enable-shrink-wrap=true -ifcvt-fn-start=1 -ifcvt-fn-stop=0 -mtriple=thumbv7-apple-ios       | /Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/FileCheck /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll --check-prefix=CHECK --check-prefix=THUMB --check-prefix=ENABLE --check-prefix=THUMB-ENABLE
/Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/llc /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll -o - -enable-shrink-wrap=false -ifcvt-fn-start=1 -ifcvt-fn-stop=0 -mtriple=thumbv7-apple-ios       | /Users/buildslave/jenkins/sharedspace/incremental at 2/clang-build/./bin/FileCheck /Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll --check-prefix=CHECK --check-prefix=THUMB --check-prefix=DISABLE --check-prefix=THUMB-DISABLE
--
Exit Code: 1

Command Output (stderr):
--

/Users/buildslave/jenkins/sharedspace/incremental at 2/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll:659:10: error: expected string not found in input

; CHECK: bl
         ^
<stdin>:375:7: note: scanning from here
 vldr s0, LCPI12_0
      ^
<stdin>:377:2: note: possible intended match here
 bx lr

 ^

best,
vedant


> On May 26, 2017, at 11:52 AM, David Blaikie via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: dblaikie
> Date: Fri May 26 13:52:56 2017
> New Revision: 304020
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=304020&view=rev
> Log:
> DebugInfo: Do not emit empty CUs
> 
> Consistent with GCC and addresses a shortcoming with ThinLTO where many
> imported CUs may end up being empty (because the functions imported from
> them either ended up not being used (and were then discarded, since
> they're imported as available_externally) or optimized away entirely).
> 
> Test cases previously testing empty CUs (either intentionally, or
> because they didn't need anything more complicated) had a trivial 'int'
> or similar basic type added to their retained types list.
> 
> This is a first order approximation - a deeper implementation could do
> things like:
> 
> 1) Be more lazy about construction of the CU - for example if two CUs
> containing a single identical retained type are linked together, with
> this change one of the two CUs will be produced but empty (since a
> duplicate type won't be produced).
> 
> 2) Go further and invert all the CU links the same way the subprogram
> link is inverted - keep named CU lists of retained types, macros, etc,
> and have those link back to the CU. Then if they're emitted, the CU is
> emitted, but never otherwise - this would allow the metadata itself to
> be dropped earlier too, though it seems unlikely that's an important
> optimization as there shouldn't be many CUs relative to the number of
> other entities.
> 
> Added:
>    llvm/trunk/test/DebugInfo/omit-empty.ll
>      - copied, changed from r304018, llvm/trunk/test/DebugInfo/dwo.ll
> Modified:
>    llvm/trunk/include/llvm/IR/Metadata.h
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>    llvm/trunk/test/DebugInfo/Generic/empty.ll
>    llvm/trunk/test/DebugInfo/Generic/nodebug.ll
>    llvm/trunk/test/DebugInfo/Generic/skeletoncu.ll
>    llvm/trunk/test/DebugInfo/X86/debug-loc-offset.ll
>    llvm/trunk/test/DebugInfo/X86/debug-macro.ll
>    llvm/trunk/test/DebugInfo/X86/empty.ll
>    llvm/trunk/test/DebugInfo/X86/fission-hash.ll
>    llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll
>    llvm/trunk/test/DebugInfo/dwo.ll
>    llvm/trunk/test/DebugInfo/skeletoncu.ll
> 
> Modified: llvm/trunk/include/llvm/IR/Metadata.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Metadata.h (original)
> +++ llvm/trunk/include/llvm/IR/Metadata.h Fri May 26 13:52:56 2017
> @@ -1223,6 +1223,7 @@ public:
> 
>   // FIXME: Fix callers and remove condition on N.
>   unsigned size() const { return N ? N->getNumOperands() : 0u; }
> +  bool empty() const { return N ? N->getNumOperands() == 0 : true; }
>   T *operator[](unsigned I) const { return cast_or_null<T>(N->getOperand(I)); }
> 
>   // FIXME: Fix callers and remove condition on N.
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Fri May 26 13:52:56 2017
> @@ -374,7 +374,7 @@ void DwarfDebug::constructAbstractSubpro
> 
>   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
>   // was inlined from another compile unit.
> -  auto &CU = *CUMap.lookup(SP->getUnit());
> +  auto &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
>   if (auto *SkelCU = CU.getSkeleton()) {
>     (shareAcrossDWOCUs() ? CU : SrcCU)
>         .constructAbstractSubprogramScopeDIE(Scope);
> @@ -407,7 +407,9 @@ void DwarfDebug::addGnuPubAttributes(Dwa
> // Create new DwarfCompileUnit for the given metadata node with tag
> // DW_TAG_compile_unit.
> DwarfCompileUnit &
> -DwarfDebug::constructDwarfCompileUnit(const DICompileUnit *DIUnit) {
> +DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) {
> +  if (auto *CU = CUMap.lookup(DIUnit))
> +    return *CU;
>   StringRef FN = DIUnit->getFilename();
>   CompilationDir = DIUnit->getDirectory();
> 
> @@ -540,7 +542,12 @@ void DwarfDebug::beginModule() {
>   }
> 
>   for (DICompileUnit *CUNode : M->debug_compile_units()) {
> -    DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode);
> +    if (CUNode->getEnumTypes().empty() && CUNode->getRetainedTypes().empty() &&
> +        CUNode->getGlobalVariables().empty() &&
> +        CUNode->getImportedEntities().empty() && CUNode->getMacros().empty())
> +      continue;
> +
> +    DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode);
>     for (auto *IE : CUNode->getImportedEntities())
>       CU.addImportedEntity(IE);
> 
> @@ -587,11 +594,12 @@ void DwarfDebug::finishVariableDefinitio
> }
> 
> void DwarfDebug::finishSubprogramDefinitions() {
> -  for (const DISubprogram *SP : ProcessedSPNodes)
> -    if (SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug)
> -      forBothCUs(*CUMap.lookup(SP->getUnit()), [&](DwarfCompileUnit &CU) {
> -        CU.finishSubprogramDefinition(SP);
> -      });
> +  for (const DISubprogram *SP : ProcessedSPNodes) {
> +    assert(SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug);
> +    forBothCUs(
> +        getOrCreateDwarfCompileUnit(SP->getUnit()),
> +        [&](DwarfCompileUnit &CU) { CU.finishSubprogramDefinition(SP); });
> +  }
> }
> 
> void DwarfDebug::finalizeModuleInfo() {
> @@ -1136,12 +1144,10 @@ void DwarfDebug::beginFunctionImpl(const
> 
>   auto *SP = MF->getFunction()->getSubprogram();
>   assert(LScopes.empty() || SP == LScopes.getCurrentFunctionScope()->getScopeNode());
> -  DwarfCompileUnit *TheCU = CUMap.lookup(SP->getUnit());
> -  if (!TheCU) {
> -    assert(SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug &&
> -           "DICompileUnit missing from llvm.dbg.cu?");
> +  if (SP->getUnit()->getEmissionKind() == DICompileUnit::NoDebug)
>     return;
> -  }
> +
> +  DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(SP->getUnit());
> 
>   // Set DwarfDwarfCompileUnitID in MCContext to the Compile Unit this function
>   // belongs to so that we add to the correct per-cu line table in the
> @@ -1150,7 +1156,7 @@ void DwarfDebug::beginFunctionImpl(const
>     // Use a single line table if we are generating assembly.
>     Asm->OutStreamer->getContext().setDwarfCompileUnitID(0);
>   else
> -    Asm->OutStreamer->getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
> +    Asm->OutStreamer->getContext().setDwarfCompileUnitID(CU.getUniqueID());
> 
>   // Record beginning of function.
>   PrologEndLoc = findPrologueEndLoc(MF);
> @@ -1546,6 +1552,9 @@ void DwarfDebug::emitDebugLocEntryLocati
> 
> // Emit locations into the debug loc section.
> void DwarfDebug::emitDebugLoc() {
> +  if (DebugLocs.getLists().empty())
> +    return;
> +
>   // Start the dwarf loc section.
>   Asm->OutStreamer->SwitchSection(
>       Asm->getObjFileLowering().getDwarfLocSection());
> @@ -1757,6 +1766,9 @@ void DwarfDebug::emitDebugARanges() {
> 
> /// Emit address ranges into a debug ranges section.
> void DwarfDebug::emitDebugRanges() {
> +  if (CUMap.empty())
> +    return;
> +
>   // Start the dwarf ranges section.
>   Asm->OutStreamer->SwitchSection(
>       Asm->getObjFileLowering().getDwarfRangesSection());
> @@ -1836,6 +1848,9 @@ void DwarfDebug::emitMacroFile(DIMacroFi
> 
> /// Emit macros into a debug macinfo section.
> void DwarfDebug::emitDebugMacinfo() {
> +  if (CUMap.empty())
> +    return;
> +
>   // Start the dwarf macinfo section.
>   Asm->OutStreamer->SwitchSection(
>       Asm->getObjFileLowering().getDwarfMacinfoSection());
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Fri May 26 13:52:56 2017
> @@ -416,7 +416,7 @@ class DwarfDebug : public DebugHandlerBa
> 
>   /// Create new DwarfCompileUnit for the given metadata node with tag
>   /// DW_TAG_compile_unit.
> -  DwarfCompileUnit &constructDwarfCompileUnit(const DICompileUnit *DIUnit);
> +  DwarfCompileUnit &getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit);
> 
>   /// Construct imported_module or imported_declaration DIE.
>   void constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
> 
> Modified: llvm/trunk/test/DebugInfo/Generic/empty.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/empty.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/Generic/empty.ll (original)
> +++ llvm/trunk/test/DebugInfo/Generic/empty.ll Fri May 26 13:52:56 2017
> @@ -15,9 +15,6 @@
> ; CHECK: .debug_pubnames contents:
> ; CHECK-NOT: {{^}}0x
> 
> -; CHECK: .debug_pubtypes contents:
> -; CHECK-NOT: {{^}}0x
> -
> ; CHECK: contents:
> 
> ; Don't emit DW_AT_addr_base when there are no addresses.
> @@ -26,8 +23,10 @@
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!5}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.1 (trunk 143523)", isOptimized: true, emissionKind: FullDebug, file: !4, enums: !2, retainedTypes: !2, globals: !2)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.1 (trunk 143523)", isOptimized: true, emissionKind: FullDebug, file: !4, enums: !2, retainedTypes: !6, globals: !2)
> !2 = !{}
> !3 = !DIFile(filename: "empty.c", directory: "/home/nlewycky")
> !4 = !DIFile(filename: "empty.c", directory: "/home/nlewycky")
> !5 = !{i32 1, !"Debug Info Version", i32 3}
> +!6 = !{!7}
> +!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> Modified: llvm/trunk/test/DebugInfo/Generic/nodebug.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/nodebug.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/Generic/nodebug.ll (original)
> +++ llvm/trunk/test/DebugInfo/Generic/nodebug.ll Fri May 26 13:52:56 2017
> @@ -42,7 +42,7 @@ attributes #0 = { uwtable "less-precise-
> !llvm.module.flags = !{!8, !9}
> !llvm.ident = !{!10}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !12, globals: !2, imports: !2)
> !1 = !DIFile(filename: "nodebug.cpp", directory: "/tmp/dbginfo")
> !2 = !{}
> !4 = distinct !DISubprogram(name: "f1", linkageName: "_Z2f1v", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 2, file: !1, scope: !5, type: !6, variables: !2)
> @@ -53,3 +53,5 @@ attributes #0 = { uwtable "less-precise-
> !9 = !{i32 2, !"Debug Info Version", i32 3}
> !10 = !{!"clang version 3.5.0 "}
> !11 = !DILocation(line: 3, scope: !4)
> +!12 = !{!13}
> +!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> Modified: llvm/trunk/test/DebugInfo/Generic/skeletoncu.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/skeletoncu.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/Generic/skeletoncu.ll (original)
> +++ llvm/trunk/test/DebugInfo/Generic/skeletoncu.ll Fri May 26 13:52:56 2017
> @@ -7,9 +7,11 @@
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!3, !4}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, splitDebugFilename: "my.dwo", emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2, dwoId: 43981)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, splitDebugFilename: "my.dwo", emissionKind: FullDebug, enums: !2, retainedTypes: !5, globals: !2, imports: !2, dwoId: 43981)
> !1 = !DIFile(filename: "<stdin>", directory: "/")
> !2 = !{}
> !3 = !{i32 2, !"Dwarf Version", i32 4}
> !4 = !{i32 2, !"Debug Info Version", i32 3}
> +!5 = !{!6}
> +!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> 
> Modified: llvm/trunk/test/DebugInfo/X86/debug-loc-offset.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-loc-offset.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/debug-loc-offset.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/debug-loc-offset.ll Fri May 26 13:52:56 2017
> @@ -35,10 +35,6 @@
> ; CHECK: DW_AT_low_pc
> ; CHECK: DW_AT_high_pc
> 
> -; CHECK: DW_TAG_compile_unit
> -; CHECK: DW_AT_low_pc
> -; CHECK: DW_AT_high_pc
> -
> ; CHECK: DW_TAG_subprogram
> ; CHECK-NOT: DW_TAG
> ; CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3baz1A"
> @@ -53,6 +49,10 @@
> ; CHECK: DW_AT_location [DW_FORM_exprloc]
> ; CHECK-NOT: DW_AT_location
> 
> +; CHECK: DW_TAG_compile_unit
> +; CHECK: DW_AT_low_pc
> +; CHECK: DW_AT_high_pc
> +
> ; CHECK: .debug_loc contents:
> ; CHECK: 0x00000000: Beginning address offset: 0x0000000000000000
> ; CHECK:                Ending address offset: 0x0000000000000017
> 
> Modified: llvm/trunk/test/DebugInfo/X86/debug-macro.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-macro.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/debug-macro.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/debug-macro.ll Fri May 26 13:52:56 2017
> @@ -1,40 +1,38 @@
> -; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-dump=info - | FileCheck --check-prefix=CHECK-INFO %s
> -; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-dump=macro - | FileCheck --check-prefix=CHECK-MACRO %s
> -; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-dump=line - | FileCheck --check-prefix=CHECK-LINE %s
> -
> -
> -; CHECK-INFO: .debug_info contents:
> -; CHECK-INFO: DW_TAG_compile_unit
> -; CHECK-INFO-NOT: DW_TAG
> -; CHECK-INFO:   DW_AT_name {{.*}}"debug-macro.cpp")
> -; CHECK-INFO:   DW_AT_macro_info {{.*}}(0x00000000)
> -; CHECK-INFO: DW_TAG_compile_unit
> -; CHECK-INFO-NOT: DW_TAG
> -; CHECK-INFO:   DW_AT_name {{.*}}"debug-macro1.cpp")
> -; CHECK-INFO:   DW_AT_macro_info {{.*}}(0x00000044)
> -; CHECK-INFO: DW_TAG_compile_unit
> -; CHECK-INFO-NOT: DW_TAG
> -; CHECK-INFO:   DW_AT_name {{.*}}"debug-macro2.cpp")
> -; CHECK-INFO-NOT: DW_AT_macro_info
> -
> -; CHECK-MACRO:     .debug_macinfo contents:
> -; CHECK-MACRO-NEXT: DW_MACINFO_define - lineno: 0 macro: NameCMD ValueCMD
> -; CHECK-MACRO-NEXT: DW_MACINFO_start_file - lineno: 0 filenum: 1
> -; CHECK-MACRO-NEXT:   DW_MACINFO_start_file - lineno: 9 filenum: 2
> -; CHECK-MACRO-NEXT:     DW_MACINFO_define - lineno: 1 macro: NameDef Value
> -; CHECK-MACRO-NEXT:     DW_MACINFO_undef - lineno: 11 macro: NameUndef
> -; CHECK-MACRO-NEXT:   DW_MACINFO_end_file
> -; CHECK-MACRO-NEXT:   DW_MACINFO_undef - lineno: 10 macro: NameUndef2
> -; CHECK-MACRO-NEXT: DW_MACINFO_end_file
> -; CHECK-MACRO-NEXT: DW_MACINFO_start_file - lineno: 0 filenum: 1
> -; CHECK-MACRO-NEXT: DW_MACINFO_end_file
> -
> -; CHECK-LINE: .debug_line contents:
> -; CHECK-LINE: Dir  Mod Time   File Len   File Name
> -; CHECK-LINE: file_names[  1] {{.*}}debug-macro.cpp
> -; CHECK-LINE: file_names[  2] {{.*}}debug-macro.h
> -; CHECK-LINE: Dir  Mod Time   File Len   File Name
> -; CHECK-LINE: file_names[  1] {{.*}}debug-macro1.cpp
> +; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump - | FileCheck %s
> +
> +
> +; CHECK-LABEL: .debug_info contents:
> +; CHECK: DW_TAG_compile_unit
> +; CHECK-NOT: DW_TAG
> +; CHECK:   DW_AT_name {{.*}}"debug-macro.cpp")
> +; CHECK:   DW_AT_macro_info {{.*}}(0x00000000)
> +; CHECK: DW_TAG_compile_unit
> +; CHECK-NOT: DW_TAG
> +; CHECK:   DW_AT_name {{.*}}"debug-macro1.cpp")
> +; CHECK:   DW_AT_macro_info {{.*}}(0x00000044)
> +; CHECK: DW_TAG_compile_unit
> +; CHECK-NOT: DW_TAG
> +; CHECK:   DW_AT_name {{.*}}"debug-macro2.cpp")
> +; CHECK-NOT: DW_AT_macro_info
> +
> +; CHECK-LABEL:     .debug_macinfo contents:
> +; CHECK-NEXT: DW_MACINFO_define - lineno: 0 macro: NameCMD ValueCMD
> +; CHECK-NEXT: DW_MACINFO_start_file - lineno: 0 filenum: 1
> +; CHECK-NEXT:   DW_MACINFO_start_file - lineno: 9 filenum: 2
> +; CHECK-NEXT:     DW_MACINFO_define - lineno: 1 macro: NameDef Value
> +; CHECK-NEXT:     DW_MACINFO_undef - lineno: 11 macro: NameUndef
> +; CHECK-NEXT:   DW_MACINFO_end_file
> +; CHECK-NEXT:   DW_MACINFO_undef - lineno: 10 macro: NameUndef2
> +; CHECK-NEXT: DW_MACINFO_end_file
> +; CHECK-NEXT: DW_MACINFO_start_file - lineno: 0 filenum: 1
> +; CHECK-NEXT: DW_MACINFO_end_file
> +
> +; CHECK-LABEL: .debug_line contents:
> +; CHECK: Dir  Mod Time   File Len   File Name
> +; CHECK: file_names[  1] {{.*}}debug-macro.cpp
> +; CHECK: file_names[  2] {{.*}}debug-macro.h
> +; CHECK: Dir  Mod Time   File Len   File Name
> +; CHECK: file_names[  1] {{.*}}debug-macro1.cpp
> 
> !llvm.dbg.cu = !{!0, !16, !20}
> !llvm.module.flags = !{!13, !14}
> @@ -58,10 +56,14 @@
> !14 = !{i32 1, !"Debug Info Version", i32 3}
> !15 = !{!"clang version 3.5.0 "}
> 
> -!16 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !17, enums: !2, retainedTypes: !2, globals: !2, imports: !2, macros: !18)
> +!16 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !17, enums: !2, retainedTypes: !22, globals: !2, imports: !2, macros: !18)
> !17 = !DIFile(filename: "debug-macro1.cpp", directory: "/")
> !18 = !{!19}
> !19 = !DIMacroFile(line: 0, file: !17, nodes: !2)
> 
> -!20 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !21, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
> +!20 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !21, enums: !2, retainedTypes: !24, globals: !2, imports: !2)
> !21 = !DIFile(filename: "debug-macro2.cpp", directory: "/")
> +!22 = !{!23}
> +!23 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> +!24 = !{!25}
> +!25 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
> 
> Modified: llvm/trunk/test/DebugInfo/X86/empty.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/empty.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/empty.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/empty.ll Fri May 26 13:52:56 2017
> @@ -12,20 +12,16 @@
> ; CHECK-NEXT: Offset
> ; CHECK-NEXT: {{^$}}
> 
> -; CHECK: .debug_pubtypes contents:
> -; CHECK-NEXT: length = 0x0000000e
> -; CHECK-NEXT: Offset
> -; CHECK-NEXT: {{^$}}
> -
> -
> ; Don't emit DW_AT_addr_base when there are no addresses.
> ; FISSION-NOT: DW_AT_GNU_addr_base [DW_FORM_sec_offset]
> 
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!5}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.1 (trunk 143523)", isOptimized: true, emissionKind: FullDebug, file: !4, enums: !2, retainedTypes: !2, globals: !2)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.1 (trunk 143523)", isOptimized: true, emissionKind: FullDebug, file: !4, enums: !2, retainedTypes: !6, globals: !2)
> !2 = !{}
> !3 = !DIFile(filename: "empty.c", directory: "/home/nlewycky")
> !4 = !DIFile(filename: "empty.c", directory: "/home/nlewycky")
> !5 = !{i32 1, !"Debug Info Version", i32 3}
> +!6 = !{!7}
> +!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> Modified: llvm/trunk/test/DebugInfo/X86/fission-hash.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/fission-hash.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/fission-hash.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/fission-hash.ll Fri May 26 13:52:56 2017
> @@ -1,16 +1,18 @@
> ; RUN: llc -split-dwarf-file=foo.dwo -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t
> ; RUN: llvm-dwarfdump -debug-dump=all %t | FileCheck %s
> 
> -; The source is an empty file.
> +; The source is an empty file, modified to include/retain an 'int' type, since empty CUs are omitted.
> 
> -; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x0c1e629c9e5ada4f)
> -; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x0c1e629c9e5ada4f)
> +; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x50d985146a74bb00)
> +; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x50d985146a74bb00)
> 
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!3, !4}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (trunk 188230) (llvm/trunk 188234)", isOptimized: false, splitDebugFilename: "foo.dwo", emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (trunk 188230) (llvm/trunk 188234)", isOptimized: false, splitDebugFilename: "foo.dwo", emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !5, globals: !2, imports: !2)
> !1 = !DIFile(filename: "foo.c", directory: "/usr/local/google/home/echristo/tmp")
> !2 = !{}
> !3 = !{i32 2, !"Dwarf Version", i32 3}
> !4 = !{i32 1, !"Debug Info Version", i32 3}
> +!5 = !{!6}
> +!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/gnu-public-names-empty.ll Fri May 26 13:52:56 2017
> @@ -17,8 +17,10 @@
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!3, !4}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (trunk 191846) (llvm/trunk 191866)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (trunk 191846) (llvm/trunk 191866)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !5, globals: !2, imports: !2)
> !1 = !DIFile(filename: "foo.c", directory: "/usr/local/google/home/echristo/tmp")
> !2 = !{}
> !3 = !{i32 2, !"Dwarf Version", i32 4}
> !4 = !{i32 1, !"Debug Info Version", i32 3}
> +!5 = !{!6}
> +!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> Modified: llvm/trunk/test/DebugInfo/dwo.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/dwo.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/dwo.ll (original)
> +++ llvm/trunk/test/DebugInfo/dwo.ll Fri May 26 13:52:56 2017
> @@ -8,8 +8,10 @@
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!3, !4}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2, dwoId: 43981)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !5, globals: !2, imports: !2, dwoId: 43981)
> !1 = !DIFile(filename: "<stdin>", directory: "/")
> !2 = !{}
> !3 = !{i32 2, !"Dwarf Version", i32 4}
> !4 = !{i32 2, !"Debug Info Version", i32 3}
> +!5 = !{!6}
> +!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> 
> Copied: llvm/trunk/test/DebugInfo/omit-empty.ll (from r304018, llvm/trunk/test/DebugInfo/dwo.ll)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/omit-empty.ll?p2=llvm/trunk/test/DebugInfo/omit-empty.ll&p1=llvm/trunk/test/DebugInfo/dwo.ll&r1=304018&r2=304020&rev=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/dwo.ll (original)
> +++ llvm/trunk/test/DebugInfo/omit-empty.ll Fri May 26 13:52:56 2017
> @@ -1,14 +1,11 @@
> -; RUN: %llc_dwarf %s -filetype=obj -o %t
> -; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
> -; CHECK: DW_TAG_compile_unit
> -; CHECK: DW_AT_GNU_dwo_id {{.*}}abcd
> -; CHECK-NOT: DW_AT_GNU_dwo_name
> -; REQUIRES: default_triple
> +; RUN: %llc_dwarf %s -filetype=obj -o - | llvm-objdump -h - | FileCheck %s
> +
> +; CHECK-NOT: .debug_
> 
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!3, !4}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2, dwoId: 43981)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
> !1 = !DIFile(filename: "<stdin>", directory: "/")
> !2 = !{}
> !3 = !{i32 2, !"Dwarf Version", i32 4}
> 
> Modified: llvm/trunk/test/DebugInfo/skeletoncu.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/skeletoncu.ll?rev=304020&r1=304019&r2=304020&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/skeletoncu.ll (original)
> +++ llvm/trunk/test/DebugInfo/skeletoncu.ll Fri May 26 13:52:56 2017
> @@ -8,9 +8,11 @@
> !llvm.dbg.cu = !{!0}
> !llvm.module.flags = !{!3, !4}
> 
> -!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, splitDebugFilename: "my.dwo", emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2, dwoId: 43981)
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "LLVM", isOptimized: false, runtimeVersion: 2, splitDebugFilename: "my.dwo", emissionKind: FullDebug, enums: !2, retainedTypes: !6, globals: !2, imports: !2, dwoId: 43981)
> !1 = !DIFile(filename: "<stdin>", directory: "/")
> !2 = !{}
> !3 = !{i32 2, !"Dwarf Version", i32 4}
> !4 = !{i32 2, !"Debug Info Version", i32 3}
> +!5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
> +!6 = !{!5}
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list