1 ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+experimental-zvfbfmin,+zvfh -global-isel -stop-after=irtranslator \
3 ; RUN: -verify-machineinstrs < %s | FileCheck -check-prefixes=RV32 %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+v,+experimental-zvfbfmin,+zvfh -global-isel -stop-after=irtranslator \
5 ; RUN: -verify-machineinstrs < %s | FileCheck -check-prefixes=RV64 %s
7 ; ==========================================================================
8 ; ============================= Scalable Types =============================
9 ; ==========================================================================
11 define void @test_args_nxv1i8(<vscale x 1 x i8> %a) {
12 ; RV32-LABEL: name: test_args_nxv1i8
14 ; RV32-NEXT: liveins: $v8
16 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
17 ; RV32-NEXT: PseudoRET
19 ; RV64-LABEL: name: test_args_nxv1i8
21 ; RV64-NEXT: liveins: $v8
23 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
24 ; RV64-NEXT: PseudoRET
29 define void @test_args_nxv2i8(<vscale x 2 x i8> %a) {
30 ; RV32-LABEL: name: test_args_nxv2i8
32 ; RV32-NEXT: liveins: $v8
34 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
35 ; RV32-NEXT: PseudoRET
37 ; RV64-LABEL: name: test_args_nxv2i8
39 ; RV64-NEXT: liveins: $v8
41 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s8>) = COPY $v8
42 ; RV64-NEXT: PseudoRET
47 define void @test_args_nxv4i8(<vscale x 4 x i8> %a) {
48 ; RV32-LABEL: name: test_args_nxv4i8
50 ; RV32-NEXT: liveins: $v8
52 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
53 ; RV32-NEXT: PseudoRET
55 ; RV64-LABEL: name: test_args_nxv4i8
57 ; RV64-NEXT: liveins: $v8
59 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s8>) = COPY $v8
60 ; RV64-NEXT: PseudoRET
65 define void @test_args_nxv8i8(<vscale x 8 x i8> %a) {
66 ; RV32-LABEL: name: test_args_nxv8i8
68 ; RV32-NEXT: liveins: $v8
70 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
71 ; RV32-NEXT: PseudoRET
73 ; RV64-LABEL: name: test_args_nxv8i8
75 ; RV64-NEXT: liveins: $v8
77 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s8>) = COPY $v8
78 ; RV64-NEXT: PseudoRET
83 define void @test_args_nxv16i8(<vscale x 16 x i8> %a) {
84 ; RV32-LABEL: name: test_args_nxv16i8
86 ; RV32-NEXT: liveins: $v8m2
88 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s8>) = COPY $v8m2
89 ; RV32-NEXT: PseudoRET
91 ; RV64-LABEL: name: test_args_nxv16i8
93 ; RV64-NEXT: liveins: $v8m2
95 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s8>) = COPY $v8m2
96 ; RV64-NEXT: PseudoRET
101 define void @test_args_nxv32i8(<vscale x 32 x i8> %a) {
102 ; RV32-LABEL: name: test_args_nxv32i8
104 ; RV32-NEXT: liveins: $v8m4
106 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s8>) = COPY $v8m4
107 ; RV32-NEXT: PseudoRET
109 ; RV64-LABEL: name: test_args_nxv32i8
111 ; RV64-NEXT: liveins: $v8m4
113 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s8>) = COPY $v8m4
114 ; RV64-NEXT: PseudoRET
119 define void @test_args_nxv64i8(<vscale x 64 x i8> %a) {
120 ; RV32-LABEL: name: test_args_nxv64i8
122 ; RV32-NEXT: liveins: $v8m8
124 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 64 x s8>) = COPY $v8m8
125 ; RV32-NEXT: PseudoRET
127 ; RV64-LABEL: name: test_args_nxv64i8
129 ; RV64-NEXT: liveins: $v8m8
131 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 64 x s8>) = COPY $v8m8
132 ; RV64-NEXT: PseudoRET
137 define void @test_args_nxv1i16(<vscale x 1 x i16> %a) {
138 ; RV32-LABEL: name: test_args_nxv1i16
140 ; RV32-NEXT: liveins: $v8
142 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
143 ; RV32-NEXT: PseudoRET
145 ; RV64-LABEL: name: test_args_nxv1i16
147 ; RV64-NEXT: liveins: $v8
149 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
150 ; RV64-NEXT: PseudoRET
155 define void @test_args_nxv2i16(<vscale x 2 x i16> %a) {
156 ; RV32-LABEL: name: test_args_nxv2i16
158 ; RV32-NEXT: liveins: $v8
160 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
161 ; RV32-NEXT: PseudoRET
163 ; RV64-LABEL: name: test_args_nxv2i16
165 ; RV64-NEXT: liveins: $v8
167 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
168 ; RV64-NEXT: PseudoRET
173 define void @test_args_nxv4i16(<vscale x 4 x i16> %a) {
174 ; RV32-LABEL: name: test_args_nxv4i16
176 ; RV32-NEXT: liveins: $v8
178 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
179 ; RV32-NEXT: PseudoRET
181 ; RV64-LABEL: name: test_args_nxv4i16
183 ; RV64-NEXT: liveins: $v8
185 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
186 ; RV64-NEXT: PseudoRET
191 define void @test_args_nxv8i16(<vscale x 8 x i16> %a) {
192 ; RV32-LABEL: name: test_args_nxv8i16
194 ; RV32-NEXT: liveins: $v8m2
196 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
197 ; RV32-NEXT: PseudoRET
199 ; RV64-LABEL: name: test_args_nxv8i16
201 ; RV64-NEXT: liveins: $v8m2
203 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
204 ; RV64-NEXT: PseudoRET
209 define void @test_args_nxv16i16(<vscale x 16 x i16> %a) {
210 ; RV32-LABEL: name: test_args_nxv16i16
212 ; RV32-NEXT: liveins: $v8m4
214 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
215 ; RV32-NEXT: PseudoRET
217 ; RV64-LABEL: name: test_args_nxv16i16
219 ; RV64-NEXT: liveins: $v8m4
221 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
222 ; RV64-NEXT: PseudoRET
227 define void @test_args_nxv32i16(<vscale x 32 x i16> %a) {
228 ; RV32-LABEL: name: test_args_nxv32i16
230 ; RV32-NEXT: liveins: $v8m8
232 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s16>) = COPY $v8m8
233 ; RV32-NEXT: PseudoRET
235 ; RV64-LABEL: name: test_args_nxv32i16
237 ; RV64-NEXT: liveins: $v8m8
239 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s16>) = COPY $v8m8
240 ; RV64-NEXT: PseudoRET
245 define void @test_args_nxv1i32(<vscale x 1 x i32> %a) {
246 ; RV32-LABEL: name: test_args_nxv1i32
248 ; RV32-NEXT: liveins: $v8
250 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY $v8
251 ; RV32-NEXT: PseudoRET
253 ; RV64-LABEL: name: test_args_nxv1i32
255 ; RV64-NEXT: liveins: $v8
257 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY $v8
258 ; RV64-NEXT: PseudoRET
263 define void @test_args_nxv2i32(<vscale x 2 x i32> %a) {
264 ; RV32-LABEL: name: test_args_nxv2i32
266 ; RV32-NEXT: liveins: $v8
268 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s32>) = COPY $v8
269 ; RV32-NEXT: PseudoRET
271 ; RV64-LABEL: name: test_args_nxv2i32
273 ; RV64-NEXT: liveins: $v8
275 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s32>) = COPY $v8
276 ; RV64-NEXT: PseudoRET
281 define void @test_args_nxv4i32(<vscale x 4 x i32> %a) {
282 ; RV32-LABEL: name: test_args_nxv4i32
284 ; RV32-NEXT: liveins: $v8m2
286 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m2
287 ; RV32-NEXT: PseudoRET
289 ; RV64-LABEL: name: test_args_nxv4i32
291 ; RV64-NEXT: liveins: $v8m2
293 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m2
294 ; RV64-NEXT: PseudoRET
299 define void @test_args_nxv8i32(<vscale x 8 x i32> %a) {
300 ; RV32-LABEL: name: test_args_nxv8i32
302 ; RV32-NEXT: liveins: $v8m4
304 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s32>) = COPY $v8m4
305 ; RV32-NEXT: PseudoRET
307 ; RV64-LABEL: name: test_args_nxv8i32
309 ; RV64-NEXT: liveins: $v8m4
311 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s32>) = COPY $v8m4
312 ; RV64-NEXT: PseudoRET
317 define void @test_args_nxv16i32(<vscale x 16 x i32> %a) {
318 ; RV32-LABEL: name: test_args_nxv16i32
320 ; RV32-NEXT: liveins: $v8m8
322 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s32>) = COPY $v8m8
323 ; RV32-NEXT: PseudoRET
325 ; RV64-LABEL: name: test_args_nxv16i32
327 ; RV64-NEXT: liveins: $v8m8
329 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s32>) = COPY $v8m8
330 ; RV64-NEXT: PseudoRET
335 define void @test_args_nxv1i64(<vscale x 1 x i64> %a) {
336 ; RV32-LABEL: name: test_args_nxv1i64
338 ; RV32-NEXT: liveins: $v8
340 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s64>) = COPY $v8
341 ; RV32-NEXT: PseudoRET
343 ; RV64-LABEL: name: test_args_nxv1i64
345 ; RV64-NEXT: liveins: $v8
347 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s64>) = COPY $v8
348 ; RV64-NEXT: PseudoRET
353 define void @test_args_nxv2i64(<vscale x 2 x i64> %a) {
354 ; RV32-LABEL: name: test_args_nxv2i64
356 ; RV32-NEXT: liveins: $v8m2
358 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s64>) = COPY $v8m2
359 ; RV32-NEXT: PseudoRET
361 ; RV64-LABEL: name: test_args_nxv2i64
363 ; RV64-NEXT: liveins: $v8m2
365 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s64>) = COPY $v8m2
366 ; RV64-NEXT: PseudoRET
371 define void @test_args_nxv4i64(<vscale x 4 x i64> %a) {
372 ; RV32-LABEL: name: test_args_nxv4i64
374 ; RV32-NEXT: liveins: $v8m4
376 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY $v8m4
377 ; RV32-NEXT: PseudoRET
379 ; RV64-LABEL: name: test_args_nxv4i64
381 ; RV64-NEXT: liveins: $v8m4
383 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY $v8m4
384 ; RV64-NEXT: PseudoRET
389 define void @test_args_nxv8i64(<vscale x 8 x i64> %a) {
390 ; RV32-LABEL: name: test_args_nxv8i64
392 ; RV32-NEXT: liveins: $v8m8
394 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s64>) = COPY $v8m8
395 ; RV32-NEXT: PseudoRET
397 ; RV64-LABEL: name: test_args_nxv8i64
399 ; RV64-NEXT: liveins: $v8m8
401 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s64>) = COPY $v8m8
402 ; RV64-NEXT: PseudoRET
407 define void @test_args_nxv64i1(<vscale x 64 x i1> %a) {
408 ; RV32-LABEL: name: test_args_nxv64i1
410 ; RV32-NEXT: liveins: $v8
412 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 64 x s1>) = COPY $v8
413 ; RV32-NEXT: PseudoRET
415 ; RV64-LABEL: name: test_args_nxv64i1
417 ; RV64-NEXT: liveins: $v8
419 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 64 x s1>) = COPY $v8
420 ; RV64-NEXT: PseudoRET
425 define void @test_args_nxv32i1(<vscale x 32 x i1> %a) {
426 ; RV32-LABEL: name: test_args_nxv32i1
428 ; RV32-NEXT: liveins: $v8
430 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s1>) = COPY $v8
431 ; RV32-NEXT: PseudoRET
433 ; RV64-LABEL: name: test_args_nxv32i1
435 ; RV64-NEXT: liveins: $v8
437 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s1>) = COPY $v8
438 ; RV64-NEXT: PseudoRET
443 define void @test_args_nxv16i1(<vscale x 16 x i1> %a) {
444 ; RV32-LABEL: name: test_args_nxv16i1
446 ; RV32-NEXT: liveins: $v8
448 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
449 ; RV32-NEXT: PseudoRET
451 ; RV64-LABEL: name: test_args_nxv16i1
453 ; RV64-NEXT: liveins: $v8
455 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s1>) = COPY $v8
456 ; RV64-NEXT: PseudoRET
461 define void @test_args_nxv8i1(<vscale x 8 x i1> %a) {
462 ; RV32-LABEL: name: test_args_nxv8i1
464 ; RV32-NEXT: liveins: $v8
466 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
467 ; RV32-NEXT: PseudoRET
469 ; RV64-LABEL: name: test_args_nxv8i1
471 ; RV64-NEXT: liveins: $v8
473 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s1>) = COPY $v8
474 ; RV64-NEXT: PseudoRET
479 define void @test_args_nxv4i1(<vscale x 4 x i1> %a) {
480 ; RV32-LABEL: name: test_args_nxv4i1
482 ; RV32-NEXT: liveins: $v8
484 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
485 ; RV32-NEXT: PseudoRET
487 ; RV64-LABEL: name: test_args_nxv4i1
489 ; RV64-NEXT: liveins: $v8
491 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s1>) = COPY $v8
492 ; RV64-NEXT: PseudoRET
497 define void @test_args_nxv2i1(<vscale x 2 x i1> %a) {
498 ; RV32-LABEL: name: test_args_nxv2i1
500 ; RV32-NEXT: liveins: $v8
502 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
503 ; RV32-NEXT: PseudoRET
505 ; RV64-LABEL: name: test_args_nxv2i1
507 ; RV64-NEXT: liveins: $v8
509 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s1>) = COPY $v8
510 ; RV64-NEXT: PseudoRET
515 define void @test_args_nxv1i1(<vscale x 1 x i1> %a) {
516 ; RV32-LABEL: name: test_args_nxv1i1
518 ; RV32-NEXT: liveins: $v8
520 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
521 ; RV32-NEXT: PseudoRET
523 ; RV64-LABEL: name: test_args_nxv1i1
525 ; RV64-NEXT: liveins: $v8
527 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s1>) = COPY $v8
528 ; RV64-NEXT: PseudoRET
533 define void @test_args_nxv1f32(<vscale x 1 x float> %a) {
534 ; RV32-LABEL: name: test_args_nxv1f32
536 ; RV32-NEXT: liveins: $v8
538 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY $v8
539 ; RV32-NEXT: PseudoRET
541 ; RV64-LABEL: name: test_args_nxv1f32
543 ; RV64-NEXT: liveins: $v8
545 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s32>) = COPY $v8
546 ; RV64-NEXT: PseudoRET
551 define void @test_args_nxv2f32(<vscale x 2 x float> %a) {
552 ; RV32-LABEL: name: test_args_nxv2f32
554 ; RV32-NEXT: liveins: $v8
556 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s32>) = COPY $v8
557 ; RV32-NEXT: PseudoRET
559 ; RV64-LABEL: name: test_args_nxv2f32
561 ; RV64-NEXT: liveins: $v8
563 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s32>) = COPY $v8
564 ; RV64-NEXT: PseudoRET
569 define void @test_args_nxv4f32(<vscale x 4 x float> %a) {
570 ; RV32-LABEL: name: test_args_nxv4f32
572 ; RV32-NEXT: liveins: $v8m2
574 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m2
575 ; RV32-NEXT: PseudoRET
577 ; RV64-LABEL: name: test_args_nxv4f32
579 ; RV64-NEXT: liveins: $v8m2
581 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s32>) = COPY $v8m2
582 ; RV64-NEXT: PseudoRET
587 define void @test_args_nxv8f32(<vscale x 8 x float> %a) {
588 ; RV32-LABEL: name: test_args_nxv8f32
590 ; RV32-NEXT: liveins: $v8m4
592 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s32>) = COPY $v8m4
593 ; RV32-NEXT: PseudoRET
595 ; RV64-LABEL: name: test_args_nxv8f32
597 ; RV64-NEXT: liveins: $v8m4
599 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s32>) = COPY $v8m4
600 ; RV64-NEXT: PseudoRET
605 define void @test_args_nxv16f32(<vscale x 16 x float> %a) {
606 ; RV32-LABEL: name: test_args_nxv16f32
608 ; RV32-NEXT: liveins: $v8m8
610 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s32>) = COPY $v8m8
611 ; RV32-NEXT: PseudoRET
613 ; RV64-LABEL: name: test_args_nxv16f32
615 ; RV64-NEXT: liveins: $v8m8
617 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s32>) = COPY $v8m8
618 ; RV64-NEXT: PseudoRET
623 define void @test_args_nxv1f64(<vscale x 1 x double> %a) {
624 ; RV32-LABEL: name: test_args_nxv1f64
626 ; RV32-NEXT: liveins: $v8
628 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s64>) = COPY $v8
629 ; RV32-NEXT: PseudoRET
631 ; RV64-LABEL: name: test_args_nxv1f64
633 ; RV64-NEXT: liveins: $v8
635 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s64>) = COPY $v8
636 ; RV64-NEXT: PseudoRET
641 define void @test_args_nxv2f64(<vscale x 2 x double> %a) {
642 ; RV32-LABEL: name: test_args_nxv2f64
644 ; RV32-NEXT: liveins: $v8m2
646 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s64>) = COPY $v8m2
647 ; RV32-NEXT: PseudoRET
649 ; RV64-LABEL: name: test_args_nxv2f64
651 ; RV64-NEXT: liveins: $v8m2
653 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s64>) = COPY $v8m2
654 ; RV64-NEXT: PseudoRET
659 define void @test_args_nxv4f64(<vscale x 4 x double> %a) {
660 ; RV32-LABEL: name: test_args_nxv4f64
662 ; RV32-NEXT: liveins: $v8m4
664 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY $v8m4
665 ; RV32-NEXT: PseudoRET
667 ; RV64-LABEL: name: test_args_nxv4f64
669 ; RV64-NEXT: liveins: $v8m4
671 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s64>) = COPY $v8m4
672 ; RV64-NEXT: PseudoRET
677 define void @test_args_nxv8f64(<vscale x 8 x double> %a) {
678 ; RV32-LABEL: name: test_args_nxv8f64
680 ; RV32-NEXT: liveins: $v8m8
682 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s64>) = COPY $v8m8
683 ; RV32-NEXT: PseudoRET
685 ; RV64-LABEL: name: test_args_nxv8f64
687 ; RV64-NEXT: liveins: $v8m8
689 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s64>) = COPY $v8m8
690 ; RV64-NEXT: PseudoRET
695 define void @test_args_nxv1f16(<vscale x 1 x half> %a) {
696 ; RV32-LABEL: name: test_args_nxv1f16
698 ; RV32-NEXT: liveins: $v8
700 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
701 ; RV32-NEXT: PseudoRET
703 ; RV64-LABEL: name: test_args_nxv1f16
705 ; RV64-NEXT: liveins: $v8
707 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
708 ; RV64-NEXT: PseudoRET
713 define void @test_args_nxv2f16(<vscale x 2 x half> %a) {
714 ; RV32-LABEL: name: test_args_nxv2f16
716 ; RV32-NEXT: liveins: $v8
718 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
719 ; RV32-NEXT: PseudoRET
721 ; RV64-LABEL: name: test_args_nxv2f16
723 ; RV64-NEXT: liveins: $v8
725 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
726 ; RV64-NEXT: PseudoRET
731 define void @test_args_nxv4f16(<vscale x 4 x half> %a) {
732 ; RV32-LABEL: name: test_args_nxv4f16
734 ; RV32-NEXT: liveins: $v8
736 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
737 ; RV32-NEXT: PseudoRET
739 ; RV64-LABEL: name: test_args_nxv4f16
741 ; RV64-NEXT: liveins: $v8
743 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
744 ; RV64-NEXT: PseudoRET
749 define void @test_args_nxv8f16(<vscale x 8 x half> %a) {
750 ; RV32-LABEL: name: test_args_nxv8f16
752 ; RV32-NEXT: liveins: $v8m2
754 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
755 ; RV32-NEXT: PseudoRET
757 ; RV64-LABEL: name: test_args_nxv8f16
759 ; RV64-NEXT: liveins: $v8m2
761 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
762 ; RV64-NEXT: PseudoRET
767 define void @test_args_nxv16f16(<vscale x 16 x half> %a) {
768 ; RV32-LABEL: name: test_args_nxv16f16
770 ; RV32-NEXT: liveins: $v8m4
772 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
773 ; RV32-NEXT: PseudoRET
775 ; RV64-LABEL: name: test_args_nxv16f16
777 ; RV64-NEXT: liveins: $v8m4
779 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
780 ; RV64-NEXT: PseudoRET
785 define void @test_args_nxv32f16(<vscale x 32 x half> %a) {
786 ; RV32-LABEL: name: test_args_nxv32f16
788 ; RV32-NEXT: liveins: $v8m8
790 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s16>) = COPY $v8m8
791 ; RV32-NEXT: PseudoRET
793 ; RV64-LABEL: name: test_args_nxv32f16
795 ; RV64-NEXT: liveins: $v8m8
797 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s16>) = COPY $v8m8
798 ; RV64-NEXT: PseudoRET
803 define void @test_args_nxv1b16(<vscale x 1 x bfloat> %a) {
804 ; RV32-LABEL: name: test_args_nxv1b16
806 ; RV32-NEXT: liveins: $v8
808 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
809 ; RV32-NEXT: PseudoRET
811 ; RV64-LABEL: name: test_args_nxv1b16
813 ; RV64-NEXT: liveins: $v8
815 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 1 x s16>) = COPY $v8
816 ; RV64-NEXT: PseudoRET
821 define void @test_args_nxv2b16(<vscale x 2 x bfloat> %a) {
822 ; RV32-LABEL: name: test_args_nxv2b16
824 ; RV32-NEXT: liveins: $v8
826 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
827 ; RV32-NEXT: PseudoRET
829 ; RV64-LABEL: name: test_args_nxv2b16
831 ; RV64-NEXT: liveins: $v8
833 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 2 x s16>) = COPY $v8
834 ; RV64-NEXT: PseudoRET
839 define void @test_args_nxv4b16(<vscale x 4 x bfloat> %a) {
840 ; RV32-LABEL: name: test_args_nxv4b16
842 ; RV32-NEXT: liveins: $v8
844 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
845 ; RV32-NEXT: PseudoRET
847 ; RV64-LABEL: name: test_args_nxv4b16
849 ; RV64-NEXT: liveins: $v8
851 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 4 x s16>) = COPY $v8
852 ; RV64-NEXT: PseudoRET
857 define void @test_args_nxv8b16(<vscale x 8 x bfloat> %a) {
858 ; RV32-LABEL: name: test_args_nxv8b16
860 ; RV32-NEXT: liveins: $v8m2
862 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
863 ; RV32-NEXT: PseudoRET
865 ; RV64-LABEL: name: test_args_nxv8b16
867 ; RV64-NEXT: liveins: $v8m2
869 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 8 x s16>) = COPY $v8m2
870 ; RV64-NEXT: PseudoRET
875 define void @test_args_nxv16b16(<vscale x 16 x bfloat> %a) {
876 ; RV32-LABEL: name: test_args_nxv16b16
878 ; RV32-NEXT: liveins: $v8m4
880 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
881 ; RV32-NEXT: PseudoRET
883 ; RV64-LABEL: name: test_args_nxv16b16
885 ; RV64-NEXT: liveins: $v8m4
887 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 16 x s16>) = COPY $v8m4
888 ; RV64-NEXT: PseudoRET
893 define void @test_args_nxv32b16(<vscale x 32 x bfloat> %a) {
894 ; RV32-LABEL: name: test_args_nxv32b16
896 ; RV32-NEXT: liveins: $v8m8
898 ; RV32-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s16>) = COPY $v8m8
899 ; RV32-NEXT: PseudoRET
901 ; RV64-LABEL: name: test_args_nxv32b16
903 ; RV64-NEXT: liveins: $v8m8
905 ; RV64-NEXT: [[COPY:%[0-9]+]]:_(<vscale x 32 x s16>) = COPY $v8m8
906 ; RV64-NEXT: PseudoRET