[PATCH] D51749: [GlobalISel] Lower dbg.declare into indirect DBG_VALUE

Josh Stone via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 6 13:32:40 PDT 2018


cuviper created this revision.
cuviper added reviewers: dblaikie, aprantl, t.p.northover.
Herald added subscribers: llvm-commits, JDevlieghere, kristof.beyls, rovka.
Herald added a reviewer: javed.absar.

https://reviews.llvm.org/D31439 changed the semantics of dbg.declare to take the address of a
variable as the first argument, making it indirect.  It specifically
updated FastISel for this change here:

  https://reviews.llvm.org/D31439#change-WVArzi177jPl

GlobalISel needs to follow suit, or else it will be missing a level of
indirection in the generated debuginfo.  This problem was seen in a Rust
debuginfo test on aarch64, since GlobalISel is used at -O0 for aarch64.

  https://github.com/rust-lang/rust/issues/49807
  https://bugzilla.redhat.com/show_bug.cgi?id=1611597
  https://bugzilla.redhat.com/show_bug.cgi?id=1625768


Repository:
  rL LLVM

https://reviews.llvm.org/D51749

Files:
  lib/CodeGen/GlobalISel/IRTranslator.cpp
  test/CodeGen/AArch64/GlobalISel/debug-insts.ll


Index: test/CodeGen/AArch64/GlobalISel/debug-insts.ll
===================================================================
--- test/CodeGen/AArch64/GlobalISel/debug-insts.ll
+++ test/CodeGen/AArch64/GlobalISel/debug-insts.ll
@@ -6,7 +6,7 @@
 ; CHECK:    - { id: {{.*}}, name: in.addr, type: default, offset: 0, size: {{.*}}, alignment: {{.*}},
 ; CHECK-NEXT: callee-saved-register: '', callee-saved-restored: true,
 ; CHECK-NEXT: debug-info-variable: '!11', debug-info-expression: '!DIExpression()',
-; CHECK: DBG_VALUE debug-use %0(s32), debug-use $noreg, !11, !DIExpression(), debug-location !12
+; CHECK: DBG_VALUE debug-use %0(s32), 0, !11, !DIExpression(), debug-location !12
 define void @debug_declare(i32 %in) #0 !dbg !7 {
 entry:
   %in.addr = alloca i32, align 4
@@ -17,7 +17,7 @@
 }
 
 ; CHECK-LABEL: name: debug_declare_vla
-; CHECK: DBG_VALUE debug-use %{{[0-9]+}}(p0), debug-use $noreg, !14, !DIExpression(), debug-location !15
+; CHECK: DBG_VALUE debug-use %{{[0-9]+}}(p0), 0, !14, !DIExpression(), debug-location !15
 define void @debug_declare_vla(i32 %in) #0 !dbg !13 {
 entry:
   %vla.addr = alloca i32, i32 %in
Index: lib/CodeGen/GlobalISel/IRTranslator.cpp
===================================================================
--- lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -758,9 +758,12 @@
       // instructions (in fact, they get ignored if they *do* exist).
       MF->setVariableDbgInfo(DI.getVariable(), DI.getExpression(),
                              getOrCreateFrameIndex(*AI), DI.getDebugLoc());
-    } else
-      MIRBuilder.buildDirectDbgValue(getOrCreateVReg(*Address),
-                                     DI.getVariable(), DI.getExpression());
+    } else {
+      // A dbg.declare describes the address of a source variable, so lower it
+      // into an indirect DBG_VALUE.
+      MIRBuilder.buildIndirectDbgValue(getOrCreateVReg(*Address),
+                                       DI.getVariable(), DI.getExpression());
+    }
     return true;
   }
   case Intrinsic::dbg_label: {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51749.164278.patch
Type: text/x-patch
Size: 2064 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180906/61d3909b/attachment.bin>


More information about the llvm-commits mailing list