[PATCH] Proposed fix for PR23076 (conditional branch debug line info)

Wolfgang Pieb wolfgang_pieb at playstation.sony.com
Fri Apr 3 11:51:55 PDT 2015


Hi dblaikie,

When generating the IR for branch-on-boolean the branch instruction gets a debug location that is inherited from the condition’s context. It may get the same location as the instructions that precede the condition. This can lead to poor stepping behavior when the condition spans multiple lines, e.g.

If (a
     &&
     b)
…
;

In gdb we step back to the if from b’s line before continuing on.

The patch proposes to attach the condition’s debug location to the branch instruction.

http://reviews.llvm.org/D8822

Files:
  lib/CodeGen/CodeGenFunction.cpp
  test/CodeGenCXX/debug-info-line.cpp

Index: lib/CodeGen/CodeGenFunction.cpp
===================================================================
--- lib/CodeGen/CodeGenFunction.cpp
+++ lib/CodeGen/CodeGenFunction.cpp
@@ -1179,8 +1179,8 @@
   {
     ApplyDebugLocation DL(*this, Cond);
     CondV = EvaluateExprAsBool(Cond);
+    Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
   }
-  Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights);
 }
 
 /// ErrorUnsupported - Print out an error that codegen doesn't support the
Index: test/CodeGenCXX/debug-info-line.cpp
===================================================================
--- test/CodeGenCXX/debug-info-line.cpp
+++ test/CodeGenCXX/debug-info-line.cpp
@@ -216,7 +216,7 @@
 // CHECK-LABEL: define
 void f18(int a, int b) {
 // CHECK: icmp {{.*}}, !dbg [[DBG_F18_1:![0-9]*]]
-// CHECK: br {{.*}}, !dbg [[DBG_F18_2:![0-9]*]]
+// CHECK: br {{.*}}, !dbg [[DBG_F18_1]]
 #line 2000
   if (a  //
       && //
@@ -227,7 +227,7 @@
 // CHECK-LABEL: define
 void f19(int a, int b) {
 // CHECK: icmp {{.*}}, !dbg [[DBG_F19_1:![0-9]*]]
-// CHECK: br {{.*}}, !dbg [[DBG_F19_2:![0-9]*]]
+// CHECK: br {{.*}}, !dbg [[DBG_F19_1]]
 #line 2100
   if (a  //
       || //
@@ -316,9 +316,7 @@
 // CHECK: [[DBG_F16]] = !MDLocation(line: 1800,
 // CHECK: [[DBG_F17]] = !MDLocation(line: 1900,
 // CHECK: [[DBG_F18_1]] = !MDLocation(line: 2000,
-// CHECK: [[DBG_F18_2]] = !MDLocation(line: 2001,
 // CHECK: [[DBG_F19_1]] = !MDLocation(line: 2100,
-// CHECK: [[DBG_F19_2]] = !MDLocation(line: 2101,
 // CHECK: [[DBG_F20_1]] = !MDLocation(line: 2200,
 // CHECK: [[DBG_F23]] = !MDLocation(line: 2500,
 // CHECK: [[DBG_F24]] = !MDLocation(line: 2600,

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8822.23226.patch
Type: text/x-patch
Size: 1662 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150403/9b76b33f/attachment.bin>


More information about the cfe-commits mailing list