[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