[PATCH] D100137: [JumpThreading] merge debug info when merging select+br

Nick Desaulniers via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 12 17:21:54 PDT 2021


nickdesaulniers updated this revision to Diff 337000.
nickdesaulniers added a comment.

- test matching dbg merge, rather than mismatch dbg merge


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100137/new/

https://reviews.llvm.org/D100137

Files:
  llvm/lib/Transforms/Scalar/JumpThreading.cpp
  llvm/test/Transforms/JumpThreading/branch-debug-info2.ll


Index: llvm/test/Transforms/JumpThreading/branch-debug-info2.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/JumpThreading/branch-debug-info2.ll
@@ -0,0 +1,70 @@
+; RUN: opt -passes=jump-threading -S %s -o - | FileCheck %s
+define void @prepare_next_shadow() !dbg !7 {
+entry:
+  br label %for.cond, !dbg !9
+
+for.cond:                                         ; preds = %for.inc, %entry
+  br label %shadow_to_ptr.exit, !dbg !10
+
+shadow_to_ptr.exit:                               ; preds = %for.cond
+  %shr.i = lshr i64 0, 12, !dbg !11
+  %cmp.i = icmp ult i64 %shr.i, undef, !dbg !12
+  br i1 %cmp.i, label %cleanup.i, label %if.end.i60, !dbg !13
+
+if.end.i60:                                       ; preds = %shadow_to_ptr.exit
+  %sub.i = sub i64 %shr.i, undef, !dbg !14
+  %cmp3.i = icmp ugt i64 %sub.i, 32763, !dbg !15
+  %conv7.i = trunc i64 %sub.i to i32, !dbg !16
+  %spec.select.i = select i1 %cmp3.i, i32 -1, i32 %conv7.i, !dbg !17
+; Jump threading is going to fold the select in to the branch. Ensure debug
+; info is not lost, and is merged from the select and the branch.
+; CHECK-NOT: br i1 %cmp3.i, label %for.inc, label %ptr_to_shadow.exit
+; CHECK: br i1 %cmp3.i, label %for.inc, label %ptr_to_shadow.exit, !dbg [[DBG:![0-9]+]]
+; CHECK: [[DBG]] = !DILocation(line: 9, column: 1, scope: !{{.*}})
+
+  br label %ptr_to_shadow.exit, !dbg !17
+
+cleanup.i:                                        ; preds = %shadow_to_ptr.exit
+  br label %ptr_to_shadow.exit, !dbg !19
+
+ptr_to_shadow.exit:                               ; preds = %cleanup.i, %if.end.i60
+  %call1861 = phi i32 [ %spec.select.i, %if.end.i60 ], [ -1, %cleanup.i ], !dbg !20
+  %cmp19 = icmp slt i32 %call1861, 0, !dbg !21
+  br i1 %cmp19, label %for.inc, label %if.end22, !dbg !22
+
+if.end22:                                         ; preds = %ptr_to_shadow.exit
+  unreachable, !dbg !23
+
+for.inc:                                          ; preds = %ptr_to_shadow.exit
+  br label %for.cond, !dbg !24
+}
+
+!llvm.ident = !{!0}
+!llvm.dbg.cu = !{!1}
+!llvm.debugify = !{!4, !5}
+!llvm.module.flags = !{!6}
+
+!0 = !{!""}
+!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3)
+!2 = !DIFile(filename: "jump_threading.ll", directory: "/")
+!3 = !{}
+!4 = !{i32 16}
+!5 = !{i32 0}
+!6 = !{i32 2, !"Debug Info Version", i32 3}
+!7 = distinct !DISubprogram(name: "prepare_next_shadow", linkageName: "prepare_next_shadow", scope: null, file: !2, line: 1, type: !8, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !1, retainedNodes: !3)
+!8 = !DISubroutineType(types: !3)
+!9 = !DILocation(line: 1, column: 1, scope: !7)
+!10 = !DILocation(line: 2, column: 1, scope: !7)
+!11 = !DILocation(line: 3, column: 1, scope: !7)
+!12 = !DILocation(line: 4, column: 1, scope: !7)
+!13 = !DILocation(line: 5, column: 1, scope: !7)
+!14 = !DILocation(line: 6, column: 1, scope: !7)
+!15 = !DILocation(line: 7, column: 1, scope: !7)
+!16 = !DILocation(line: 8, column: 1, scope: !7)
+!17 = !DILocation(line: 9, column: 1, scope: !7)
+!19 = !DILocation(line: 11, column: 1, scope: !7)
+!20 = !DILocation(line: 12, column: 1, scope: !7)
+!21 = !DILocation(line: 13, column: 1, scope: !7)
+!22 = !DILocation(line: 14, column: 1, scope: !7)
+!23 = !DILocation(line: 15, column: 1, scope: !7)
+!24 = !DILocation(line: 16, column: 1, scope: !7)
Index: llvm/lib/Transforms/Scalar/JumpThreading.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/JumpThreading.cpp
+++ llvm/lib/Transforms/Scalar/JumpThreading.cpp
@@ -2750,7 +2750,8 @@
   PredTerm->removeFromParent();
   NewBB->getInstList().insert(NewBB->end(), PredTerm);
   // Create a conditional branch and update PHI nodes.
-  BranchInst::Create(NewBB, BB, SI->getCondition(), Pred);
+  auto *BI = BranchInst::Create(NewBB, BB, SI->getCondition(), Pred);
+  BI->applyMergedLocation(PredTerm->getDebugLoc(), SI->getDebugLoc());
   SIUse->setIncomingValue(Idx, SI->getFalseValue());
   SIUse->addIncoming(SI->getTrueValue(), NewBB);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100137.337000.patch
Type: text/x-patch
Size: 4187 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210413/5485186d/attachment.bin>


More information about the llvm-commits mailing list