1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt %loadexampleirtransforms -passes=tut-simplifycfg -tut-simplifycfg-version=v1 -S < %s | FileCheck %s 3; RUN: opt %loadexampleirtransforms -passes=tut-simplifycfg -tut-simplifycfg-version=v2 -S < %s | FileCheck %s 4; RUN: opt %loadexampleirtransforms -passes=tut-simplifycfg -tut-simplifycfg-version=v3 -S < %s | FileCheck %s 5 6define i32 @simp1() { 7; CHECK-LABEL: @simp1( 8; CHECK-NEXT: entry: 9; CHECK-NEXT: ret i32 10 10; 11entry: 12 br i1 true, label %if.then, label %if.else 13 14if.then: 15 ret i32 10 16 17if.else: 18 ret i32 12 19} 20 21define i32 @simp2() { 22; CHECK-LABEL: @simp2( 23; CHECK-NEXT: entry: 24; CHECK-NEXT: ret i32 200 25; 26entry: 27 br i1 false, label %if.then, label %if.else 28 29if.then: 30 ret i32 99 31 32if.else: 33 ret i32 200 34} 35 36declare void @foo(i64) 37 38define i64 @merge_into_predecessor(i64 %a, i64 %b) { 39; CHECK-LABEL: @merge_into_predecessor( 40; CHECK-NEXT: entry: 41; CHECK-NEXT: [[R:%.*]] = add i64 [[A:%.*]], [[B:%.*]] 42; CHECK-NEXT: call void @foo(i64 [[R]]) 43; CHECK-NEXT: call void @foo(i64 [[A]]) 44; CHECK-NEXT: ret i64 [[R]] 45; 46entry: 47 br label %bb.next 48 49bb.next: 50 %r = add i64 %a, %b 51 call void @foo(i64 %r) 52 call void @foo(i64 %a) 53 br label %bb.next.next 54 55bb.next.next: 56 ret i64 %r 57} 58 59define i64 @merge_into_predecessor_with_phi(i64 %a, i64 %b, i1 %c) { 60; CHECK-LABEL: @merge_into_predecessor_with_phi( 61; CHECK-NEXT: entry: 62; CHECK-NEXT: call void @foo(i64 [[B:%.*]]) 63; CHECK-NEXT: [[R:%.*]] = add i64 [[A:%.*]], [[B]] 64; CHECK-NEXT: call void @foo(i64 [[R]]) 65; CHECK-NEXT: call void @foo(i64 [[A]]) 66; CHECK-NEXT: br i1 [[C:%.*]], label [[BB_NEXT_NEXT:%.*]], label [[BB_EXIT:%.*]] 67; CHECK: bb.next.next: 68; CHECK-NEXT: br label [[BB_EXIT]] 69; CHECK: bb.exit: 70; CHECK-NEXT: [[RET:%.*]] = phi i64 [ [[R]], [[ENTRY:%.*]] ], [ 10, [[BB_NEXT_NEXT]] ] 71; CHECK-NEXT: ret i64 [[RET]] 72; 73entry: 74 call void @foo(i64 %b) 75 br label %bb.next 76 77bb.next: 78 %r = add i64 %a, %b 79 call void @foo(i64 %r) 80 call void @foo(i64 %a) 81 br i1 %c, label %bb.next.next, label %bb.exit 82 83bb.next.next: 84 br label %bb.exit 85 86bb.exit: 87 %ret = phi i64 [ %r, %bb.next], [ 10, %bb.next.next] 88 ret i64 %ret 89 90} 91