[llvm] r355822 - [JumpThreading] Retain debug info when replacing branch instructions
Jeremy Morse via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 11 04:48:57 PDT 2019
Author: jmorse
Date: Mon Mar 11 04:48:57 2019
New Revision: 355822
URL: http://llvm.org/viewvc/llvm-project?rev=355822&view=rev
Log:
[JumpThreading] Retain debug info when replacing branch instructions
Fixes bug 37966: https://bugs.llvm.org/show_bug.cgi?id=37966
The Jump Threading pass will replace certain conditional branch
instructions with unconditional branches when it can prove that only one
branch can occur. Prior to this patch, it would not carry the debug
info from the old instruction to the new one.
This patch fixes the bug described by copying the debug info from the
conditional branch instruction to the new unconditional branch
instruction, and adds a regression test for the Jump Threading pass that
covers this case.
Patch by Stephen Tozer!
Differential Revision: https://reviews.llvm.org/D58963
Added:
llvm/trunk/test/Transforms/JumpThreading/branch-debug-info.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=355822&r1=355821&r2=355822&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Mon Mar 11 04:48:57 2019
@@ -1142,7 +1142,9 @@ bool JumpThreadingPass::ProcessBlock(Bas
unsigned ToKeep = Ret == LazyValueInfo::True ? 0 : 1;
BasicBlock *ToRemoveSucc = CondBr->getSuccessor(ToRemove);
ToRemoveSucc->removePredecessor(BB, true);
- BranchInst::Create(CondBr->getSuccessor(ToKeep), CondBr);
+ BranchInst *UncondBr =
+ BranchInst::Create(CondBr->getSuccessor(ToKeep), CondBr);
+ UncondBr->setDebugLoc(CondBr->getDebugLoc());
CondBr->eraseFromParent();
if (CondCmp->use_empty())
CondCmp->eraseFromParent();
@@ -1245,7 +1247,8 @@ bool JumpThreadingPass::ProcessImpliedCo
BasicBlock *KeepSucc = BI->getSuccessor(*Implication ? 0 : 1);
BasicBlock *RemoveSucc = BI->getSuccessor(*Implication ? 1 : 0);
RemoveSucc->removePredecessor(BB);
- BranchInst::Create(KeepSucc, BI);
+ BranchInst *UncondBI = BranchInst::Create(KeepSucc, BI);
+ UncondBI->setDebugLoc(BI->getDebugLoc());
BI->eraseFromParent();
DTU->applyUpdatesPermissive({{DominatorTree::Delete, BB, RemoveSucc}});
return true;
Added: llvm/trunk/test/Transforms/JumpThreading/branch-debug-info.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/branch-debug-info.ll?rev=355822&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/JumpThreading/branch-debug-info.ll (added)
+++ llvm/trunk/test/Transforms/JumpThreading/branch-debug-info.ll Mon Mar 11 04:48:57 2019
@@ -0,0 +1,41 @@
+; RUN: opt %s -debugify -jump-threading -S | FileCheck %s
+; Tests Bug 37966
+
+define void @test0(i32 %i) {
+; CHECK-LABEL: @test0(
+; CHECK: left:
+; CHECK: br label %left, !dbg ![[DBG0:[0-9]+]]
+ entry:
+ %c0 = icmp ult i32 %i, 5
+ br i1 %c0, label %left, label %right
+
+ left:
+ br i1 %c0, label %left, label %right
+
+ right:
+ ret void
+}
+
+define void @test1(i32 %i, i32 %len) {
+; CHECK-LABEL: @test1(
+; CHECK: left:
+; CHECK: br label %right, !dbg ![[DBG1:[0-9]+]]
+ entry:
+ %i.inc = add nuw i32 %i, 1
+ %c0 = icmp ult i32 %i.inc, %len
+ br i1 %c0, label %left, label %right
+
+ left:
+ %c1 = icmp ult i32 %i, %len
+ br i1 %c1, label %right, label %left0
+
+ left0:
+ ret void
+
+ right:
+ ret void
+}
+
+; CHECK-DAG: ![[DBG0]] = !DILocation(
+; CHECK-DAG: ![[DBG1]] = !DILocation(
+
More information about the llvm-commits
mailing list