Files
llvm/test/Transforms/JumpThreading/removed-use.ll
T
Michael Zolotukhin 1efc1f1838 Revert "Revert r330403 and r330413."
Reapply the patches with a fix. Thanks Ilya and Hans for the reproducer!
This reverts commit r330416.

The issue was that removing predecessors invalidated uses that we stored
for rewrite. The fix is to finish manipulating with CFG before we select
uses for rewrite.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330431 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-20 13:34:32 +00:00

55 lines
946 B
LLVM

; RUN: opt -S < %s -jump-threading | FileCheck %s
; CHECK-LABEL: @foo
; CHECK: bb6:
; CHECK-NEXT: ret void
; CHECK: bb3:
; CHECK: br label %bb3
define void @foo() {
entry:
br i1 true, label %bb6, label %bb3
bb3:
%x0 = phi i32 [ undef, %entry ], [ %x1, %bb5 ]
%y = and i64 undef, 1
%p = icmp ne i64 %y, 0
br i1 %p, label %bb4, label %bb5
bb4:
br label %bb5
bb5:
%x1 = phi i32 [ %x0, %bb3 ], [ %x0, %bb4 ]
%z = phi i32 [ 0, %bb3 ], [ 1, %bb4 ]
%q = icmp eq i32 %z, 0
br i1 %q, label %bb3, label %bb6
bb6:
ret void
}
; CHECK-LABEL: bar@
; Just check that we don't crash on this test.
define void @bar(i1 %p) {
entry:
br i1 false, label %bb2, label %exit
bb2:
%x0 = phi i32 [ undef, %entry ], [ %x1, %bb5 ]
br i1 %p, label %bb3, label %bb4
bb3:
br label %bb5
bb4:
br label %bb5
bb5:
%x1 = phi i32 [ %x0, %bb3 ], [ 0, %bb4 ]
switch i32 %x1, label %exit [
i32 10, label %bb2
]
exit:
ret void
}