1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=ALL --check-prefix=KNL 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @sitof32(<16 x i32> %a) nounwind { 6*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sitof32: 7*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtdq2ps %zmm0, %zmm0 9*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 10*9880d681SAndroid Build Coastguard Worker %b = sitofp <16 x i32> %a to <16 x float> 11*9880d681SAndroid Build Coastguard Worker ret <16 x float> %b 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sltof864(<8 x i64> %a) { 15*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sltof864: 16*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 17*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $3, %zmm0, %xmm1 18*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm1, %rax 19*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 20*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm1, %rax 21*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1 22*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0] 23*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $2, %zmm0, %xmm2 24*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm2, %rax 25*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm3 26*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm2, %rax 27*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 28*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 29*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 30*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $1, %zmm0, %xmm2 31*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm2, %rax 32*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm3 33*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm2, %rax 34*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 35*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 36*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 37*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm3 38*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 39*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 40*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0] 41*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 42*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0 43*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 44*9880d681SAndroid Build Coastguard Worker; 45*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sltof864: 46*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 47*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtqq2pd %zmm0, %zmm0 48*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 49*9880d681SAndroid Build Coastguard Worker %b = sitofp <8 x i64> %a to <8 x double> 50*9880d681SAndroid Build Coastguard Worker ret <8 x double> %b 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @sltof464(<4 x i64> %a) { 54*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sltof464: 55*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 56*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm1 57*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm1, %rax 58*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 59*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm1, %rax 60*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm1 61*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0] 62*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 63*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm2 64*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 65*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2sdq %rax, %xmm0, %xmm0 66*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0] 67*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 68*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 69*9880d681SAndroid Build Coastguard Worker; 70*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sltof464: 71*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 72*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtqq2pd %ymm0, %ymm0 73*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 74*9880d681SAndroid Build Coastguard Worker %b = sitofp <4 x i64> %a to <4 x double> 75*9880d681SAndroid Build Coastguard Worker ret <4 x double> %b 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @sltof2f32(<2 x i64> %a) { 79*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sltof2f32: 80*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 81*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 82*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 83*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 84*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 85*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] 86*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 87*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] 88*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0] 89*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 90*9880d681SAndroid Build Coastguard Worker; 91*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sltof2f32: 92*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 93*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<def> 94*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtqq2ps %ymm0, %xmm0 95*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 96*9880d681SAndroid Build Coastguard Worker %b = sitofp <2 x i64> %a to <2 x float> 97*9880d681SAndroid Build Coastguard Worker ret <2 x float>%b 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @sltof4f32_mem(<4 x i64>* %a) { 101*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sltof4f32_mem: 102*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 103*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovdqu (%rdi), %ymm0 104*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 105*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 106*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 107*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 108*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] 109*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 110*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 111*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 112*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] 113*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 114*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 115*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 116*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 117*9880d681SAndroid Build Coastguard Worker; 118*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sltof4f32_mem: 119*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 120*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtqq2psy (%rdi), %xmm0 121*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 122*9880d681SAndroid Build Coastguard Worker %a1 = load <4 x i64>, <4 x i64>* %a, align 8 123*9880d681SAndroid Build Coastguard Worker %b = sitofp <4 x i64> %a1 to <4 x float> 124*9880d681SAndroid Build Coastguard Worker ret <4 x float>%b 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @f64tosl(<4 x double> %a) { 128*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: f64tosl: 129*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 130*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextractf128 $1, %ymm0, %xmm1 131*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttsd2si %xmm1, %rax 132*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm2 133*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermilpd {{.*#+}} xmm1 = xmm1[1,0] 134*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttsd2si %xmm1, %rax 135*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm1 136*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0] 137*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttsd2si %xmm0, %rax 138*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm2 139*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 140*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttsd2si %xmm0, %rax 141*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm0 142*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0] 143*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 144*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 145*9880d681SAndroid Build Coastguard Worker; 146*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: f64tosl: 147*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 148*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvttpd2qq %ymm0, %ymm0 149*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 150*9880d681SAndroid Build Coastguard Worker %b = fptosi <4 x double> %a to <4 x i64> 151*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %b 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @f32tosl(<4 x float> %a) { 155*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: f32tosl: 156*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 157*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,1,2,3] 158*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttss2si %xmm1, %rax 159*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm1 160*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpermilpd {{.*#+}} xmm2 = xmm0[1,0] 161*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttss2si %xmm2, %rax 162*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm2 163*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0] 164*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttss2si %xmm0, %rax 165*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm2 166*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3] 167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttss2si %xmm0, %rax 168*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %rax, %xmm0 169*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0] 170*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 171*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 172*9880d681SAndroid Build Coastguard Worker; 173*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: f32tosl: 174*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 175*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvttps2qq %xmm0, %ymm0 176*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 177*9880d681SAndroid Build Coastguard Worker %b = fptosi <4 x float> %a to <4 x i64> 178*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %b 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @sltof432(<4 x i64> %a) { 182*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sltof432: 183*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 185*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm1 186*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 187*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 188*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] 189*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 190*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 191*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm2 192*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] 193*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 194*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtsi2ssq %rax, %xmm0, %xmm0 195*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 196*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 197*9880d681SAndroid Build Coastguard Worker; 198*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sltof432: 199*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 200*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtqq2ps %ymm0, %xmm0 201*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 202*9880d681SAndroid Build Coastguard Worker %b = sitofp <4 x i64> %a to <4 x float> 203*9880d681SAndroid Build Coastguard Worker ret <4 x float> %b 204*9880d681SAndroid Build Coastguard Worker} 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ultof432(<4 x i64> %a) { 207*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: ultof432: 208*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 209*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 210*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2ssq %rax, %xmm0, %xmm1 211*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 212*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2ssq %rax, %xmm0, %xmm2 213*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] 214*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti128 $1, %ymm0, %xmm0 215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 216*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2ssq %rax, %xmm0, %xmm2 217*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3] 218*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 219*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2ssq %rax, %xmm0, %xmm0 220*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0] 221*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 222*9880d681SAndroid Build Coastguard Worker; 223*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: ultof432: 224*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 225*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtuqq2ps %ymm0, %xmm0 226*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 227*9880d681SAndroid Build Coastguard Worker %b = uitofp <4 x i64> %a to <4 x float> 228*9880d681SAndroid Build Coastguard Worker ret <4 x float> %b 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @ultof64(<8 x i64> %a) { 232*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: ultof64: 233*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 234*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $3, %zmm0, %xmm1 235*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm1, %rax 236*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm2 237*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm1, %rax 238*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm1 239*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0] 240*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $2, %zmm0, %xmm2 241*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm2, %rax 242*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm3 243*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm2, %rax 244*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm2 245*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 246*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 247*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti32x4 $1, %zmm0, %xmm2 248*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm2, %rax 249*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm3 250*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm2, %rax 251*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm2 252*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0] 253*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpextrq $1, %xmm0, %rax 254*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm3 255*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, %rax 256*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtusi2sdq %rax, %xmm0, %xmm0 257*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0] 258*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 259*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0 260*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 261*9880d681SAndroid Build Coastguard Worker; 262*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: ultof64: 263*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 264*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtuqq2pd %zmm0, %zmm0 265*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 266*9880d681SAndroid Build Coastguard Worker %b = uitofp <8 x i64> %a to <8 x double> 267*9880d681SAndroid Build Coastguard Worker ret <8 x double> %b 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @fptosi00(<16 x float> %a) nounwind { 271*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptosi00: 272*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 273*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvttps2dq %zmm0, %zmm0 274*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 275*9880d681SAndroid Build Coastguard Worker %b = fptosi <16 x float> %a to <16 x i32> 276*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %b 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @fptoui00(<16 x float> %a) nounwind { 280*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptoui00: 281*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 282*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvttps2udq %zmm0, %zmm0 283*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 284*9880d681SAndroid Build Coastguard Worker %b = fptoui <16 x float> %a to <16 x i32> 285*9880d681SAndroid Build Coastguard Worker ret <16 x i32> %b 286*9880d681SAndroid Build Coastguard Worker} 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @fptoui_256(<8 x float> %a) nounwind { 289*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptoui_256: 290*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 291*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 292*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttps2udq %zmm0, %zmm0 293*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 294*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 295*9880d681SAndroid Build Coastguard Worker; 296*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptoui_256: 297*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 298*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvttps2udq %ymm0, %ymm0 299*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 300*9880d681SAndroid Build Coastguard Worker %b = fptoui <8 x float> %a to <8 x i32> 301*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %b 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @fptoui_128(<4 x float> %a) nounwind { 305*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptoui_128: 306*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 307*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def> 308*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttps2udq %zmm0, %zmm0 309*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 310*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 311*9880d681SAndroid Build Coastguard Worker; 312*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptoui_128: 313*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 314*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvttps2udq %xmm0, %xmm0 315*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 316*9880d681SAndroid Build Coastguard Worker %b = fptoui <4 x float> %a to <4 x i32> 317*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %b 318*9880d681SAndroid Build Coastguard Worker} 319*9880d681SAndroid Build Coastguard Worker 320*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @fptoui01(<8 x double> %a) nounwind { 321*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptoui01: 322*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 323*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvttpd2udq %zmm0, %ymm0 324*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 325*9880d681SAndroid Build Coastguard Worker %b = fptoui <8 x double> %a to <8 x i32> 326*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %b 327*9880d681SAndroid Build Coastguard Worker} 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @fptoui_256d(<4 x double> %a) nounwind { 330*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptoui_256d: 331*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 332*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 333*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttpd2udq %zmm0, %ymm0 334*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 335*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 336*9880d681SAndroid Build Coastguard Worker; 337*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptoui_256d: 338*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 339*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvttpd2udq %ymm0, %xmm0 340*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 341*9880d681SAndroid Build Coastguard Worker %b = fptoui <4 x double> %a to <4 x i32> 342*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %b 343*9880d681SAndroid Build Coastguard Worker} 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sitof64(<8 x i32> %a) { 346*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sitof64: 347*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 348*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtdq2pd %ymm0, %zmm0 349*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 350*9880d681SAndroid Build Coastguard Worker %b = sitofp <8 x i32> %a to <8 x double> 351*9880d681SAndroid Build Coastguard Worker ret <8 x double> %b 352*9880d681SAndroid Build Coastguard Worker} 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @fptosi01(<8 x double> %a) { 355*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptosi01: 356*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 357*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvttpd2dq %zmm0, %ymm0 358*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 359*9880d681SAndroid Build Coastguard Worker %b = fptosi <8 x double> %a to <8 x i32> 360*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %b 361*9880d681SAndroid Build Coastguard Worker} 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @fptosi03(<4 x double> %a) { 364*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptosi03: 365*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 366*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvttpd2dqy %ymm0, %xmm0 367*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 368*9880d681SAndroid Build Coastguard Worker; 369*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptosi03: 370*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 371*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvttpd2dq %ymm0, %xmm0 372*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 373*9880d681SAndroid Build Coastguard Worker %b = fptosi <4 x double> %a to <4 x i32> 374*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %b 375*9880d681SAndroid Build Coastguard Worker} 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @fptrunc00(<16 x double> %b) nounwind { 378*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptrunc00: 379*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 380*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtpd2ps %zmm0, %ymm0 381*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtpd2ps %zmm1, %ymm1 382*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0 383*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 384*9880d681SAndroid Build Coastguard Worker; 385*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptrunc00: 386*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 387*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtpd2ps %zmm0, %ymm0 388*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtpd2ps %zmm1, %ymm1 389*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vinsertf32x8 $1, %ymm1, %zmm0, %zmm0 390*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 391*9880d681SAndroid Build Coastguard Worker %a = fptrunc <16 x double> %b to <16 x float> 392*9880d681SAndroid Build Coastguard Worker ret <16 x float> %a 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @fptrunc01(<4 x double> %b) { 396*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptrunc01: 397*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 398*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtpd2psy %ymm0, %xmm0 399*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 400*9880d681SAndroid Build Coastguard Worker; 401*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptrunc01: 402*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 403*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtpd2ps %ymm0, %xmm0 404*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 405*9880d681SAndroid Build Coastguard Worker %a = fptrunc <4 x double> %b to <4 x float> 406*9880d681SAndroid Build Coastguard Worker ret <4 x float> %a 407*9880d681SAndroid Build Coastguard Worker} 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @fptrunc02(<4 x double> %b, <4 x i1> %mask) { 410*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fptrunc02: 411*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 412*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpslld $31, %xmm1, %xmm1 413*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtpd2psy %ymm0, %xmm0 414*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vxorps %xmm2, %xmm2, %xmm2 415*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvps %xmm1, %xmm0, %xmm2, %xmm0 416*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 417*9880d681SAndroid Build Coastguard Worker; 418*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fptrunc02: 419*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 420*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpslld $31, %xmm1, %xmm1 421*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vptestmd %xmm1, %xmm1, %k1 422*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtpd2ps %ymm0, %xmm0 {%k1} {z} 423*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 424*9880d681SAndroid Build Coastguard Worker %a = fptrunc <4 x double> %b to <4 x float> 425*9880d681SAndroid Build Coastguard Worker %c = select <4 x i1>%mask, <4 x float>%a, <4 x float> zeroinitializer 426*9880d681SAndroid Build Coastguard Worker ret <4 x float> %c 427*9880d681SAndroid Build Coastguard Worker} 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @fpext00(<8 x float> %b) nounwind { 430*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fpext00: 431*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 432*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtps2pd %ymm0, %zmm0 433*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 434*9880d681SAndroid Build Coastguard Worker %a = fpext <8 x float> %b to <8 x double> 435*9880d681SAndroid Build Coastguard Worker ret <8 x double> %a 436*9880d681SAndroid Build Coastguard Worker} 437*9880d681SAndroid Build Coastguard Worker 438*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @fpext01(<4 x float> %b, <4 x double>%b1, <4 x double>%a1) { 439*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: fpext01: 440*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 441*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtps2pd %xmm0, %ymm0 442*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd %ymm2, %ymm1, %ymm1 443*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vxorpd %ymm2, %ymm2, %ymm2 444*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vblendvpd %ymm1, %ymm0, %ymm2, %ymm0 445*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 446*9880d681SAndroid Build Coastguard Worker; 447*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: fpext01: 448*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 449*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd %ymm2, %ymm1, %k1 450*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtps2pd %xmm0, %ymm0 {%k1} {z} 451*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 452*9880d681SAndroid Build Coastguard Worker %a = fpext <4 x float> %b to <4 x double> 453*9880d681SAndroid Build Coastguard Worker %mask = fcmp ogt <4 x double>%a1, %b1 454*9880d681SAndroid Build Coastguard Worker %c = select <4 x i1>%mask, <4 x double>%a, <4 x double>zeroinitializer 455*9880d681SAndroid Build Coastguard Worker ret <4 x double> %c 456*9880d681SAndroid Build Coastguard Worker} 457*9880d681SAndroid Build Coastguard Worker 458*9880d681SAndroid Build Coastguard Workerdefine double @funcA(i64* nocapture %e) { 459*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: funcA: 460*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: ## %entry 461*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtsi2sdq (%rdi), %xmm0, %xmm0 462*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 463*9880d681SAndroid Build Coastguard Workerentry: 464*9880d681SAndroid Build Coastguard Worker %tmp1 = load i64, i64* %e, align 8 465*9880d681SAndroid Build Coastguard Worker %conv = sitofp i64 %tmp1 to double 466*9880d681SAndroid Build Coastguard Worker ret double %conv 467*9880d681SAndroid Build Coastguard Worker} 468*9880d681SAndroid Build Coastguard Worker 469*9880d681SAndroid Build Coastguard Workerdefine double @funcB(i32* %e) { 470*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: funcB: 471*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: ## %entry 472*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtsi2sdl (%rdi), %xmm0, %xmm0 473*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 474*9880d681SAndroid Build Coastguard Workerentry: 475*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %e, align 4 476*9880d681SAndroid Build Coastguard Worker %conv = sitofp i32 %tmp1 to double 477*9880d681SAndroid Build Coastguard Worker ret double %conv 478*9880d681SAndroid Build Coastguard Worker} 479*9880d681SAndroid Build Coastguard Worker 480*9880d681SAndroid Build Coastguard Workerdefine float @funcC(i32* %e) { 481*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: funcC: 482*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: ## %entry 483*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtsi2ssl (%rdi), %xmm0, %xmm0 484*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 485*9880d681SAndroid Build Coastguard Workerentry: 486*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* %e, align 4 487*9880d681SAndroid Build Coastguard Worker %conv = sitofp i32 %tmp1 to float 488*9880d681SAndroid Build Coastguard Worker ret float %conv 489*9880d681SAndroid Build Coastguard Worker} 490*9880d681SAndroid Build Coastguard Worker 491*9880d681SAndroid Build Coastguard Workerdefine float @i64tof32(i64* %e) { 492*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: i64tof32: 493*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: ## %entry 494*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtsi2ssq (%rdi), %xmm0, %xmm0 495*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 496*9880d681SAndroid Build Coastguard Workerentry: 497*9880d681SAndroid Build Coastguard Worker %tmp1 = load i64, i64* %e, align 8 498*9880d681SAndroid Build Coastguard Worker %conv = sitofp i64 %tmp1 to float 499*9880d681SAndroid Build Coastguard Worker ret float %conv 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Workerdefine void @fpext() { 503*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fpext: 504*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: ## %entry 505*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero 506*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 507*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovsd %xmm0, -{{[0-9]+}}(%rsp) 508*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 509*9880d681SAndroid Build Coastguard Workerentry: 510*9880d681SAndroid Build Coastguard Worker %f = alloca float, align 4 511*9880d681SAndroid Build Coastguard Worker %d = alloca double, align 8 512*9880d681SAndroid Build Coastguard Worker %tmp = load float, float* %f, align 4 513*9880d681SAndroid Build Coastguard Worker %conv = fpext float %tmp to double 514*9880d681SAndroid Build Coastguard Worker store double %conv, double* %d, align 8 515*9880d681SAndroid Build Coastguard Worker ret void 516*9880d681SAndroid Build Coastguard Worker} 517*9880d681SAndroid Build Coastguard Worker 518*9880d681SAndroid Build Coastguard Workerdefine void @fpround_scalar() nounwind uwtable { 519*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fpround_scalar: 520*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: ## %entry 521*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero 522*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtsd2ss %xmm0, %xmm0, %xmm0 523*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp) 524*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 525*9880d681SAndroid Build Coastguard Workerentry: 526*9880d681SAndroid Build Coastguard Worker %f = alloca float, align 4 527*9880d681SAndroid Build Coastguard Worker %d = alloca double, align 8 528*9880d681SAndroid Build Coastguard Worker %tmp = load double, double* %d, align 8 529*9880d681SAndroid Build Coastguard Worker %conv = fptrunc double %tmp to float 530*9880d681SAndroid Build Coastguard Worker store float %conv, float* %f, align 4 531*9880d681SAndroid Build Coastguard Worker ret void 532*9880d681SAndroid Build Coastguard Worker} 533*9880d681SAndroid Build Coastguard Worker 534*9880d681SAndroid Build Coastguard Workerdefine double @long_to_double(i64 %x) { 535*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: long_to_double: 536*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 537*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdi, %xmm0 538*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 539*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %x to double 540*9880d681SAndroid Build Coastguard Worker ret double %res 541*9880d681SAndroid Build Coastguard Worker} 542*9880d681SAndroid Build Coastguard Worker 543*9880d681SAndroid Build Coastguard Workerdefine i64 @double_to_long(double %x) { 544*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: double_to_long: 545*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 546*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %xmm0, %rax 547*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 548*9880d681SAndroid Build Coastguard Worker %res = bitcast double %x to i64 549*9880d681SAndroid Build Coastguard Worker ret i64 %res 550*9880d681SAndroid Build Coastguard Worker} 551*9880d681SAndroid Build Coastguard Worker 552*9880d681SAndroid Build Coastguard Workerdefine float @int_to_float(i32 %x) { 553*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: int_to_float: 554*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 555*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %edi, %xmm0 556*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 557*9880d681SAndroid Build Coastguard Worker %res = bitcast i32 %x to float 558*9880d681SAndroid Build Coastguard Worker ret float %res 559*9880d681SAndroid Build Coastguard Worker} 560*9880d681SAndroid Build Coastguard Worker 561*9880d681SAndroid Build Coastguard Workerdefine i32 @float_to_int(float %x) { 562*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: float_to_int: 563*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 564*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovd %xmm0, %eax 565*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 566*9880d681SAndroid Build Coastguard Worker %res = bitcast float %x to i32 567*9880d681SAndroid Build Coastguard Worker ret i32 %res 568*9880d681SAndroid Build Coastguard Worker} 569*9880d681SAndroid Build Coastguard Worker 570*9880d681SAndroid Build Coastguard Workerdefine <16 x double> @uitof64(<16 x i32> %a) nounwind { 571*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: uitof64: 572*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 573*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtudq2pd %ymm0, %zmm2 574*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm0 575*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtudq2pd %ymm0, %zmm1 576*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovaps %zmm2, %zmm0 577*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 578*9880d681SAndroid Build Coastguard Worker; 579*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: uitof64: 580*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 581*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtudq2pd %ymm0, %zmm2 582*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vextracti32x8 $1, %zmm0, %ymm0 583*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtudq2pd %ymm0, %zmm1 584*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vmovaps %zmm2, %zmm0 585*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 586*9880d681SAndroid Build Coastguard Worker %b = uitofp <16 x i32> %a to <16 x double> 587*9880d681SAndroid Build Coastguard Worker ret <16 x double> %b 588*9880d681SAndroid Build Coastguard Worker} 589*9880d681SAndroid Build Coastguard Worker 590*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @uitof64_256(<4 x i32> %a) nounwind { 591*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: uitof64_256: 592*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 593*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<def> 594*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtudq2pd %ymm0, %zmm0 595*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 596*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 597*9880d681SAndroid Build Coastguard Worker; 598*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: uitof64_256: 599*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 600*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtudq2pd %xmm0, %ymm0 601*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 602*9880d681SAndroid Build Coastguard Worker %b = uitofp <4 x i32> %a to <4 x double> 603*9880d681SAndroid Build Coastguard Worker ret <4 x double> %b 604*9880d681SAndroid Build Coastguard Worker} 605*9880d681SAndroid Build Coastguard Worker 606*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @uitof32(<16 x i32> %a) nounwind { 607*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: uitof32: 608*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 609*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtudq2ps %zmm0, %zmm0 610*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 611*9880d681SAndroid Build Coastguard Worker %b = uitofp <16 x i32> %a to <16 x float> 612*9880d681SAndroid Build Coastguard Worker ret <16 x float> %b 613*9880d681SAndroid Build Coastguard Worker} 614*9880d681SAndroid Build Coastguard Worker 615*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @uitof32_256(<8 x i32> %a) nounwind { 616*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: uitof32_256: 617*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 618*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 619*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtudq2ps %zmm0, %zmm0 620*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 621*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 622*9880d681SAndroid Build Coastguard Worker; 623*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: uitof32_256: 624*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 625*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtudq2ps %ymm0, %ymm0 626*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 627*9880d681SAndroid Build Coastguard Worker %b = uitofp <8 x i32> %a to <8 x float> 628*9880d681SAndroid Build Coastguard Worker ret <8 x float> %b 629*9880d681SAndroid Build Coastguard Worker} 630*9880d681SAndroid Build Coastguard Worker 631*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @uitof32_128(<4 x i32> %a) nounwind { 632*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: uitof32_128: 633*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 634*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def> 635*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtudq2ps %zmm0, %zmm0 636*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill> 637*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 638*9880d681SAndroid Build Coastguard Worker; 639*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: uitof32_128: 640*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 641*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtudq2ps %xmm0, %xmm0 642*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 643*9880d681SAndroid Build Coastguard Worker %b = uitofp <4 x i32> %a to <4 x float> 644*9880d681SAndroid Build Coastguard Worker ret <4 x float> %b 645*9880d681SAndroid Build Coastguard Worker} 646*9880d681SAndroid Build Coastguard Worker 647*9880d681SAndroid Build Coastguard Workerdefine i32 @fptosi02(float %a) nounwind { 648*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptosi02: 649*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 650*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvttss2si %xmm0, %eax 651*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 652*9880d681SAndroid Build Coastguard Worker %b = fptosi float %a to i32 653*9880d681SAndroid Build Coastguard Worker ret i32 %b 654*9880d681SAndroid Build Coastguard Worker} 655*9880d681SAndroid Build Coastguard Worker 656*9880d681SAndroid Build Coastguard Workerdefine i32 @fptoui02(float %a) nounwind { 657*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptoui02: 658*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 659*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvttss2usi %xmm0, %eax 660*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 661*9880d681SAndroid Build Coastguard Worker %b = fptoui float %a to i32 662*9880d681SAndroid Build Coastguard Worker ret i32 %b 663*9880d681SAndroid Build Coastguard Worker} 664*9880d681SAndroid Build Coastguard Worker 665*9880d681SAndroid Build Coastguard Workerdefine float @uitofp02(i32 %a) nounwind { 666*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: uitofp02: 667*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 668*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtusi2ssl %edi, %xmm0, %xmm0 669*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 670*9880d681SAndroid Build Coastguard Worker %b = uitofp i32 %a to float 671*9880d681SAndroid Build Coastguard Worker ret float %b 672*9880d681SAndroid Build Coastguard Worker} 673*9880d681SAndroid Build Coastguard Worker 674*9880d681SAndroid Build Coastguard Workerdefine double @uitofp03(i32 %a) nounwind { 675*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: uitofp03: 676*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 677*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtusi2sdl %edi, %xmm0, %xmm0 678*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 679*9880d681SAndroid Build Coastguard Worker %b = uitofp i32 %a to double 680*9880d681SAndroid Build Coastguard Worker ret double %b 681*9880d681SAndroid Build Coastguard Worker} 682*9880d681SAndroid Build Coastguard Worker 683*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @sitofp_16i1_float(<16 x i32> %a) { 684*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sitofp_16i1_float: 685*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 686*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpxord %zmm1, %zmm1, %zmm1 687*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpcmpgtd %zmm0, %zmm1, %k1 688*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 689*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z} 690*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtdq2ps %zmm0, %zmm0 691*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 692*9880d681SAndroid Build Coastguard Worker; 693*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sitofp_16i1_float: 694*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 695*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %zmm1, %zmm1, %zmm1 696*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpcmpgtd %zmm0, %zmm1, %k0 697*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovm2d %k0, %zmm0 698*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtdq2ps %zmm0, %zmm0 699*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 700*9880d681SAndroid Build Coastguard Worker %mask = icmp slt <16 x i32> %a, zeroinitializer 701*9880d681SAndroid Build Coastguard Worker %1 = sitofp <16 x i1> %mask to <16 x float> 702*9880d681SAndroid Build Coastguard Worker ret <16 x float> %1 703*9880d681SAndroid Build Coastguard Worker} 704*9880d681SAndroid Build Coastguard Worker 705*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @sitofp_16i8_float(<16 x i8> %a) { 706*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sitofp_16i8_float: 707*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 708*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovsxbd %xmm0, %zmm0 709*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtdq2ps %zmm0, %zmm0 710*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 711*9880d681SAndroid Build Coastguard Worker %1 = sitofp <16 x i8> %a to <16 x float> 712*9880d681SAndroid Build Coastguard Worker ret <16 x float> %1 713*9880d681SAndroid Build Coastguard Worker} 714*9880d681SAndroid Build Coastguard Worker 715*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @sitofp_16i16_float(<16 x i16> %a) { 716*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sitofp_16i16_float: 717*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 718*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovsxwd %ymm0, %zmm0 719*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtdq2ps %zmm0, %zmm0 720*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 721*9880d681SAndroid Build Coastguard Worker %1 = sitofp <16 x i16> %a to <16 x float> 722*9880d681SAndroid Build Coastguard Worker ret <16 x float> %1 723*9880d681SAndroid Build Coastguard Worker} 724*9880d681SAndroid Build Coastguard Worker 725*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sitofp_8i16_double(<8 x i16> %a) { 726*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sitofp_8i16_double: 727*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 728*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovsxwd %xmm0, %ymm0 729*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtdq2pd %ymm0, %zmm0 730*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 731*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i16> %a to <8 x double> 732*9880d681SAndroid Build Coastguard Worker ret <8 x double> %1 733*9880d681SAndroid Build Coastguard Worker} 734*9880d681SAndroid Build Coastguard Worker 735*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sitofp_8i8_double(<8 x i8> %a) { 736*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sitofp_8i8_double: 737*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 738*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero 739*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpslld $24, %ymm0, %ymm0 740*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpsrad $24, %ymm0, %ymm0 741*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtdq2pd %ymm0, %zmm0 742*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 743*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i8> %a to <8 x double> 744*9880d681SAndroid Build Coastguard Worker ret <8 x double> %1 745*9880d681SAndroid Build Coastguard Worker} 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @sitofp_8i1_double(<8 x double> %a) { 748*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sitofp_8i1_double: 749*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 750*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpxord %zmm1, %zmm1, %zmm1 751*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcmpltpd %zmm0, %zmm1, %k1 752*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 753*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z} 754*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 755*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vcvtdq2pd %ymm0, %zmm0 756*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 757*9880d681SAndroid Build Coastguard Worker; 758*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sitofp_8i1_double: 759*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 760*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpxord %zmm1, %zmm1, %zmm1 761*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcmpltpd %zmm0, %zmm1, %k0 762*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovm2d %k0, %ymm0 763*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vcvtdq2pd %ymm0, %zmm0 764*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 765*9880d681SAndroid Build Coastguard Worker %cmpres = fcmp ogt <8 x double> %a, zeroinitializer 766*9880d681SAndroid Build Coastguard Worker %1 = sitofp <8 x i1> %cmpres to <8 x double> 767*9880d681SAndroid Build Coastguard Worker ret <8 x double> %1 768*9880d681SAndroid Build Coastguard Worker} 769*9880d681SAndroid Build Coastguard Worker 770*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @uitofp_16i8(<16 x i8>%a) { 771*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: uitofp_16i8: 772*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 773*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero 774*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtudq2ps %zmm0, %zmm0 775*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 776*9880d681SAndroid Build Coastguard Worker %b = uitofp <16 x i8> %a to <16 x float> 777*9880d681SAndroid Build Coastguard Worker ret <16 x float>%b 778*9880d681SAndroid Build Coastguard Worker} 779*9880d681SAndroid Build Coastguard Worker 780*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @uitofp_16i16(<16 x i16>%a) { 781*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: uitofp_16i16: 782*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 783*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero 784*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vcvtudq2ps %zmm0, %zmm0 785*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 786*9880d681SAndroid Build Coastguard Worker %b = uitofp <16 x i16> %a to <16 x float> 787*9880d681SAndroid Build Coastguard Worker ret <16 x float>%b 788*9880d681SAndroid Build Coastguard Worker} 789*9880d681SAndroid Build Coastguard Worker 790