diff options
-rw-r--r-- | llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Transforms/TailCallElim/debugloc.ll | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp index f8cd6c17a5a..818e8373b1c 100644 --- a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp +++ b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp @@ -566,7 +566,8 @@ static bool eliminateRecursiveTailCall(CallInst *CI, ReturnInst *Ret, BasicBlock *NewEntry = BasicBlock::Create(F->getContext(), "", F, OldEntry); NewEntry->takeName(OldEntry); OldEntry->setName("tailrecurse"); - BranchInst::Create(OldEntry, NewEntry); + BranchInst *BI = BranchInst::Create(OldEntry, NewEntry); + BI->setDebugLoc(CI->getDebugLoc()); // If this tail call is marked 'tail' and if there are any allocas in the // entry block, move them up to the new entry block. diff --git a/llvm/test/Transforms/TailCallElim/debugloc.ll b/llvm/test/Transforms/TailCallElim/debugloc.ll new file mode 100644 index 00000000000..412dd04b621 --- /dev/null +++ b/llvm/test/Transforms/TailCallElim/debugloc.ll @@ -0,0 +1,16 @@ +; RUN: opt < %s -debugify -tailcallelim -S | FileCheck %s + +define void @foo() { +entry: +; CHECK-LABEL: entry: +; CHECK: br label %tailrecurse, !dbg ![[DbgLoc:[0-9]+]] + + call void @foo() ;; line 1 + ret void + +; CHECK-LABEL: tailrecurse: +; CHECK: br label %tailrecurse, !dbg ![[DbgLoc]] +} + +;; Make sure tailrecurse has the call instruction's DL +; CHECK: ![[DbgLoc]] = !DILocation(line: 1 |