1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
8 define <vscale x 2 x float> @fcvts_nxv2f16(<vscale x 2 x half> %a) {
9 ; CHECK-LABEL: fcvts_nxv2f16:
11 ; CHECK-NEXT: ptrue p0.d
12 ; CHECK-NEXT: fcvt z0.s, p0/m, z0.h
14 %res = fpext <vscale x 2 x half> %a to <vscale x 2 x float>
15 ret <vscale x 2 x float> %res
18 define <vscale x 3 x float> @fcvts_nxv3f16(<vscale x 3 x half> %a) {
19 ; CHECK-LABEL: fcvts_nxv3f16:
21 ; CHECK-NEXT: ptrue p0.s
22 ; CHECK-NEXT: fcvt z0.s, p0/m, z0.h
24 %res = fpext <vscale x 3 x half> %a to <vscale x 3 x float>
25 ret <vscale x 3 x float> %res
28 define <vscale x 4 x float> @fcvts_nxv4f16(<vscale x 4 x half> %a) {
29 ; CHECK-LABEL: fcvts_nxv4f16:
31 ; CHECK-NEXT: ptrue p0.s
32 ; CHECK-NEXT: fcvt z0.s, p0/m, z0.h
34 %res = fpext <vscale x 4 x half> %a to <vscale x 4 x float>
35 ret <vscale x 4 x float> %res
38 define <vscale x 2 x double> @fcvtd_nxv2f16(<vscale x 2 x half> %a) {
39 ; CHECK-LABEL: fcvtd_nxv2f16:
41 ; CHECK-NEXT: ptrue p0.d
42 ; CHECK-NEXT: fcvt z0.d, p0/m, z0.h
44 %res = fpext <vscale x 2 x half> %a to <vscale x 2 x double>
45 ret <vscale x 2 x double> %res
48 define <vscale x 2 x double> @fcvtd_nxv2f32(<vscale x 2 x float> %a) {
49 ; CHECK-LABEL: fcvtd_nxv2f32:
51 ; CHECK-NEXT: ptrue p0.d
52 ; CHECK-NEXT: fcvt z0.d, p0/m, z0.s
54 %res = fpext <vscale x 2 x float> %a to <vscale x 2 x double>
55 ret <vscale x 2 x double> %res
62 define <vscale x 2 x half> @fcvth_nxv2f32(<vscale x 2 x float> %a) {
63 ; CHECK-LABEL: fcvth_nxv2f32:
65 ; CHECK-NEXT: ptrue p0.d
66 ; CHECK-NEXT: fcvt z0.h, p0/m, z0.s
68 %res = fptrunc <vscale x 2 x float> %a to <vscale x 2 x half>
69 ret <vscale x 2 x half> %res
72 define <vscale x 3 x half> @fcvth_nxv3f32(<vscale x 3 x float> %a) {
73 ; CHECK-LABEL: fcvth_nxv3f32:
75 ; CHECK-NEXT: ptrue p0.s
76 ; CHECK-NEXT: fcvt z0.h, p0/m, z0.s
78 %res = fptrunc <vscale x 3 x float> %a to <vscale x 3 x half>
79 ret <vscale x 3 x half> %res
82 define <vscale x 4 x half> @fcvth_nxv4f32(<vscale x 4 x float> %a) {
83 ; CHECK-LABEL: fcvth_nxv4f32:
85 ; CHECK-NEXT: ptrue p0.s
86 ; CHECK-NEXT: fcvt z0.h, p0/m, z0.s
88 %res = fptrunc <vscale x 4 x float> %a to <vscale x 4 x half>
89 ret <vscale x 4 x half> %res
92 define <vscale x 2 x half> @fcvth_nxv2f64(<vscale x 2 x double> %a) {
93 ; CHECK-LABEL: fcvth_nxv2f64:
95 ; CHECK-NEXT: ptrue p0.d
96 ; CHECK-NEXT: fcvt z0.h, p0/m, z0.d
98 %res = fptrunc <vscale x 2 x double> %a to <vscale x 2 x half>
99 ret <vscale x 2 x half> %res
102 define <vscale x 2 x float> @fcvts_nxv2f64(<vscale x 2 x double> %a) {
103 ; CHECK-LABEL: fcvts_nxv2f64:
105 ; CHECK-NEXT: ptrue p0.d
106 ; CHECK-NEXT: fcvt z0.s, p0/m, z0.d
108 %res = fptrunc <vscale x 2 x double> %a to <vscale x 2 x float>
109 ret <vscale x 2 x float> %res
116 define <vscale x 2 x i16> @fcvtzs_h_nxv2f16(<vscale x 2 x half> %a) {
117 ; CHECK-LABEL: fcvtzs_h_nxv2f16:
119 ; CHECK-NEXT: ptrue p0.d
120 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h
122 %res = fptosi <vscale x 2 x half> %a to <vscale x 2 x i16>
123 ret <vscale x 2 x i16> %res
126 define <vscale x 2 x i16> @fcvtzs_h_nxv2f32(<vscale x 2 x float> %a) {
127 ; CHECK-LABEL: fcvtzs_h_nxv2f32:
129 ; CHECK-NEXT: ptrue p0.d
130 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s
132 %res = fptosi <vscale x 2 x float> %a to <vscale x 2 x i16>
133 ret <vscale x 2 x i16> %res
136 define <vscale x 2 x i16> @fcvtzs_h_nxv2f64(<vscale x 2 x double> %a) {
137 ; CHECK-LABEL: fcvtzs_h_nxv2f64:
139 ; CHECK-NEXT: ptrue p0.d
140 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
142 %res = fptosi <vscale x 2 x double> %a to <vscale x 2 x i16>
143 ret <vscale x 2 x i16> %res
146 define <vscale x 4 x i16> @fcvtzs_h_nxv4f16(<vscale x 4 x half> %a) {
147 ; CHECK-LABEL: fcvtzs_h_nxv4f16:
149 ; CHECK-NEXT: ptrue p0.s
150 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h
152 %res = fptosi <vscale x 4 x half> %a to <vscale x 4 x i16>
153 ret <vscale x 4 x i16> %res
156 define <vscale x 4 x i16> @fcvtzs_h_nxv4f32(<vscale x 4 x float> %a) {
157 ; CHECK-LABEL: fcvtzs_h_nxv4f32:
159 ; CHECK-NEXT: ptrue p0.s
160 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s
162 %res = fptosi <vscale x 4 x float> %a to <vscale x 4 x i16>
163 ret <vscale x 4 x i16> %res
166 define <vscale x 7 x i16> @fcvtzs_h_nxv7f16(<vscale x 7 x half> %a) {
167 ; CHECK-LABEL: fcvtzs_h_nxv7f16:
169 ; CHECK-NEXT: ptrue p0.h
170 ; CHECK-NEXT: fcvtzs z0.h, p0/m, z0.h
172 %res = fptosi <vscale x 7 x half> %a to <vscale x 7 x i16>
173 ret <vscale x 7 x i16> %res
176 define <vscale x 8 x i16> @fcvtzs_h_nxv8f16(<vscale x 8 x half> %a) {
177 ; CHECK-LABEL: fcvtzs_h_nxv8f16:
179 ; CHECK-NEXT: ptrue p0.h
180 ; CHECK-NEXT: fcvtzs z0.h, p0/m, z0.h
182 %res = fptosi <vscale x 8 x half> %a to <vscale x 8 x i16>
183 ret <vscale x 8 x i16> %res
186 define <vscale x 2 x i32> @fcvtzs_s_nxv2f16(<vscale x 2 x half> %a) {
187 ; CHECK-LABEL: fcvtzs_s_nxv2f16:
189 ; CHECK-NEXT: ptrue p0.d
190 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h
192 %res = fptosi <vscale x 2 x half> %a to <vscale x 2 x i32>
193 ret <vscale x 2 x i32> %res
196 define <vscale x 2 x i32> @fcvtzs_s_nxv2f32(<vscale x 2 x float> %a) {
197 ; CHECK-LABEL: fcvtzs_s_nxv2f32:
199 ; CHECK-NEXT: ptrue p0.d
200 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s
202 %res = fptosi <vscale x 2 x float> %a to <vscale x 2 x i32>
203 ret <vscale x 2 x i32> %res
206 define <vscale x 2 x i32> @fcvtzs_s_nxv2f64(<vscale x 2 x double> %a) {
207 ; CHECK-LABEL: fcvtzs_s_nxv2f64:
209 ; CHECK-NEXT: ptrue p0.d
210 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
212 %res = fptosi <vscale x 2 x double> %a to <vscale x 2 x i32>
213 ret <vscale x 2 x i32> %res
216 define <vscale x 4 x i32> @fcvtzs_s_nxv4f16(<vscale x 4 x half> %a) {
217 ; CHECK-LABEL: fcvtzs_s_nxv4f16:
219 ; CHECK-NEXT: ptrue p0.s
220 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h
222 %res = fptosi <vscale x 4 x half> %a to <vscale x 4 x i32>
223 ret <vscale x 4 x i32> %res
226 define <vscale x 3 x i32> @fcvtzs_s_nxv3f16(<vscale x 3 x half> %a) {
227 ; CHECK-LABEL: fcvtzs_s_nxv3f16:
229 ; CHECK-NEXT: ptrue p0.s
230 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h
232 %res = fptosi <vscale x 3 x half> %a to <vscale x 3 x i32>
233 ret <vscale x 3 x i32> %res
236 define <vscale x 4 x i32> @fcvtzs_s_nxv4f32(<vscale x 4 x float> %a) {
237 ; CHECK-LABEL: fcvtzs_s_nxv4f32:
239 ; CHECK-NEXT: ptrue p0.s
240 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s
242 %res = fptosi <vscale x 4 x float> %a to <vscale x 4 x i32>
243 ret <vscale x 4 x i32> %res
246 define <vscale x 2 x i64> @fcvtzs_d_nxv2f16(<vscale x 2 x half> %a) {
247 ; CHECK-LABEL: fcvtzs_d_nxv2f16:
249 ; CHECK-NEXT: ptrue p0.d
250 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h
252 %res = fptosi <vscale x 2 x half> %a to <vscale x 2 x i64>
253 ret <vscale x 2 x i64> %res
256 define <vscale x 2 x i64> @fcvtzs_d_nxv2f32(<vscale x 2 x float> %a) {
257 ; CHECK-LABEL: fcvtzs_d_nxv2f32:
259 ; CHECK-NEXT: ptrue p0.d
260 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s
262 %res = fptosi <vscale x 2 x float> %a to <vscale x 2 x i64>
263 ret <vscale x 2 x i64> %res
266 define <vscale x 2 x i64> @fcvtzs_d_nxv2f64(<vscale x 2 x double> %a) {
267 ; CHECK-LABEL: fcvtzs_d_nxv2f64:
269 ; CHECK-NEXT: ptrue p0.d
270 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
272 %res = fptosi <vscale x 2 x double> %a to <vscale x 2 x i64>
273 ret <vscale x 2 x i64> %res
280 ; NOTE: Using fcvtzs is safe as fptoui overflow is considered poison and a
281 ; 64bit signed value encompasses the entire range of a 16bit unsigned value
282 define <vscale x 2 x i16> @fcvtzu_h_nxv2f16(<vscale x 2 x half> %a) {
283 ; CHECK-LABEL: fcvtzu_h_nxv2f16:
285 ; CHECK-NEXT: ptrue p0.d
286 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h
288 %res = fptoui <vscale x 2 x half> %a to <vscale x 2 x i16>
289 ret <vscale x 2 x i16> %res
292 define <vscale x 2 x i16> @fcvtzu_h_nxv2f32(<vscale x 2 x float> %a) {
293 ; CHECK-LABEL: fcvtzu_h_nxv2f32:
295 ; CHECK-NEXT: ptrue p0.d
296 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s
298 %res = fptoui <vscale x 2 x float> %a to <vscale x 2 x i16>
299 ret <vscale x 2 x i16> %res
302 define <vscale x 2 x i16> @fcvtzu_h_nxv2f64(<vscale x 2 x double> %a) {
303 ; CHECK-LABEL: fcvtzu_h_nxv2f64:
305 ; CHECK-NEXT: ptrue p0.d
306 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
308 %res = fptoui <vscale x 2 x double> %a to <vscale x 2 x i16>
309 ret <vscale x 2 x i16> %res
312 define <vscale x 4 x i16> @fcvtzu_h_nxv4f16(<vscale x 4 x half> %a) {
313 ; CHECK-LABEL: fcvtzu_h_nxv4f16:
315 ; CHECK-NEXT: ptrue p0.s
316 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h
318 %res = fptoui <vscale x 4 x half> %a to <vscale x 4 x i16>
319 ret <vscale x 4 x i16> %res
322 define <vscale x 4 x i16> @fcvtzu_h_nxv4f32(<vscale x 4 x float> %a) {
323 ; CHECK-LABEL: fcvtzu_h_nxv4f32:
325 ; CHECK-NEXT: ptrue p0.s
326 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s
328 %res = fptosi <vscale x 4 x float> %a to <vscale x 4 x i16>
329 ret <vscale x 4 x i16> %res
332 define <vscale x 7 x i16> @fcvtzu_h_nxv7f16(<vscale x 7 x half> %a) {
333 ; CHECK-LABEL: fcvtzu_h_nxv7f16:
335 ; CHECK-NEXT: ptrue p0.h
336 ; CHECK-NEXT: fcvtzu z0.h, p0/m, z0.h
338 %res = fptoui <vscale x 7 x half> %a to <vscale x 7 x i16>
339 ret <vscale x 7 x i16> %res
342 define <vscale x 8 x i16> @fcvtzu_h_nxv8f16(<vscale x 8 x half> %a) {
343 ; CHECK-LABEL: fcvtzu_h_nxv8f16:
345 ; CHECK-NEXT: ptrue p0.h
346 ; CHECK-NEXT: fcvtzu z0.h, p0/m, z0.h
348 %res = fptoui <vscale x 8 x half> %a to <vscale x 8 x i16>
349 ret <vscale x 8 x i16> %res
352 define <vscale x 2 x i32> @fcvtzu_s_nxv2f16(<vscale x 2 x half> %a) {
353 ; CHECK-LABEL: fcvtzu_s_nxv2f16:
355 ; CHECK-NEXT: ptrue p0.d
356 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h
358 %res = fptoui <vscale x 2 x half> %a to <vscale x 2 x i32>
359 ret <vscale x 2 x i32> %res
362 define <vscale x 2 x i32> @fcvtzu_s_nxv2f32(<vscale x 2 x float> %a) {
363 ; CHECK-LABEL: fcvtzu_s_nxv2f32:
365 ; CHECK-NEXT: ptrue p0.d
366 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s
368 %res = fptoui <vscale x 2 x float> %a to <vscale x 2 x i32>
369 ret <vscale x 2 x i32> %res
372 define <vscale x 2 x i32> @fcvtzu_s_nxv2f64(<vscale x 2 x double> %a) {
373 ; CHECK-LABEL: fcvtzu_s_nxv2f64:
375 ; CHECK-NEXT: ptrue p0.d
376 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
378 %res = fptoui <vscale x 2 x double> %a to <vscale x 2 x i32>
379 ret <vscale x 2 x i32> %res
382 define <vscale x 3 x i32> @fcvtzu_s_nxv3f16(<vscale x 3 x half> %a) {
383 ; CHECK-LABEL: fcvtzu_s_nxv3f16:
385 ; CHECK-NEXT: ptrue p0.s
386 ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h
388 %res = fptoui <vscale x 3 x half> %a to <vscale x 3 x i32>
389 ret <vscale x 3 x i32> %res
392 define <vscale x 3 x i32> @fcvtzu_s_nxv3f32(<vscale x 3 x float> %a) {
393 ; CHECK-LABEL: fcvtzu_s_nxv3f32:
395 ; CHECK-NEXT: ptrue p0.s
396 ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s
398 %res = fptoui <vscale x 3 x float> %a to <vscale x 3 x i32>
399 ret <vscale x 3 x i32> %res
402 define <vscale x 4 x i32> @fcvtzu_s_nxv4f16(<vscale x 4 x half> %a) {
403 ; CHECK-LABEL: fcvtzu_s_nxv4f16:
405 ; CHECK-NEXT: ptrue p0.s
406 ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h
408 %res = fptoui <vscale x 4 x half> %a to <vscale x 4 x i32>
409 ret <vscale x 4 x i32> %res
412 define <vscale x 4 x i32> @fcvtzu_s_nxv4f32(<vscale x 4 x float> %a) {
413 ; CHECK-LABEL: fcvtzu_s_nxv4f32:
415 ; CHECK-NEXT: ptrue p0.s
416 ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s
418 %res = fptoui <vscale x 4 x float> %a to <vscale x 4 x i32>
419 ret <vscale x 4 x i32> %res
422 define <vscale x 2 x i64> @fcvtzu_d_nxv2f16(<vscale x 2 x half> %a) {
423 ; CHECK-LABEL: fcvtzu_d_nxv2f16:
425 ; CHECK-NEXT: ptrue p0.d
426 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.h
428 %res = fptoui <vscale x 2 x half> %a to <vscale x 2 x i64>
429 ret <vscale x 2 x i64> %res
432 define <vscale x 2 x i64> @fcvtzu_d_nxv2f32(<vscale x 2 x float> %a) {
433 ; CHECK-LABEL: fcvtzu_d_nxv2f32:
435 ; CHECK-NEXT: ptrue p0.d
436 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.s
438 %res = fptoui <vscale x 2 x float> %a to <vscale x 2 x i64>
439 ret <vscale x 2 x i64> %res
442 define <vscale x 2 x i64> @fcvtzu_d_nxv2f64(<vscale x 2 x double> %a) {
443 ; CHECK-LABEL: fcvtzu_d_nxv2f64:
445 ; CHECK-NEXT: ptrue p0.d
446 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d
448 %res = fptoui <vscale x 2 x double> %a to <vscale x 2 x i64>
449 ret <vscale x 2 x i64> %res
454 define <vscale x 2 x half> @scvtf_h_nxv2i1(<vscale x 2 x i1> %a) {
455 ; CHECK-LABEL: scvtf_h_nxv2i1:
457 ; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff
458 ; CHECK-NEXT: ptrue p0.d
459 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.d
461 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x half>
462 ret <vscale x 2 x half> %res
465 define <vscale x 2 x half> @scvtf_h_nxv2i16(<vscale x 2 x i16> %a) {
466 ; CHECK-LABEL: scvtf_h_nxv2i16:
468 ; CHECK-NEXT: ptrue p0.d
469 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
471 %res = sitofp <vscale x 2 x i16> %a to <vscale x 2 x half>
472 ret <vscale x 2 x half> %res
475 define <vscale x 2 x half> @scvtf_h_nxv2i32(<vscale x 2 x i32> %a) {
476 ; CHECK-LABEL: scvtf_h_nxv2i32:
478 ; CHECK-NEXT: ptrue p0.d
479 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s
481 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x half>
482 ret <vscale x 2 x half> %res
485 define <vscale x 2 x half> @scvtf_h_nxv2i64(<vscale x 2 x i64> %a) {
486 ; CHECK-LABEL: scvtf_h_nxv2i64:
488 ; CHECK-NEXT: ptrue p0.d
489 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.d
491 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x half>
492 ret <vscale x 2 x half> %res
495 define <vscale x 3 x half> @scvtf_h_nxv3i1(<vscale x 3 x i1> %a) {
496 ; CHECK-LABEL: scvtf_h_nxv3i1:
498 ; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff
499 ; CHECK-NEXT: ptrue p0.s
500 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s
502 %res = sitofp <vscale x 3 x i1> %a to <vscale x 3 x half>
503 ret <vscale x 3 x half> %res
506 define <vscale x 3 x half> @scvtf_h_nxv3i16(<vscale x 3 x i16> %a) {
507 ; CHECK-LABEL: scvtf_h_nxv3i16:
509 ; CHECK-NEXT: ptrue p0.s
510 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
512 %res = sitofp <vscale x 3 x i16> %a to <vscale x 3 x half>
513 ret <vscale x 3 x half> %res
516 define <vscale x 4 x half> @scvtf_h_nxv4i1(<vscale x 4 x i1> %a) {
517 ; CHECK-LABEL: scvtf_h_nxv4i1:
519 ; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff
520 ; CHECK-NEXT: ptrue p0.s
521 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s
523 %res = sitofp <vscale x 4 x i1> %a to <vscale x 4 x half>
524 ret <vscale x 4 x half> %res
527 define <vscale x 4 x half> @scvtf_h_nxv4i16(<vscale x 4 x i16> %a) {
528 ; CHECK-LABEL: scvtf_h_nxv4i16:
530 ; CHECK-NEXT: ptrue p0.s
531 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
533 %res = sitofp <vscale x 4 x i16> %a to <vscale x 4 x half>
534 ret <vscale x 4 x half> %res
537 define <vscale x 4 x half> @scvtf_h_nxv4i32(<vscale x 4 x i32> %a) {
538 ; CHECK-LABEL: scvtf_h_nxv4i32:
540 ; CHECK-NEXT: ptrue p0.s
541 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s
543 %res = sitofp <vscale x 4 x i32> %a to <vscale x 4 x half>
544 ret <vscale x 4 x half> %res
547 define <vscale x 7 x half> @scvtf_h_nxv7i1(<vscale x 7 x i1> %a) {
548 ; CHECK-LABEL: scvtf_h_nxv7i1:
550 ; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff
551 ; CHECK-NEXT: ptrue p0.h
552 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
554 %res = sitofp <vscale x 7 x i1> %a to <vscale x 7 x half>
555 ret <vscale x 7 x half> %res
558 define <vscale x 7 x half> @scvtf_h_nxv7i16(<vscale x 7 x i16> %a) {
559 ; CHECK-LABEL: scvtf_h_nxv7i16:
561 ; CHECK-NEXT: ptrue p0.h
562 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
564 %res = sitofp <vscale x 7 x i16> %a to <vscale x 7 x half>
565 ret <vscale x 7 x half> %res
568 define <vscale x 8 x half> @scvtf_h_nxv8i1(<vscale x 8 x i1> %a) {
569 ; CHECK-LABEL: scvtf_h_nxv8i1:
571 ; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff
572 ; CHECK-NEXT: ptrue p0.h
573 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
575 %res = sitofp <vscale x 8 x i1> %a to <vscale x 8 x half>
576 ret <vscale x 8 x half> %res
579 define <vscale x 8 x half> @scvtf_h_nxv8i16(<vscale x 8 x i16> %a) {
580 ; CHECK-LABEL: scvtf_h_nxv8i16:
582 ; CHECK-NEXT: ptrue p0.h
583 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
585 %res = sitofp <vscale x 8 x i16> %a to <vscale x 8 x half>
586 ret <vscale x 8 x half> %res
589 define <vscale x 2 x float> @scvtf_s_nxv2i1(<vscale x 2 x i1> %a) {
590 ; CHECK-LABEL: scvtf_s_nxv2i1:
592 ; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff
593 ; CHECK-NEXT: ptrue p0.d
594 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.d
596 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x float>
597 ret <vscale x 2 x float> %res
600 define <vscale x 2 x float> @scvtf_s_nxv2i32(<vscale x 2 x i32> %a) {
601 ; CHECK-LABEL: scvtf_s_nxv2i32:
603 ; CHECK-NEXT: ptrue p0.d
604 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
606 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x float>
607 ret <vscale x 2 x float> %res
610 define <vscale x 2 x float> @scvtf_s_nxv2i64(<vscale x 2 x i64> %a) {
611 ; CHECK-LABEL: scvtf_s_nxv2i64:
613 ; CHECK-NEXT: ptrue p0.d
614 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.d
616 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x float>
617 ret <vscale x 2 x float> %res
620 define <vscale x 3 x float> @scvtf_s_nxv3i1(<vscale x 3 x i1> %a) {
621 ; CHECK-LABEL: scvtf_s_nxv3i1:
623 ; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff
624 ; CHECK-NEXT: ptrue p0.s
625 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
627 %res = sitofp <vscale x 3 x i1> %a to <vscale x 3 x float>
628 ret <vscale x 3 x float> %res
631 define <vscale x 3 x float> @scvtf_s_nxv3i32(<vscale x 3 x i32> %a) {
632 ; CHECK-LABEL: scvtf_s_nxv3i32:
634 ; CHECK-NEXT: ptrue p0.s
635 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
637 %res = sitofp <vscale x 3 x i32> %a to <vscale x 3 x float>
638 ret <vscale x 3 x float> %res
641 define <vscale x 4 x float> @scvtf_s_nxv4i1(<vscale x 4 x i1> %a) {
642 ; CHECK-LABEL: scvtf_s_nxv4i1:
644 ; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff
645 ; CHECK-NEXT: ptrue p0.s
646 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
648 %res = sitofp <vscale x 4 x i1> %a to <vscale x 4 x float>
649 ret <vscale x 4 x float> %res
652 define <vscale x 4 x float> @scvtf_s_nxv4i32(<vscale x 4 x i32> %a) {
653 ; CHECK-LABEL: scvtf_s_nxv4i32:
655 ; CHECK-NEXT: ptrue p0.s
656 ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
658 %res = sitofp <vscale x 4 x i32> %a to <vscale x 4 x float>
659 ret <vscale x 4 x float> %res
662 define <vscale x 2 x double> @scvtf_d_nxv2i1(<vscale x 2 x i1> %a) {
663 ; CHECK-LABEL: scvtf_d_nxv2i1:
665 ; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff
666 ; CHECK-NEXT: ptrue p0.d
667 ; CHECK-NEXT: scvtf z0.d, p0/m, z0.d
669 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x double>
670 ret <vscale x 2 x double> %res
673 define <vscale x 2 x double> @scvtf_d_nxv2i32(<vscale x 2 x i32> %a) {
674 ; CHECK-LABEL: scvtf_d_nxv2i32:
676 ; CHECK-NEXT: ptrue p0.d
677 ; CHECK-NEXT: scvtf z0.d, p0/m, z0.s
679 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x double>
680 ret <vscale x 2 x double> %res
683 define <vscale x 2 x double> @scvtf_d_nxv2i64(<vscale x 2 x i64> %a) {
684 ; CHECK-LABEL: scvtf_d_nxv2i64:
686 ; CHECK-NEXT: ptrue p0.d
687 ; CHECK-NEXT: scvtf z0.d, p0/m, z0.d
689 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x double>
690 ret <vscale x 2 x double> %res
695 define <vscale x 2 x half> @ucvtf_h_nxv2i1(<vscale x 2 x i1> %a) {
696 ; CHECK-LABEL: ucvtf_h_nxv2i1:
698 ; CHECK-NEXT: mov z0.d, p0/z, #1 // =0x1
699 ; CHECK-NEXT: ptrue p0.d
700 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d
702 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x half>
703 ret <vscale x 2 x half> %res
706 define <vscale x 2 x half> @ucvtf_h_nxv2i16(<vscale x 2 x i16> %a) {
707 ; CHECK-LABEL: ucvtf_h_nxv2i16:
709 ; CHECK-NEXT: ptrue p0.d
710 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h
712 %res = uitofp <vscale x 2 x i16> %a to <vscale x 2 x half>
713 ret <vscale x 2 x half> %res
716 define <vscale x 2 x half> @ucvtf_h_nxv2i32(<vscale x 2 x i32> %a) {
717 ; CHECK-LABEL: ucvtf_h_nxv2i32:
719 ; CHECK-NEXT: ptrue p0.d
720 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s
722 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x half>
723 ret <vscale x 2 x half> %res
726 define <vscale x 2 x half> @ucvtf_h_nxv2i64(<vscale x 2 x i64> %a) {
727 ; CHECK-LABEL: ucvtf_h_nxv2i64:
729 ; CHECK-NEXT: ptrue p0.d
730 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d
732 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x half>
733 ret <vscale x 2 x half> %res
736 define <vscale x 3 x half> @ucvtf_h_nxv3i1(<vscale x 3 x i1> %a) {
737 ; CHECK-LABEL: ucvtf_h_nxv3i1:
739 ; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1
740 ; CHECK-NEXT: ptrue p0.s
741 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s
743 %res = uitofp <vscale x 3 x i1> %a to <vscale x 3 x half>
744 ret <vscale x 3 x half> %res
747 define <vscale x 3 x half> @ucvtf_h_nxv3i16(<vscale x 3 x i16> %a) {
748 ; CHECK-LABEL: ucvtf_h_nxv3i16:
750 ; CHECK-NEXT: ptrue p0.s
751 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h
753 %res = uitofp <vscale x 3 x i16> %a to <vscale x 3 x half>
754 ret <vscale x 3 x half> %res
757 define <vscale x 3 x half> @ucvtf_h_nxv3i32(<vscale x 3 x i32> %a) {
758 ; CHECK-LABEL: ucvtf_h_nxv3i32:
760 ; CHECK-NEXT: ptrue p0.s
761 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s
763 %res = uitofp <vscale x 3 x i32> %a to <vscale x 3 x half>
764 ret <vscale x 3 x half> %res
767 define <vscale x 4 x half> @ucvtf_h_nxv4i1(<vscale x 4 x i1> %a) {
768 ; CHECK-LABEL: ucvtf_h_nxv4i1:
770 ; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1
771 ; CHECK-NEXT: ptrue p0.s
772 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s
774 %res = uitofp <vscale x 4 x i1> %a to <vscale x 4 x half>
775 ret <vscale x 4 x half> %res
778 define <vscale x 4 x half> @ucvtf_h_nxv4i16(<vscale x 4 x i16> %a) {
779 ; CHECK-LABEL: ucvtf_h_nxv4i16:
781 ; CHECK-NEXT: ptrue p0.s
782 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h
784 %res = uitofp <vscale x 4 x i16> %a to <vscale x 4 x half>
785 ret <vscale x 4 x half> %res
788 define <vscale x 4 x half> @ucvtf_h_nxv4i32(<vscale x 4 x i32> %a) {
789 ; CHECK-LABEL: ucvtf_h_nxv4i32:
791 ; CHECK-NEXT: ptrue p0.s
792 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s
794 %res = uitofp <vscale x 4 x i32> %a to <vscale x 4 x half>
795 ret <vscale x 4 x half> %res
798 define <vscale x 8 x half> @ucvtf_h_nxv8i1(<vscale x 8 x i1> %a) {
799 ; CHECK-LABEL: ucvtf_h_nxv8i1:
801 ; CHECK-NEXT: mov z0.h, p0/z, #1 // =0x1
802 ; CHECK-NEXT: ptrue p0.h
803 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h
805 %res = uitofp <vscale x 8 x i1> %a to <vscale x 8 x half>
806 ret <vscale x 8 x half> %res
809 define <vscale x 8 x half> @ucvtf_h_nxv8i16(<vscale x 8 x i16> %a) {
810 ; CHECK-LABEL: ucvtf_h_nxv8i16:
812 ; CHECK-NEXT: ptrue p0.h
813 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h
815 %res = uitofp <vscale x 8 x i16> %a to <vscale x 8 x half>
816 ret <vscale x 8 x half> %res
819 define <vscale x 2 x float> @ucvtf_s_nxv2i1(<vscale x 2 x i1> %a) {
820 ; CHECK-LABEL: ucvtf_s_nxv2i1:
822 ; CHECK-NEXT: mov z0.d, p0/z, #1 // =0x1
823 ; CHECK-NEXT: ptrue p0.d
824 ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d
826 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x float>
827 ret <vscale x 2 x float> %res
830 define <vscale x 2 x float> @ucvtf_s_nxv2i32(<vscale x 2 x i32> %a) {
831 ; CHECK-LABEL: ucvtf_s_nxv2i32:
833 ; CHECK-NEXT: ptrue p0.d
834 ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s
836 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x float>
837 ret <vscale x 2 x float> %res
840 define <vscale x 2 x float> @ucvtf_s_nxv2i64(<vscale x 2 x i64> %a) {
841 ; CHECK-LABEL: ucvtf_s_nxv2i64:
843 ; CHECK-NEXT: ptrue p0.d
844 ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d
846 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x float>
847 ret <vscale x 2 x float> %res
850 define <vscale x 4 x float> @ucvtf_s_nxv4i1(<vscale x 4 x i1> %a) {
851 ; CHECK-LABEL: ucvtf_s_nxv4i1:
853 ; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1
854 ; CHECK-NEXT: ptrue p0.s
855 ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s
857 %res = uitofp <vscale x 4 x i1> %a to <vscale x 4 x float>
858 ret <vscale x 4 x float> %res
861 define <vscale x 4 x float> @ucvtf_s_nxv4i32(<vscale x 4 x i32> %a) {
862 ; CHECK-LABEL: ucvtf_s_nxv4i32:
864 ; CHECK-NEXT: ptrue p0.s
865 ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s
867 %res = uitofp <vscale x 4 x i32> %a to <vscale x 4 x float>
868 ret <vscale x 4 x float> %res
871 define <vscale x 2 x double> @ucvtf_d_nxv2i1(<vscale x 2 x i1> %a) {
872 ; CHECK-LABEL: ucvtf_d_nxv2i1:
874 ; CHECK-NEXT: mov z0.d, p0/z, #1 // =0x1
875 ; CHECK-NEXT: ptrue p0.d
876 ; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d
878 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x double>
879 ret <vscale x 2 x double> %res
882 define <vscale x 2 x double> @ucvtf_d_nxv2i32(<vscale x 2 x i32> %a) {
883 ; CHECK-LABEL: ucvtf_d_nxv2i32:
885 ; CHECK-NEXT: ptrue p0.d
886 ; CHECK-NEXT: ucvtf z0.d, p0/m, z0.s
888 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x double>
889 ret <vscale x 2 x double> %res
892 define <vscale x 2 x double> @ucvtf_d_nxv2i64(<vscale x 2 x i64> %a) {
893 ; CHECK-LABEL: ucvtf_d_nxv2i64:
895 ; CHECK-NEXT: ptrue p0.d
896 ; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d
898 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x double>
899 ret <vscale x 2 x double> %res
902 define <vscale x 4 x float> @fcvt_htos_movprfx(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {
903 ; CHECK-LABEL: fcvt_htos_movprfx:
905 ; CHECK-NEXT: ptrue p0.s
906 ; CHECK-NEXT: movprfx z0, z1
907 ; CHECK-NEXT: fcvt z0.s, p0/m, z1.h
909 %res = fpext <vscale x 4 x half> %b to <vscale x 4 x float>
910 ret <vscale x 4 x float> %res
913 define <vscale x 2 x double> @fcvt_htod_movprfx(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {
914 ; CHECK-LABEL: fcvt_htod_movprfx:
916 ; CHECK-NEXT: ptrue p0.d
917 ; CHECK-NEXT: movprfx z0, z1
918 ; CHECK-NEXT: fcvt z0.d, p0/m, z1.h
920 %res = fpext <vscale x 2 x half> %b to <vscale x 2 x double>
921 ret <vscale x 2 x double> %res
924 define <vscale x 2 x double> @fcvt_stod_movprfx(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {
925 ; CHECK-LABEL: fcvt_stod_movprfx:
927 ; CHECK-NEXT: ptrue p0.d
928 ; CHECK-NEXT: movprfx z0, z1
929 ; CHECK-NEXT: fcvt z0.d, p0/m, z1.s
931 %res = fpext <vscale x 2 x float> %b to <vscale x 2 x double>
932 ret <vscale x 2 x double> %res
935 define <vscale x 4 x half> @fcvt_stoh_movprfx(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {
936 ; CHECK-LABEL: fcvt_stoh_movprfx:
938 ; CHECK-NEXT: ptrue p0.s
939 ; CHECK-NEXT: movprfx z0, z1
940 ; CHECK-NEXT: fcvt z0.h, p0/m, z1.s
942 %res = fptrunc <vscale x 4 x float> %b to <vscale x 4 x half>
943 ret <vscale x 4 x half> %res
946 define <vscale x 2 x half> @fcvt_dtoh_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
947 ; CHECK-LABEL: fcvt_dtoh_movprfx:
949 ; CHECK-NEXT: ptrue p0.d
950 ; CHECK-NEXT: movprfx z0, z1
951 ; CHECK-NEXT: fcvt z0.h, p0/m, z1.d
953 %res = fptrunc <vscale x 2 x double> %b to <vscale x 2 x half>
954 ret <vscale x 2 x half> %res
957 define <vscale x 2 x float> @fcvt_dtos_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
958 ; CHECK-LABEL: fcvt_dtos_movprfx:
960 ; CHECK-NEXT: ptrue p0.d
961 ; CHECK-NEXT: movprfx z0, z1
962 ; CHECK-NEXT: fcvt z0.s, p0/m, z1.d
964 %res = fptrunc <vscale x 2 x double> %b to <vscale x 2 x float>
965 ret <vscale x 2 x float> %res
968 define <vscale x 8 x half> @scvtf_htoh_movprfx(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
969 ; CHECK-LABEL: scvtf_htoh_movprfx:
971 ; CHECK-NEXT: ptrue p0.h
972 ; CHECK-NEXT: movprfx z0, z1
973 ; CHECK-NEXT: scvtf z0.h, p0/m, z1.h
975 %res = sitofp <vscale x 8 x i16> %b to <vscale x 8 x half>
976 ret <vscale x 8 x half> %res
979 define <vscale x 4 x float> @scvtf_stos_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
980 ; CHECK-LABEL: scvtf_stos_movprfx:
982 ; CHECK-NEXT: ptrue p0.s
983 ; CHECK-NEXT: movprfx z0, z1
984 ; CHECK-NEXT: scvtf z0.s, p0/m, z1.s
986 %res = sitofp <vscale x 4 x i32> %b to <vscale x 4 x float>
987 ret <vscale x 4 x float> %res
990 define <vscale x 2 x double> @scvtf_stod_movprfx(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) {
991 ; CHECK-LABEL: scvtf_stod_movprfx:
993 ; CHECK-NEXT: ptrue p0.d
994 ; CHECK-NEXT: movprfx z0, z1
995 ; CHECK-NEXT: scvtf z0.d, p0/m, z1.s
997 %res = sitofp <vscale x 2 x i32> %b to <vscale x 2 x double>
998 ret <vscale x 2 x double> %res
1001 define <vscale x 2 x float> @scvtf_dtos_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1002 ; CHECK-LABEL: scvtf_dtos_movprfx:
1004 ; CHECK-NEXT: ptrue p0.d
1005 ; CHECK-NEXT: movprfx z0, z1
1006 ; CHECK-NEXT: scvtf z0.s, p0/m, z1.d
1008 %res = sitofp <vscale x 2 x i64> %b to <vscale x 2 x float>
1009 ret <vscale x 2 x float> %res
1012 define <vscale x 4 x half> @scvtf_stoh_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1013 ; CHECK-LABEL: scvtf_stoh_movprfx:
1015 ; CHECK-NEXT: ptrue p0.s
1016 ; CHECK-NEXT: movprfx z0, z1
1017 ; CHECK-NEXT: scvtf z0.h, p0/m, z1.s
1019 %res = sitofp <vscale x 4 x i32> %b to <vscale x 4 x half>
1020 ret <vscale x 4 x half> %res
1023 define <vscale x 2 x half> @scvtf_dtoh_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1024 ; CHECK-LABEL: scvtf_dtoh_movprfx:
1026 ; CHECK-NEXT: ptrue p0.d
1027 ; CHECK-NEXT: movprfx z0, z1
1028 ; CHECK-NEXT: scvtf z0.h, p0/m, z1.d
1030 %res = sitofp <vscale x 2 x i64> %b to <vscale x 2 x half>
1031 ret <vscale x 2 x half> %res
1034 define <vscale x 2 x double> @scvtf_dtod_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1035 ; CHECK-LABEL: scvtf_dtod_movprfx:
1037 ; CHECK-NEXT: ptrue p0.d
1038 ; CHECK-NEXT: movprfx z0, z1
1039 ; CHECK-NEXT: scvtf z0.d, p0/m, z1.d
1041 %res = sitofp <vscale x 2 x i64> %b to <vscale x 2 x double>
1042 ret <vscale x 2 x double> %res
1045 define <vscale x 4 x float> @ucvtf_stos_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1046 ; CHECK-LABEL: ucvtf_stos_movprfx:
1048 ; CHECK-NEXT: ptrue p0.s
1049 ; CHECK-NEXT: movprfx z0, z1
1050 ; CHECK-NEXT: ucvtf z0.s, p0/m, z1.s
1052 %res = uitofp <vscale x 4 x i32> %b to <vscale x 4 x float>
1053 ret <vscale x 4 x float> %res
1056 define <vscale x 8 x half> @ucvtf_htoh_movprfx(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
1057 ; CHECK-LABEL: ucvtf_htoh_movprfx:
1059 ; CHECK-NEXT: ptrue p0.h
1060 ; CHECK-NEXT: movprfx z0, z1
1061 ; CHECK-NEXT: ucvtf z0.h, p0/m, z1.h
1063 %res = uitofp <vscale x 8 x i16> %b to <vscale x 8 x half>
1064 ret <vscale x 8 x half> %res
1067 define <vscale x 2 x double> @ucvtf_stod_movprfx(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) {
1068 ; CHECK-LABEL: ucvtf_stod_movprfx:
1070 ; CHECK-NEXT: ptrue p0.d
1071 ; CHECK-NEXT: movprfx z0, z1
1072 ; CHECK-NEXT: ucvtf z0.d, p0/m, z1.s
1074 %res = uitofp <vscale x 2 x i32> %b to <vscale x 2 x double>
1075 ret <vscale x 2 x double> %res
1078 define <vscale x 4 x half> @ucvtf_stoh_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
1079 ; CHECK-LABEL: ucvtf_stoh_movprfx:
1081 ; CHECK-NEXT: ptrue p0.s
1082 ; CHECK-NEXT: movprfx z0, z1
1083 ; CHECK-NEXT: ucvtf z0.h, p0/m, z1.s
1085 %res = uitofp <vscale x 4 x i32> %b to <vscale x 4 x half>
1086 ret <vscale x 4 x half> %res
1089 define <vscale x 2 x float> @ucvtf_dtos_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1090 ; CHECK-LABEL: ucvtf_dtos_movprfx:
1092 ; CHECK-NEXT: ptrue p0.d
1093 ; CHECK-NEXT: movprfx z0, z1
1094 ; CHECK-NEXT: ucvtf z0.s, p0/m, z1.d
1096 %res = uitofp <vscale x 2 x i64> %b to <vscale x 2 x float>
1097 ret <vscale x 2 x float> %res
1100 define <vscale x 2 x half> @ucvtf_dtoh_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1101 ; CHECK-LABEL: ucvtf_dtoh_movprfx:
1103 ; CHECK-NEXT: ptrue p0.d
1104 ; CHECK-NEXT: movprfx z0, z1
1105 ; CHECK-NEXT: ucvtf z0.h, p0/m, z1.d
1107 %res = uitofp <vscale x 2 x i64> %b to <vscale x 2 x half>
1108 ret <vscale x 2 x half> %res
1111 define <vscale x 2 x double> @ucvtf_dtod_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
1112 ; CHECK-LABEL: ucvtf_dtod_movprfx:
1114 ; CHECK-NEXT: ptrue p0.d
1115 ; CHECK-NEXT: movprfx z0, z1
1116 ; CHECK-NEXT: ucvtf z0.d, p0/m, z1.d
1118 %res = uitofp <vscale x 2 x i64> %b to <vscale x 2 x double>
1119 ret <vscale x 2 x double> %res
1122 define <vscale x 8 x i16> @fcvtzs_htoh_movprfx(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {
1123 ; CHECK-LABEL: fcvtzs_htoh_movprfx:
1125 ; CHECK-NEXT: ptrue p0.h
1126 ; CHECK-NEXT: movprfx z0, z1
1127 ; CHECK-NEXT: fcvtzs z0.h, p0/m, z1.h
1129 %res = fptosi <vscale x 8 x half> %b to <vscale x 8 x i16>
1130 ret <vscale x 8 x i16> %res
1133 define <vscale x 4 x i32> @fcvtzs_stos_movprfx(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {
1134 ; CHECK-LABEL: fcvtzs_stos_movprfx:
1136 ; CHECK-NEXT: ptrue p0.s
1137 ; CHECK-NEXT: movprfx z0, z1
1138 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.s
1140 %res = fptosi <vscale x 4 x float> %b to <vscale x 4 x i32>
1141 ret <vscale x 4 x i32> %res
1144 define <vscale x 2 x i32> @fcvtzs_dtos_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
1145 ; CHECK-LABEL: fcvtzs_dtos_movprfx:
1147 ; CHECK-NEXT: ptrue p0.d
1148 ; CHECK-NEXT: movprfx z0, z1
1149 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d
1151 %res = fptosi <vscale x 2 x double> %b to <vscale x 2 x i32>
1152 ret <vscale x 2 x i32> %res
1155 define <vscale x 2 x i64> @fcvtzs_stod_movprfx(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {
1156 ; CHECK-LABEL: fcvtzs_stod_movprfx:
1158 ; CHECK-NEXT: ptrue p0.d
1159 ; CHECK-NEXT: movprfx z0, z1
1160 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.s
1162 %res = fptosi <vscale x 2 x float> %b to <vscale x 2 x i64>
1163 ret <vscale x 2 x i64> %res
1166 define <vscale x 4 x i32> @fcvtzs_htos_movprfx(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {
1167 ; CHECK-LABEL: fcvtzs_htos_movprfx:
1169 ; CHECK-NEXT: ptrue p0.s
1170 ; CHECK-NEXT: movprfx z0, z1
1171 ; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.h
1173 %res = fptosi <vscale x 4 x half> %b to <vscale x 4 x i32>
1174 ret <vscale x 4 x i32> %res
1177 define <vscale x 2 x i64> @fcvtzs_htod_movprfx(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {
1178 ; CHECK-LABEL: fcvtzs_htod_movprfx:
1180 ; CHECK-NEXT: ptrue p0.d
1181 ; CHECK-NEXT: movprfx z0, z1
1182 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.h
1184 %res = fptosi <vscale x 2 x half> %b to <vscale x 2 x i64>
1185 ret <vscale x 2 x i64> %res
1188 define <vscale x 2 x i64> @fcvtzs_dtod_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
1189 ; CHECK-LABEL: fcvtzs_dtod_movprfx:
1191 ; CHECK-NEXT: ptrue p0.d
1192 ; CHECK-NEXT: movprfx z0, z1
1193 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d
1195 %res = fptosi <vscale x 2 x double> %b to <vscale x 2 x i64>
1196 ret <vscale x 2 x i64> %res
1199 define <vscale x 8 x i16> @fcvtzu_htoh_movprfx(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {
1200 ; CHECK-LABEL: fcvtzu_htoh_movprfx:
1202 ; CHECK-NEXT: ptrue p0.h
1203 ; CHECK-NEXT: movprfx z0, z1
1204 ; CHECK-NEXT: fcvtzu z0.h, p0/m, z1.h
1206 %res = fptoui <vscale x 8 x half> %b to <vscale x 8 x i16>
1207 ret <vscale x 8 x i16> %res
1210 define <vscale x 4 x i32> @fcvtzu_stos_movprfx(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {
1211 ; CHECK-LABEL: fcvtzu_stos_movprfx:
1213 ; CHECK-NEXT: ptrue p0.s
1214 ; CHECK-NEXT: movprfx z0, z1
1215 ; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.s
1217 %res = fptoui <vscale x 4 x float> %b to <vscale x 4 x i32>
1218 ret <vscale x 4 x i32> %res
1221 define <vscale x 2 x i32> @fcvtzu_dtos_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
1222 ; CHECK-LABEL: fcvtzu_dtos_movprfx:
1224 ; CHECK-NEXT: ptrue p0.d
1225 ; CHECK-NEXT: movprfx z0, z1
1226 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d
1228 %res = fptoui <vscale x 2 x double> %b to <vscale x 2 x i32>
1229 ret <vscale x 2 x i32> %res
1232 define <vscale x 2 x i64> @fcvtzu_stod_movprfx(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {
1233 ; CHECK-LABEL: fcvtzu_stod_movprfx:
1235 ; CHECK-NEXT: ptrue p0.d
1236 ; CHECK-NEXT: movprfx z0, z1
1237 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.s
1239 %res = fptoui <vscale x 2 x float> %b to <vscale x 2 x i64>
1240 ret <vscale x 2 x i64> %res
1243 define <vscale x 4 x i32> @fcvtzu_htos_movprfx(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {
1244 ; CHECK-LABEL: fcvtzu_htos_movprfx:
1246 ; CHECK-NEXT: ptrue p0.s
1247 ; CHECK-NEXT: movprfx z0, z1
1248 ; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.h
1250 %res = fptoui <vscale x 4 x half> %b to <vscale x 4 x i32>
1251 ret <vscale x 4 x i32> %res
1254 define <vscale x 2 x i64> @fcvtzu_htod_movprfx(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {
1255 ; CHECK-LABEL: fcvtzu_htod_movprfx:
1257 ; CHECK-NEXT: ptrue p0.d
1258 ; CHECK-NEXT: movprfx z0, z1
1259 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.h
1261 %res = fptoui <vscale x 2 x half> %b to <vscale x 2 x i64>
1262 ret <vscale x 2 x i64> %res
1265 define <vscale x 2 x i64> @fcvtzu_dtod_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
1266 ; CHECK-LABEL: fcvtzu_dtod_movprfx:
1268 ; CHECK-NEXT: ptrue p0.d
1269 ; CHECK-NEXT: movprfx z0, z1
1270 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.d
1272 %res = fptoui <vscale x 2 x double> %b to <vscale x 2 x i64>
1273 ret <vscale x 2 x i64> %res