| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: opt < %s -S | FileCheck %s |
| |
| define i32 @phi_after_label(i1 %cc) { |
| ; CHECK-LABEL: define i32 @phi_after_label( |
| ; CHECK-SAME: i1 [[CC:%.*]]) { |
| ; CHECK-NEXT: [[ENTRY:.*]]: |
| ; CHECK-NEXT: br i1 [[CC]], label %[[THEN:.*]], label %[[END:.*]] |
| ; CHECK: [[THEN]]: |
| ; CHECK-NEXT: br label %[[END]] |
| ; CHECK: [[END]]: |
| ; CHECK-NEXT: [[R:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ 1, %[[THEN]] ] |
| ; CHECK-NEXT: ret i32 [[R]] |
| ; |
| entry: |
| br i1 %cc, label %then, label %end |
| |
| then: |
| br label %end |
| |
| end: |
| %r = phi i32 [ 0, %entry ], [ 1, %then ] |
| ret i32 %r |
| } |
| |
| define void @phi_before_label(i32 %bound) { |
| ; CHECK-LABEL: define void @phi_before_label( |
| ; CHECK-SAME: i32 [[BOUND:%.*]]) { |
| ; CHECK-NEXT: [[ENTRY:.*]]: |
| ; CHECK-NEXT: br label %[[LOOP:.*]] |
| ; CHECK: [[LOOP]]: |
| ; CHECK-NEXT: [[CTR:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[CTR_NEXT:%.*]], %[[LOOP]] ] |
| ; CHECK-NEXT: [[CTR_NEXT]] = add i32 [[CTR]], 1 |
| ; CHECK-NEXT: [[CC:%.*]] = icmp ult i32 [[CTR_NEXT]], [[BOUND]] |
| ; CHECK-NEXT: br i1 [[CC]], label %[[LOOP]], label %[[END:.*]] |
| ; CHECK: [[END]]: |
| ; CHECK-NEXT: ret void |
| ; |
| entry: |
| br label %loop |
| |
| loop: |
| %ctr = phi i32 [ 0, %entry ], [ %ctr.next, %loop ] |
| %ctr.next = add i32 %ctr, 1 |
| %cc = icmp ult i32 %ctr.next, %bound |
| br i1 %cc, label %loop, label %end |
| |
| end: |
| ret void |
| } |
| |
| define i32 @phi_after_label_unnamed(i1 %cc) { |
| ; CHECK-LABEL: define i32 @phi_after_label_unnamed( |
| ; CHECK-SAME: i1 [[CC:%.*]]) { |
| ; CHECK-NEXT: br i1 [[CC]], label %[[BB1:.*]], label %[[BB2:.*]] |
| ; CHECK: [[BB1]]: |
| ; CHECK-NEXT: br label %[[BB2]] |
| ; CHECK: [[BB2]]: |
| ; CHECK-NEXT: [[R:%.*]] = phi i32 [ 0, [[TMP0:%.*]] ], [ 1, %[[BB1]] ] |
| ; CHECK-NEXT: ret i32 [[R]] |
| ; |
| 0: |
| br i1 %cc, label %1, label %2 |
| |
| 1: |
| br label %2 |
| |
| 2: |
| %r = phi i32 [ 0, %0 ], [ 1, %1 ] |
| ret i32 %r |
| } |