From 06296a65fdbc643089197465f3173a289f86f90c Mon Sep 17 00:00:00 2001 From: Paul Robinson Date: Thu, 7 Sep 2017 22:15:44 +0000 Subject: [PATCH] [DWARF] Line 0 should not have a discriminator. It's meaningless and takes up extra space in the line table. Differential Revision: https://reviews.llvm.org/D37364 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312751 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 4 +- .../X86/dbg-line-0-no-discriminator.ll | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/CodeGen/X86/dbg-line-0-no-discriminator.ll diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 8b2b044a397..e44ad4ea302 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1362,8 +1362,8 @@ void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S, if (auto *Scope = cast_or_null(S)) { Fn = Scope->getFilename(); Dir = Scope->getDirectory(); - if (auto *LBF = dyn_cast(Scope)) - if (getDwarfVersion() >= 4) + if (Line != 0 && getDwarfVersion() >= 4) + if (auto *LBF = dyn_cast(Scope)) Discriminator = LBF->getDiscriminator(); unsigned CUID = Asm->OutStreamer->getContext().getDwarfCompileUnitID(); diff --git a/test/CodeGen/X86/dbg-line-0-no-discriminator.ll b/test/CodeGen/X86/dbg-line-0-no-discriminator.ll new file mode 100644 index 00000000000..e667a552de3 --- /dev/null +++ b/test/CodeGen/X86/dbg-line-0-no-discriminator.ll @@ -0,0 +1,39 @@ +; RUN: llc -filetype=obj -use-unknown-locations=Enable -mtriple=x86_64-unknown-linux %s -o %t +; RUN: llvm-dwarfdump -debug-dump=line %t | FileCheck %s + +define void @_Z3bazv() !dbg !6 { + call void @_Z3foov(), !dbg !9 + call void @_Z3foov() ; no !dbg, so will be marked as line 0 + ret void, !dbg !11 +} + +declare void @_Z3foov() + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4} +!llvm.ident = !{!5} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.9.0 (trunk 267219)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) +!1 = !DIFile(filename: "test.cc", directory: ".") +!2 = !{} +!3 = !{i32 2, !"Dwarf Version", i32 4} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!5 = !{!"clang version 3.9.0 (trunk 267219)"} +!6 = distinct !DISubprogram(name: "baz", linkageName: "_Z3bazv", scope: !1, file: !1, line: 3, type: !7, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2) +!7 = !DISubroutineType(types: !8) +!8 = !{null} +!9 = !DILocation(line: 4, column: 3, scope: !10) +!10 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 1) +!11 = !DILocation(line: 6, column: 1, scope: !6) + +; Look at the lengths. We can't verify the line-number-program size +; directly, but the difference in the two lengths should not change +; unexpectedly. +; CHECK: total_length: 0x00000043 +; CHECK: prologue_length: 0x0000001e +; +; Verify that we see a line entry with a discriminator, and the next entry +; has line 0 and no discriminator. +; line column file ISA discriminator +; CHECK: 4 3 1 0 1 +; CHECK-NEXT: 0 3 1 0 0 -- 2.50.1