1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx --show-mc-encoding | FileCheck %s
4 ; CHECK: vcvtdq2ps %zmm
6 define <16 x float> @sitof32(<16 x i32> %a) nounwind {
7 %b = sitofp <16 x i32> %a to <16 x float>
11 ; CHECK-LABEL: sltof864
13 define <8 x double> @sltof864(<8 x i64> %a) {
14 %b = sitofp <8 x i64> %a to <8 x double>
18 ; CHECK-LABEL: sltof464
20 define <4 x double> @sltof464(<4 x i64> %a) {
21 %b = sitofp <4 x i64> %a to <4 x double>
25 ; CHECK-LABEL: sltof2f32
27 define <2 x float> @sltof2f32(<2 x i64> %a) {
28 %b = sitofp <2 x i64> %a to <2 x float>
32 ; CHECK-LABEL: sltof4f32_mem
33 ; CHECK: vcvtqq2psy (%rdi)
34 define <4 x float> @sltof4f32_mem(<4 x i64>* %a) {
35 %a1 = load <4 x i64>, <4 x i64>* %a, align 8
36 %b = sitofp <4 x i64> %a1 to <4 x float>
40 ; CHECK-LABEL: f64tosl
42 define <4 x i64> @f64tosl(<4 x double> %a) {
43 %b = fptosi <4 x double> %a to <4 x i64>
47 ; CHECK-LABEL: f32tosl
49 define <4 x i64> @f32tosl(<4 x float> %a) {
50 %b = fptosi <4 x float> %a to <4 x i64>
54 ; CHECK-LABEL: sltof432
56 define <4 x float> @sltof432(<4 x i64> %a) {
57 %b = sitofp <4 x i64> %a to <4 x float>
61 ; CHECK-LABEL: ultof432
63 define <4 x float> @ultof432(<4 x i64> %a) {
64 %b = uitofp <4 x i64> %a to <4 x float>
68 ; CHECK-LABEL: ultof64
70 define <8 x double> @ultof64(<8 x i64> %a) {
71 %b = uitofp <8 x i64> %a to <8 x double>
75 ; CHECK-LABEL: fptosi00
76 ; CHECK: vcvttps2dq %zmm
78 define <16 x i32> @fptosi00(<16 x float> %a) nounwind {
79 %b = fptosi <16 x float> %a to <16 x i32>
83 ; CHECK-LABEL: fptoui00
86 define <16 x i32> @fptoui00(<16 x float> %a) nounwind {
87 %b = fptoui <16 x float> %a to <16 x i32>
91 ; CHECK-LABEL: fptoui_256
94 define <8 x i32> @fptoui_256(<8 x float> %a) nounwind {
95 %b = fptoui <8 x float> %a to <8 x i32>
99 ; CHECK-LABEL: fptoui_128
102 define <4 x i32> @fptoui_128(<4 x float> %a) nounwind {
103 %b = fptoui <4 x float> %a to <4 x i32>
107 ; CHECK-LABEL: fptoui01
110 define <8 x i32> @fptoui01(<8 x double> %a) nounwind {
111 %b = fptoui <8 x double> %a to <8 x i32>
115 ; CHECK-LABEL: sitof64
116 ; CHECK: vcvtdq2pd %ymm
118 define <8 x double> @sitof64(<8 x i32> %a) {
119 %b = sitofp <8 x i32> %a to <8 x double>
123 ; CHECK-LABEL: fptosi01
124 ; CHECK: vcvttpd2dq %zmm
126 define <8 x i32> @fptosi01(<8 x double> %a) {
127 %b = fptosi <8 x double> %a to <8 x i32>
131 ; CHECK-LABEL: fptosi03
132 ; CHECK: vcvttpd2dq %ymm
134 define <4 x i32> @fptosi03(<4 x double> %a) {
135 %b = fptosi <4 x double> %a to <4 x i32>
139 ; CHECK-LABEL: fptrunc00
140 ; CHECK: vcvtpd2ps %zmm
141 ; CHECK-NEXT: vcvtpd2ps %zmm
142 ; CHECK-NEXT: vinsertf
144 define <16 x float> @fptrunc00(<16 x double> %b) nounwind {
145 %a = fptrunc <16 x double> %b to <16 x float>
149 ; CHECK-LABEL: fptrunc01
150 ; CHECK: vcvtpd2ps %ymm
151 define <4 x float> @fptrunc01(<4 x double> %b) {
152 %a = fptrunc <4 x double> %b to <4 x float>
156 ; CHECK-LABEL: fptrunc02
157 ; CHECK: vcvtpd2ps %ymm0, %xmm0 {%k1} {z}
158 define <4 x float> @fptrunc02(<4 x double> %b, <4 x i1> %mask) {
159 %a = fptrunc <4 x double> %b to <4 x float>
160 %c = select <4 x i1>%mask, <4 x float>%a, <4 x float> zeroinitializer
164 ; CHECK-LABEL: fpext00
165 ; CHECK: vcvtps2pd %ymm0, %zmm0
167 define <8 x double> @fpext00(<8 x float> %b) nounwind {
168 %a = fpext <8 x float> %b to <8 x double>
172 ; CHECK-LABEL: fpext01
173 ; CHECK: vcvtps2pd %xmm0, %ymm0 {%k1} {z}
175 define <4 x double> @fpext01(<4 x float> %b, <4 x double>%b1, <4 x double>%a1) {
176 %a = fpext <4 x float> %b to <4 x double>
177 %mask = fcmp ogt <4 x double>%a1, %b1
178 %c = select <4 x i1>%mask, <4 x double>%a, <4 x double>zeroinitializer
183 ; CHECK: vcvtsi2sdq (%rdi){{.*}} encoding: [0x62
185 define double @funcA(i64* nocapture %e) {
187 %tmp1 = load i64, i64* %e, align 8
188 %conv = sitofp i64 %tmp1 to double
193 ; CHECK: vcvtsi2sdl (%{{.*}} encoding: [0x62
195 define double @funcB(i32* %e) {
197 %tmp1 = load i32, i32* %e, align 4
198 %conv = sitofp i32 %tmp1 to double
203 ; CHECK: vcvtsi2ssl (%{{.*}} encoding: [0x62
205 define float @funcC(i32* %e) {
207 %tmp1 = load i32, i32* %e, align 4
208 %conv = sitofp i32 %tmp1 to float
212 ; CHECK-LABEL: i64tof32
213 ; CHECK: vcvtsi2ssq (%{{.*}} encoding: [0x62
215 define float @i64tof32(i64* %e) {
217 %tmp1 = load i64, i64* %e, align 8
218 %conv = sitofp i64 %tmp1 to float
223 ; CHECK: vcvtss2sd {{.*}} encoding: [0x62
225 define void @fpext() {
227 %f = alloca float, align 4
228 %d = alloca double, align 8
229 %tmp = load float, float* %f, align 4
230 %conv = fpext float %tmp to double
231 store double %conv, double* %d, align 8
235 ; CHECK-LABEL: fpround_scalar
236 ; CHECK: vmovsd {{.*}} encoding: [0x62
237 ; CHECK: vcvtsd2ss {{.*}} encoding: [0x62
238 ; CHECK: vmovss {{.*}} encoding: [0x62
240 define void @fpround_scalar() nounwind uwtable {
242 %f = alloca float, align 4
243 %d = alloca double, align 8
244 %tmp = load double, double* %d, align 8
245 %conv = fptrunc double %tmp to float
246 store float %conv, float* %f, align 4
250 ; CHECK-LABEL: long_to_double
251 ; CHECK: vmovq {{.*}} encoding: [0x62
253 define double @long_to_double(i64 %x) {
254 %res = bitcast i64 %x to double
258 ; CHECK-LABEL: double_to_long
259 ; CHECK: vmovq {{.*}} encoding: [0x62
261 define i64 @double_to_long(double %x) {
262 %res = bitcast double %x to i64
266 ; CHECK-LABEL: int_to_float
267 ; CHECK: vmovd {{.*}} encoding: [0x62
269 define float @int_to_float(i32 %x) {
270 %res = bitcast i32 %x to float
274 ; CHECK-LABEL: float_to_int
275 ; CHECK: vmovd {{.*}} encoding: [0x62
277 define i32 @float_to_int(float %x) {
278 %res = bitcast float %x to i32
282 ; CHECK-LABEL: uitof64
284 ; CHECK: vextracti64x4
287 define <16 x double> @uitof64(<16 x i32> %a) nounwind {
288 %b = uitofp <16 x i32> %a to <16 x double>
292 ; CHECK-LABEL: uitof64_256
295 define <4 x double> @uitof64_256(<4 x i32> %a) nounwind {
296 %b = uitofp <4 x i32> %a to <4 x double>
300 ; CHECK-LABEL: uitof32
303 define <16 x float> @uitof32(<16 x i32> %a) nounwind {
304 %b = uitofp <16 x i32> %a to <16 x float>
308 ; CHECK-LABEL: uitof32_256
311 define <8 x float> @uitof32_256(<8 x i32> %a) nounwind {
312 %b = uitofp <8 x i32> %a to <8 x float>
316 ; CHECK-LABEL: uitof32_128
319 define <4 x float> @uitof32_128(<4 x i32> %a) nounwind {
320 %b = uitofp <4 x i32> %a to <4 x float>
324 ; CHECK-LABEL: @fptosi02
325 ; CHECK: vcvttss2si {{.*}} encoding: [0x62
327 define i32 @fptosi02(float %a) nounwind {
328 %b = fptosi float %a to i32
332 ; CHECK-LABEL: @fptoui02
333 ; CHECK: vcvttss2usi {{.*}} encoding: [0x62
335 define i32 @fptoui02(float %a) nounwind {
336 %b = fptoui float %a to i32
340 ; CHECK-LABEL: @uitofp02
343 define float @uitofp02(i32 %a) nounwind {
344 %b = uitofp i32 %a to float
348 ; CHECK-LABEL: @uitofp03
351 define double @uitofp03(i32 %a) nounwind {
352 %b = uitofp i32 %a to double
356 ; CHECK-LABEL: @sitofp_16i1_float
359 define <16 x float> @sitofp_16i1_float(<16 x i32> %a) {
360 %mask = icmp slt <16 x i32> %a, zeroinitializer
361 %1 = sitofp <16 x i1> %mask to <16 x float>
365 ; CHECK-LABEL: @sitofp_16i8_float
368 define <16 x float> @sitofp_16i8_float(<16 x i8> %a) {
369 %1 = sitofp <16 x i8> %a to <16 x float>
373 ; CHECK-LABEL: @sitofp_16i16_float
376 define <16 x float> @sitofp_16i16_float(<16 x i16> %a) {
377 %1 = sitofp <16 x i16> %a to <16 x float>
381 ; CHECK-LABEL: @sitofp_8i16_double
384 define <8 x double> @sitofp_8i16_double(<8 x i16> %a) {
385 %1 = sitofp <8 x i16> %a to <8 x double>
389 ; CHECK-LABEL: sitofp_8i8_double
394 define <8 x double> @sitofp_8i8_double(<8 x i8> %a) {
395 %1 = sitofp <8 x i8> %a to <8 x double>
400 ; CHECK-LABEL: @sitofp_8i1_double
403 define <8 x double> @sitofp_8i1_double(<8 x double> %a) {
404 %cmpres = fcmp ogt <8 x double> %a, zeroinitializer
405 %1 = sitofp <8 x i1> %cmpres to <8 x double>
409 ; CHECK-LABEL: @uitofp_16i8
412 define <16 x float> @uitofp_16i8(<16 x i8>%a) {
413 %b = uitofp <16 x i8> %a to <16 x float>
417 ; CHECK-LABEL: @uitofp_16i16
420 define <16 x float> @uitofp_16i16(<16 x i16>%a) {
421 %b = uitofp <16 x i16> %a to <16 x float>