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
42 lines
768 B
LLVM
42 lines
768 B
LLVM
; 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(
|
|
|