[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