[PATCH] D51908: [DebugInfo] Do not generate debug info for removed labels.

Hsiangkai Wang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 10 21:04:12 PDT 2018


HsiangKai created this revision.
HsiangKai added reviewers: aprantl, sammccall, vext01, probinson, dblaikie.
Herald added subscribers: llvm-commits, JDevlieghere.

In some senario, LLVM will remove llvm.dbg.labels in IR. For example,
when the labels are in unreachable blocks, these labels will not
be generated in LLVM IR. In the case, these debug labels will have
address zero as their address. It is not legal address for debugger to
set breakpoints or query sources. So, the patch inhibits the debug info
of removed labels.


Repository:
  rL LLVM

https://reviews.llvm.org/D51908

Files:
  lib/CodeGen/AsmPrinter/DwarfDebug.cpp
  test/DebugInfo/Generic/debug-label-unreached.ll


Index: test/DebugInfo/Generic/debug-label-unreached.ll
===================================================================
--- /dev/null
+++ test/DebugInfo/Generic/debug-label-unreached.ll
@@ -0,0 +1,35 @@
+; Test unreachable llvm.dbg.label
+;
+; RUN: llc -filetype=obj -split-dwarf-file debug.dwo -o - %s | llvm-dwarfdump -v - | FileCheck %s
+;
+; CHECK: .debug_info.dwo contents:
+; CHECK: DW_TAG_label
+; CHECK-NEXT: DW_AT_name {{.*}}"done"
+; CHECK-NOT: DW_AT_name {{.*}}"removed"
+source_filename = "debug-label-unreached.c"
+
+define dso_local i32 @foo(i32 %a, i32 %b) !dbg !8 {
+entry:
+  %sum = add nsw i32 %a, %b, !dbg !12
+  call void @llvm.dbg.label(metadata !11), !dbg !12
+  ret i32 %sum, !dbg !13
+}
+
+declare void @llvm.dbg.label(metadata)
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: true, emissionKind: FullDebug, enums: !2)
+!1 = !DIFile(filename: "debug-label-unreached.c", directory: "./")
+!2 = !{}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = !DISubroutineType(types: !6)
+!6 = !{!7}
+!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!8 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !9)
+!9 = !{!10, !11}
+!10 = !DILabel(scope: !8, name: "removed", file: !1, line: 11)
+!11 = !DILabel(scope: !8, name: "done", file: !1, line: 13)
+!12 = !DILocation(line: 13, column: 1, scope: !8)
+!13 = !DILocation(line: 14, column: 5, scope: !8)
Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1303,8 +1303,9 @@
     LexicalScope *Scope = nullptr;
     if (auto *DV = dyn_cast<DILocalVariable>(DN)) {
       Scope = LScopes.findLexicalScope(DV->getScope());
-    } else if (auto *DL = dyn_cast<DILabel>(DN)) {
-      Scope = LScopes.findLexicalScope(DL->getScope());
+    } else if (isa<const DILabel>(DN)) {
+      // Do not generate debug info for labels which are optimized out.
+      continue;
     }
 
     if (Scope)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51908.164797.patch
Type: text/x-patch
Size: 2246 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180911/4e83c6ba/attachment.bin>


More information about the llvm-commits mailing list