1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; CHECK: vcmpltps %ymm 4*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vucomiss 5*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @cmp00(<8 x float> %a, <8 x float> %b) nounwind readnone { 6*9880d681SAndroid Build Coastguard Worker %bincmp = fcmp olt <8 x float> %a, %b 7*9880d681SAndroid Build Coastguard Worker %s = sext <8 x i1> %bincmp to <8 x i32> 8*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %s 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; CHECK: vcmpltpd %ymm 12*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vucomisd 13*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @cmp01(<4 x double> %a, <4 x double> %b) nounwind readnone { 14*9880d681SAndroid Build Coastguard Worker %bincmp = fcmp olt <4 x double> %a, %b 15*9880d681SAndroid Build Coastguard Worker %s = sext <4 x i1> %bincmp to <4 x i64> 16*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %s 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdeclare void @scale() nounwind uwtable 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; CHECK: vucomisd 22*9880d681SAndroid Build Coastguard Workerdefine void @render() nounwind uwtable { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.cond5, label %for.end52 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerfor.cond5: 27*9880d681SAndroid Build Coastguard Worker %or.cond = and i1 undef, false 28*9880d681SAndroid Build Coastguard Worker br i1 %or.cond, label %for.body33, label %for.cond5 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerfor.cond30: 31*9880d681SAndroid Build Coastguard Worker br i1 false, label %for.body33, label %for.cond5 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerfor.body33: 34*9880d681SAndroid Build Coastguard Worker %tobool = fcmp une double undef, 0.000000e+00 35*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %if.then, label %for.cond30 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerif.then: 38*9880d681SAndroid Build Coastguard Worker call void @scale() 39*9880d681SAndroid Build Coastguard Worker br label %for.cond30 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerfor.end52: 42*9880d681SAndroid Build Coastguard Worker ret void 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 46*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd %xmm 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtd %xmm 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 50*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @int256-cmp(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 51*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <8 x i32> %i, %j 52*9880d681SAndroid Build Coastguard Worker %x = sext <8 x i1> %bincmp to <8 x i32> 53*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 57*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtq %xmm 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtq %xmm 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 61*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @v4i64-cmp(<4 x i64> %i, <4 x i64> %j) nounwind readnone { 62*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <4 x i64> %i, %j 63*9880d681SAndroid Build Coastguard Worker %x = sext <4 x i1> %bincmp to <4 x i64> 64*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 68*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtw %xmm 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtw %xmm 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 72*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @v16i16-cmp(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 73*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <16 x i16> %i, %j 74*9880d681SAndroid Build Coastguard Worker %x = sext <16 x i1> %bincmp to <16 x i16> 75*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 79*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtb %xmm 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpgtb %xmm 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 83*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @v32i8-cmp(<32 x i8> %i, <32 x i8> %j) nounwind readnone { 84*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <32 x i8> %i, %j 85*9880d681SAndroid Build Coastguard Worker %x = sext <32 x i1> %bincmp to <32 x i8> 86*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 90*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqd %xmm 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqd %xmm 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 94*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @int256-cmpeq(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 95*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <8 x i32> %i, %j 96*9880d681SAndroid Build Coastguard Worker %x = sext <8 x i1> %bincmp to <8 x i32> 97*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 101*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqq %xmm 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqq %xmm 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 105*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @v4i64-cmpeq(<4 x i64> %i, <4 x i64> %j) nounwind readnone { 106*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <4 x i64> %i, %j 107*9880d681SAndroid Build Coastguard Worker %x = sext <4 x i1> %bincmp to <4 x i64> 108*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 112*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqw %xmm 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqw %xmm 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 116*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @v16i16-cmpeq(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 117*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <16 x i16> %i, %j 118*9880d681SAndroid Build Coastguard Worker %x = sext <16 x i1> %bincmp to <16 x i16> 119*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 123*9880d681SAndroid Build Coastguard Worker; CHECK: vextractf128 $1 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqb %xmm 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpcmpeqb %xmm 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1 127*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @v32i8-cmpeq(<32 x i8> %i, <32 x i8> %j) nounwind readnone { 128*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <32 x i8> %i, %j 129*9880d681SAndroid Build Coastguard Worker %x = sext <32 x i1> %bincmp to <32 x i8> 130*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Worker;; Scalar comparison 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker; CHECK: scalarcmpA 136*9880d681SAndroid Build Coastguard Worker; CHECK: vcmpeqsd 137*9880d681SAndroid Build Coastguard Workerdefine i32 @scalarcmpA() uwtable ssp { 138*9880d681SAndroid Build Coastguard Worker %cmp29 = fcmp oeq double undef, 0.000000e+00 139*9880d681SAndroid Build Coastguard Worker %res = zext i1 %cmp29 to i32 140*9880d681SAndroid Build Coastguard Worker ret i32 %res 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker; CHECK: scalarcmpB 144*9880d681SAndroid Build Coastguard Worker; CHECK: vcmpeqss 145*9880d681SAndroid Build Coastguard Workerdefine i32 @scalarcmpB() uwtable ssp { 146*9880d681SAndroid Build Coastguard Worker %cmp29 = fcmp oeq float undef, 0.000000e+00 147*9880d681SAndroid Build Coastguard Worker %res = zext i1 %cmp29 to i32 148*9880d681SAndroid Build Coastguard Worker ret i32 %res 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151