diff options
| -rw-r--r-- | llvm/lib/Transforms/Scalar/JumpThreading.cpp | 7 | ||||
| -rw-r--r-- | llvm/test/Transforms/JumpThreading/branch-debug-info.ll | 41 |
2 files changed, 46 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index 7d6ffa0e0e4..264ea3aa22a 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -1142,7 +1142,9 @@ bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) { 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::ProcessImpliedCondition(BasicBlock *BB) { 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; diff --git a/llvm/test/Transforms/JumpThreading/branch-debug-info.ll b/llvm/test/Transforms/JumpThreading/branch-debug-info.ll new file mode 100644 index 00000000000..773ed0f71de --- /dev/null +++ b/llvm/test/Transforms/JumpThreading/branch-debug-info.ll @@ -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( + |

