| ; 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 | |
| } |