diff options
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 3 | ||||
| -rw-r--r-- | llvm/test/Transforms/SimplifyCFG/debug-info-thread-phi.ll | 38 |
2 files changed, 40 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index dbd8fb720e4..c3e8203ef9e 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -2209,7 +2209,8 @@ static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout &DL, BasicBlock *EdgeBB = BasicBlock::Create(BB->getContext(), RealDest->getName() + ".critedge", RealDest->getParent(), RealDest); - BranchInst::Create(RealDest, EdgeBB); + BranchInst *CritEdgeBranch = BranchInst::Create(RealDest, EdgeBB); + CritEdgeBranch->setDebugLoc(BI->getDebugLoc()); // Update PHI nodes. AddPredecessorToBlock(RealDest, EdgeBB, BB); diff --git a/llvm/test/Transforms/SimplifyCFG/debug-info-thread-phi.ll b/llvm/test/Transforms/SimplifyCFG/debug-info-thread-phi.ll new file mode 100644 index 00000000000..f7e91feb434 --- /dev/null +++ b/llvm/test/Transforms/SimplifyCFG/debug-info-thread-phi.ll @@ -0,0 +1,38 @@ +; RUN: opt %s -debugify -simplifycfg -S | FileCheck %s +; Tests Bug 37966 + +define void @bar(i32 %aa) { +; CHECK-LABEL: @bar( +; CHECK: if.end.1.critedge: +; CHECK: br label %if.end.1, !dbg ![[DBG:[0-9]+]] +entry: + %aa.addr = alloca i32, align 4 + %bb = alloca i32, align 4 + store i32 %aa, i32* %aa.addr, align 4 + store i32 0, i32* %bb, align 4 + %tobool = icmp ne i32 %aa, 0 + br i1 %tobool, label %if.then, label %if.end + +if.then: ; preds = %entry + call void @foo() + br label %if.end + +if.end: ; preds = %if.then, %entry + store i32 1, i32* %bb, align 4 + br i1 %tobool, label %if.then.1, label %if.end.1 + +if.then.1: ; preds = %if.end + call void @foo() + br label %if.end.1 + +if.end.1: ; preds = %if.then.1, %if.end + store i32 2, i32* %bb, align 4 + br label %for.end + +for.end: ; preds = %if.end.1 + ret void +} + +declare void @foo() + +; CHECK: ![[DBG]] = !DILocation( |

