xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-cvt.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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