| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -tut-simplifycfg -tut-simplifycfg-version=v1 -enable-new-pm=0 -S < %s | FileCheck %s |
| ; RUN: opt -tut-simplifycfg -tut-simplifycfg-version=v2 -enable-new-pm=0 -S < %s | FileCheck %s |
| ; RUN: opt -tut-simplifycfg -tut-simplifycfg-version=v3 -enable-new-pm=0 -S < %s | FileCheck %s |
| |
| define i32 @simp1() { |
| ; CHECK-LABEL: @simp1( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: ret i32 10 |
| ; |
| entry: |
| br i1 true, label %if.then, label %if.else |
| |
| if.then: |
| ret i32 10 |
| |
| if.else: |
| ret i32 12 |
| } |
| |
| define i32 @simp2() { |
| ; CHECK-LABEL: @simp2( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: ret i32 200 |
| ; |
| entry: |
| br i1 false, label %if.then, label %if.else |
| |
| if.then: |
| ret i32 99 |
| |
| if.else: |
| ret i32 200 |
| } |
| |
| declare void @foo(i64) |
| |
| define i64 @merge_into_predecessor(i64 %a, i64 %b) { |
| ; CHECK-LABEL: @merge_into_predecessor( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: [[R:%.*]] = add i64 [[A:%.*]], [[B:%.*]] |
| ; CHECK-NEXT: call void @foo(i64 [[R]]) |
| ; CHECK-NEXT: call void @foo(i64 [[A]]) |
| ; CHECK-NEXT: ret i64 [[R]] |
| ; |
| entry: |
| br label %bb.next |
| |
| bb.next: |
| %r = add i64 %a, %b |
| call void @foo(i64 %r) |
| call void @foo(i64 %a) |
| br label %bb.next.next |
| |
| bb.next.next: |
| ret i64 %r |
| } |
| |
| define i64 @merge_into_predecessor_with_phi(i64 %a, i64 %b, i1 %c) { |
| ; CHECK-LABEL: @merge_into_predecessor_with_phi( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: call void @foo(i64 [[B:%.*]]) |
| ; CHECK-NEXT: [[R:%.*]] = add i64 [[A:%.*]], [[B]] |
| ; CHECK-NEXT: call void @foo(i64 [[R]]) |
| ; CHECK-NEXT: call void @foo(i64 [[A]]) |
| ; CHECK-NEXT: br i1 [[C:%.*]], label [[BB_NEXT_NEXT:%.*]], label [[BB_EXIT:%.*]] |
| ; CHECK: bb.next.next: |
| ; CHECK-NEXT: br label [[BB_EXIT]] |
| ; CHECK: bb.exit: |
| ; CHECK-NEXT: [[RET:%.*]] = phi i64 [ [[R]], [[ENTRY:%.*]] ], [ 10, [[BB_NEXT_NEXT]] ] |
| ; CHECK-NEXT: ret i64 [[RET]] |
| ; |
| entry: |
| call void @foo(i64 %b) |
| br label %bb.next |
| |
| bb.next: |
| %r = add i64 %a, %b |
| call void @foo(i64 %r) |
| call void @foo(i64 %a) |
| br i1 %c, label %bb.next.next, label %bb.exit |
| |
| bb.next.next: |
| br label %bb.exit |
| |
| bb.exit: |
| %ret = phi i64 [ %r, %bb.next], [ 10, %bb.next.next] |
| ret i64 %ret |
| |
| } |