| ; RUN: opt -S < %s -passes=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 |
| } |