[PATCH] D14511: Emit discriminator for inlined callsites.
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 9 13:48:10 PST 2015
On Mon, Nov 9, 2015 at 1:29 PM, Dehao Chen via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> danielcdh updated this revision to Diff 39745.
> danielcdh added a comment.
>
> Simplify the testcase.
>
>
> http://reviews.llvm.org/D14511
>
> Files:
> include/llvm/Support/Dwarf.h
> lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> lib/Support/Dwarf.cpp
> test/DebugInfo/Generic/discriminator.ll
>
> Index: test/DebugInfo/Generic/discriminator.ll
> ===================================================================
> --- /dev/null
> +++ test/DebugInfo/Generic/discriminator.ll
> @@ -0,0 +1,49 @@
> +; REQUIRES: object-emission
> +
> +; RUN: %llc_dwarf < %s -filetype=obj | llvm-dwarfdump -debug-dump=info -
> | FileCheck %s
> +
> +; Given the following source, ensure that the discriminator is emitted for
> +; the inlined callsite.
> +
> +;void xyz();
> +;static void bar() __attribute__((always_inline));
>
Doesn't need a separate declaration, just
static __attribute__((always_inline)) void bar() { xyz(); }
should suffice, I think?
> +;static void bar() { xyz(); }
> +;void foo() {
> +; bar(); bar();
> +;}
> +
> +; CHECK: DW_AT_GNU_discriminator
> +
> +; Function Attrs: uwtable
> +define void @_Z3foov() #0 !dbg !4 {
> + tail call void @_Z3xyzv(), !dbg !11
> + tail call void @_Z3xyzv(), !dbg !13
> + ret void, !dbg !16
> +}
> +
> +declare void @_Z3xyzv() #1
> +
> +attributes #0 = { uwtable "disable-tail-calls"="false"
> "less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "target-cpu"="x86-64"
> "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false"
> "use-soft-float"="false" }
> +attributes #1 = { "disable-tail-calls"="false"
> "less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "target-cpu"="x86-64"
> "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false"
> "use-soft-float"="false" }
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!8, !9}
> +!llvm.ident = !{!10}
> +
> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
> producer: "clang version 3.8.0 (trunk 252497)", isOptimized: true,
> runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
> +!1 = !DIFile(filename: "a.cc", directory: "/tmp")
> +!2 = !{}
> +!3 = !{!4, !7}
> +!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope:
> !1, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true,
> scopeLine: 4, flags: DIFlagPrototyped, isOptimized: true, variables: !2)
> +!5 = !DISubroutineType(types: !6)
> +!6 = !{null}
> +!7 = distinct !DISubprogram(name: "bar", linkageName: "_ZL3barv", scope:
> !1, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true,
> scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, variables: !2)
> +!8 = !{i32 2, !"Dwarf Version", i32 4}
> +!9 = !{i32 2, !"Debug Info Version", i32 3}
> +!10 = !{!"clang version 3.8.0 (trunk 252497)"}
> +!11 = !DILocation(line: 3, column: 21, scope: !7, inlinedAt: !12)
> +!12 = distinct !DILocation(line: 5, column: 3, scope: !4)
> +!13 = !DILocation(line: 3, column: 21, scope: !7, inlinedAt: !14)
> +!14 = distinct !DILocation(line: 5, column: 10, scope: !15)
> +!15 = !DILexicalBlockFile(scope: !4, file: !1, discriminator: 1)
> +!16 = !DILocation(line: 6, column: 1, scope: !4)
> Index: lib/Support/Dwarf.cpp
> ===================================================================
> --- lib/Support/Dwarf.cpp
> +++ lib/Support/Dwarf.cpp
> @@ -201,6 +201,7 @@
> case DW_AT_GNU_addr_base: return "DW_AT_GNU_addr_base";
> case DW_AT_GNU_pubnames: return "DW_AT_GNU_pubnames";
> case DW_AT_GNU_pubtypes: return "DW_AT_GNU_pubtypes";
> + case DW_AT_GNU_discriminator: return "DW_AT_GNU_discriminator";
> }
> return nullptr;
> }
> Index: lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> +++ lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> @@ -439,6 +439,9 @@
> addUInt(*ScopeDIE, dwarf::DW_AT_call_file, None,
> getOrCreateSourceID(IA->getFilename(), IA->getDirectory()));
> addUInt(*ScopeDIE, dwarf::DW_AT_call_line, None, IA->getLine());
> + if (IA->getDiscriminator()) {
> + addUInt(*ScopeDIE, dwarf::DW_AT_GNU_discriminator, None,
> IA->getDiscriminator());
> + }
>
> // Add name to the name table, we do this here because we're guaranteed
> // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
> Index: include/llvm/Support/Dwarf.h
> ===================================================================
> --- include/llvm/Support/Dwarf.h
> +++ include/llvm/Support/Dwarf.h
> @@ -238,6 +238,7 @@
> DW_AT_GNU_addr_base = 0x2133,
> DW_AT_GNU_pubnames = 0x2134,
> DW_AT_GNU_pubtypes = 0x2135,
> + DW_AT_GNU_discriminator = 0x2136,
>
> // LLVM project extensions.
> DW_AT_LLVM_include_path = 0x3e00,
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151109/d026b65d/attachment.html>
More information about the llvm-commits
mailing list