1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2 ; RUN: opt -S -callsite-splitting -simplifycfg < %s | FileCheck %s 3 4 define i16 @test1() { 5 ; CHECK-LABEL: @test1( 6 ; CHECK-NEXT: entry: 7 ; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 undef, i16 1, i16 0 8 ; CHECK-NEXT: call void @callee(i16 0) 9 ; CHECK-NEXT: br label [[FOR_COND12:%.*]] 10 ; CHECK: for.cond12: 11 ; CHECK-NEXT: call void @callee(i16 [[SPEC_SELECT]]) 12 ; CHECK-NEXT: br label [[FOR_COND12]] 13 ; 14 entry: 15 %spec.select = select i1 undef, i16 1, i16 0 16 %tobool18 = icmp ne i16 %spec.select, 0 17 br i1 %tobool18, label %for.cond12.us, label %for.cond12 18 19 for.cond12.us: 20 unreachable 21 22 for.cond12: 23 call void @callee(i16 %spec.select) 24 br label %for.cond12 25 } 26 27 define i16 @test2() { 28 ; CHECK-LABEL: @test2( 29 ; CHECK-NEXT: entry: 30 ; CHECK-NEXT: [[S:%.*]] = select i1 undef, i16 1, i16 0 31 ; CHECK-NEXT: call void @callee(i16 0) 32 ; CHECK-NEXT: br label [[FOR_COND12:%.*]] 33 ; CHECK: for.cond12: 34 ; CHECK-NEXT: [[ADD:%.*]] = add i16 [[S]], 10 35 ; CHECK-NEXT: [[ADD2:%.*]] = add i16 [[S]], 10 36 ; CHECK-NEXT: call void @callee(i16 [[S]]) 37 ; CHECK-NEXT: br label [[FOR_COND12]] 38 ; 39 entry: 40 %s= select i1 undef, i16 1, i16 0 41 %tobool18 = icmp ne i16 %s, 0 42 br i1 %tobool18, label %for.cond12.us, label %for.cond12 43 44 for.cond12.us: 45 unreachable 46 47 for.cond12: 48 call void @callee(i16 %s) 49 %add = add i16 %s, 10 50 %add2 = add i16 %s, 10 51 br label %for.cond12 52 } 53 54 define i16 @test3() { 55 ; CHECK-LABEL: @test3( 56 ; CHECK-NEXT: entry: 57 ; CHECK-NEXT: [[S:%.*]] = select i1 undef, i16 1, i16 0 58 ; CHECK-NEXT: call void @callee(i16 0) 59 ; CHECK-NEXT: br label [[FOR_COND12:%.*]] 60 ; CHECK: for.cond12: 61 ; CHECK-NEXT: [[ADD:%.*]] = add i16 [[S]], 10 62 ; CHECK-NEXT: [[ADD2:%.*]] = add i16 [[ADD]], 10 63 ; CHECK-NEXT: br i1 undef, label [[FOR_COND12_SPLIT:%.*]], label [[EXIT:%.*]] 64 ; CHECK: for.cond12.split: 65 ; CHECK-NEXT: call void @callee(i16 [[S]]) 66 ; CHECK-NEXT: br label [[FOR_COND12]] 67 ; CHECK: exit: 68 ; CHECK-NEXT: ret i16 [[ADD2]] 69 ; 70 entry: 71 %s= select i1 undef, i16 1, i16 0 72 %tobool18 = icmp ne i16 %s, 0 73 br i1 %tobool18, label %for.cond12.us, label %for.cond12 74 75 for.cond12.us: 76 unreachable 77 78 for.cond12: 79 call void @callee(i16 %s) 80 %add = add i16 %s, 10 81 %add2 = add i16 %add, 10 82 br i1 undef, label %for.cond12, label %exit 83 84 exit: 85 ret i16 %add2 86 } 87 88 define internal void @callee(i16 %flag) { 89 ret void 90 } 91