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