diff options
| author | Jeremy Morse <jeremy.morse.llvm@gmail.com> | 2019-03-11 11:48:57 +0000 |
|---|---|---|
| committer | Jeremy Morse <jeremy.morse.llvm@gmail.com> | 2019-03-11 11:48:57 +0000 |
| commit | b60aea41315c2a4a432483e57ea5065655bf4e95 (patch) | |
| tree | fad5e44d400620e0c9a131ab37e94caa210f8932 /llvm/test/Transforms/JumpThreading/branch-debug-info.ll | |
| parent | d8a5c6cf19e7245f0c9d076831ebeabc29d6e174 (diff) | |
| download | bcm5719-llvm-b60aea41315c2a4a432483e57ea5065655bf4e95.tar.gz bcm5719-llvm-b60aea41315c2a4a432483e57ea5065655bf4e95.zip | |
[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
llvm-svn: 355822
Diffstat (limited to 'llvm/test/Transforms/JumpThreading/branch-debug-info.ll')
| -rw-r--r-- | llvm/test/Transforms/JumpThreading/branch-debug-info.ll | 41 |
1 files changed, 41 insertions, 0 deletions
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( + |

