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