[IR] Replace of PointerType::get(Type) with opaque version (NFC) (#123617)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vmv.v.v.ll
blob784b807a6a2e54fd0d0d582a535c503dea5ac805
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+zvfhmin,+zvfbfmin \
3 ; RUN:   -verify-machineinstrs | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin \
5 ; RUN:   -verify-machineinstrs | FileCheck %s
7 declare <vscale x 1 x i8> @llvm.riscv.vmv.v.v.nxv1i8(
8   <vscale x 1 x i8>,
9   <vscale x 1 x i8>,
10   iXLen);
12 define <vscale x 1 x i8> @intrinsic_vmv.v.v_v_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind {
13 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1i8_nxv1i8:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, ma
16 ; CHECK-NEXT:    vmv.v.v v8, v9
17 ; CHECK-NEXT:    ret
18 entry:
19   %a = call <vscale x 1 x i8> @llvm.riscv.vmv.v.v.nxv1i8(
20     <vscale x 1 x i8> %0,
21     <vscale x 1 x i8> %1,
22     iXLen %2)
24   ret <vscale x 1 x i8> %a
27 declare <vscale x 2 x i8> @llvm.riscv.vmv.v.v.nxv2i8(
28   <vscale x 2 x i8>,
29   <vscale x 2 x i8>,
30   iXLen);
32 define <vscale x 2 x i8> @intrinsic_vmv.v.v_v_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, iXLen %2) nounwind {
33 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2i8_nxv2i8:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, ma
36 ; CHECK-NEXT:    vmv.v.v v8, v9
37 ; CHECK-NEXT:    ret
38 entry:
39   %a = call <vscale x 2 x i8> @llvm.riscv.vmv.v.v.nxv2i8(
40     <vscale x 2 x i8> %0,
41     <vscale x 2 x i8> %1,
42     iXLen %2)
44   ret <vscale x 2 x i8> %a
47 declare <vscale x 4 x i8> @llvm.riscv.vmv.v.v.nxv4i8(
48   <vscale x 4 x i8>,
49   <vscale x 4 x i8>,
50   iXLen);
52 define <vscale x 4 x i8> @intrinsic_vmv.v.v_v_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, iXLen %2) nounwind {
53 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4i8_nxv4i8:
54 ; CHECK:       # %bb.0: # %entry
55 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma
56 ; CHECK-NEXT:    vmv.v.v v8, v9
57 ; CHECK-NEXT:    ret
58 entry:
59   %a = call <vscale x 4 x i8> @llvm.riscv.vmv.v.v.nxv4i8(
60     <vscale x 4 x i8> %0,
61     <vscale x 4 x i8> %1,
62     iXLen %2)
64   ret <vscale x 4 x i8> %a
67 declare <vscale x 8 x i8> @llvm.riscv.vmv.v.v.nxv8i8(
68   <vscale x 8 x i8>,
69   <vscale x 8 x i8>,
70   iXLen);
72 define <vscale x 8 x i8> @intrinsic_vmv.v.v_v_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, iXLen %2) nounwind {
73 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8i8_nxv8i8:
74 ; CHECK:       # %bb.0: # %entry
75 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, ma
76 ; CHECK-NEXT:    vmv.v.v v8, v9
77 ; CHECK-NEXT:    ret
78 entry:
79   %a = call <vscale x 8 x i8> @llvm.riscv.vmv.v.v.nxv8i8(
80     <vscale x 8 x i8> %0,
81     <vscale x 8 x i8> %1,
82     iXLen %2)
84   ret <vscale x 8 x i8> %a
87 declare <vscale x 16 x i8> @llvm.riscv.vmv.v.v.nxv16i8(
88   <vscale x 16 x i8>,
89   <vscale x 16 x i8>,
90   iXLen);
92 define <vscale x 16 x i8> @intrinsic_vmv.v.v_v_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, iXLen %2) nounwind {
93 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv16i8_nxv16i8:
94 ; CHECK:       # %bb.0: # %entry
95 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, ma
96 ; CHECK-NEXT:    vmv.v.v v8, v10
97 ; CHECK-NEXT:    ret
98 entry:
99   %a = call <vscale x 16 x i8> @llvm.riscv.vmv.v.v.nxv16i8(
100     <vscale x 16 x i8> %0,
101     <vscale x 16 x i8> %1,
102     iXLen %2)
104   ret <vscale x 16 x i8> %a
107 declare <vscale x 32 x i8> @llvm.riscv.vmv.v.v.nxv32i8(
108   <vscale x 32 x i8>,
109   <vscale x 32 x i8>,
110   iXLen);
112 define <vscale x 32 x i8> @intrinsic_vmv.v.v_v_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, iXLen %2) nounwind {
113 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv32i8_nxv32i8:
114 ; CHECK:       # %bb.0: # %entry
115 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma
116 ; CHECK-NEXT:    vmv.v.v v8, v12
117 ; CHECK-NEXT:    ret
118 entry:
119   %a = call <vscale x 32 x i8> @llvm.riscv.vmv.v.v.nxv32i8(
120     <vscale x 32 x i8> %0,
121     <vscale x 32 x i8> %1,
122     iXLen %2)
124   ret <vscale x 32 x i8> %a
127 declare <vscale x 64 x i8> @llvm.riscv.vmv.v.v.nxv64i8(
128   <vscale x 64 x i8>,
129   <vscale x 64 x i8>,
130   iXLen);
132 define <vscale x 64 x i8> @intrinsic_vmv.v.v_v_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, iXLen %2) nounwind {
133 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv64i8_nxv64i8:
134 ; CHECK:       # %bb.0: # %entry
135 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, tu, ma
136 ; CHECK-NEXT:    vmv.v.v v8, v16
137 ; CHECK-NEXT:    ret
138 entry:
139   %a = call <vscale x 64 x i8> @llvm.riscv.vmv.v.v.nxv64i8(
140     <vscale x 64 x i8> %0,
141     <vscale x 64 x i8> %1,
142     iXLen %2)
144   ret <vscale x 64 x i8> %a
147 declare <vscale x 1 x i16> @llvm.riscv.vmv.v.v.nxv1i16(
148   <vscale x 1 x i16>,
149   <vscale x 1 x i16>,
150   iXLen);
152 define <vscale x 1 x i16> @intrinsic_vmv.v.v_v_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, iXLen %2) nounwind {
153 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1i16_nxv1i16:
154 ; CHECK:       # %bb.0: # %entry
155 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
156 ; CHECK-NEXT:    vmv.v.v v8, v9
157 ; CHECK-NEXT:    ret
158 entry:
159   %a = call <vscale x 1 x i16> @llvm.riscv.vmv.v.v.nxv1i16(
160     <vscale x 1 x i16> %0,
161     <vscale x 1 x i16> %1,
162     iXLen %2)
164   ret <vscale x 1 x i16> %a
167 declare <vscale x 2 x i16> @llvm.riscv.vmv.v.v.nxv2i16(
168   <vscale x 2 x i16>,
169   <vscale x 2 x i16>,
170   iXLen);
172 define <vscale x 2 x i16> @intrinsic_vmv.v.v_v_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, iXLen %2) nounwind {
173 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2i16_nxv2i16:
174 ; CHECK:       # %bb.0: # %entry
175 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
176 ; CHECK-NEXT:    vmv.v.v v8, v9
177 ; CHECK-NEXT:    ret
178 entry:
179   %a = call <vscale x 2 x i16> @llvm.riscv.vmv.v.v.nxv2i16(
180     <vscale x 2 x i16> %0,
181     <vscale x 2 x i16> %1,
182     iXLen %2)
184   ret <vscale x 2 x i16> %a
187 declare <vscale x 4 x i16> @llvm.riscv.vmv.v.v.nxv4i16(
188   <vscale x 4 x i16>,
189   <vscale x 4 x i16>,
190   iXLen);
192 define <vscale x 4 x i16> @intrinsic_vmv.v.v_v_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, iXLen %2) nounwind {
193 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4i16_nxv4i16:
194 ; CHECK:       # %bb.0: # %entry
195 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
196 ; CHECK-NEXT:    vmv.v.v v8, v9
197 ; CHECK-NEXT:    ret
198 entry:
199   %a = call <vscale x 4 x i16> @llvm.riscv.vmv.v.v.nxv4i16(
200     <vscale x 4 x i16> %0,
201     <vscale x 4 x i16> %1,
202     iXLen %2)
204   ret <vscale x 4 x i16> %a
207 declare <vscale x 8 x i16> @llvm.riscv.vmv.v.v.nxv8i16(
208   <vscale x 8 x i16>,
209   <vscale x 8 x i16>,
210   iXLen);
212 define <vscale x 8 x i16> @intrinsic_vmv.v.v_v_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, iXLen %2) nounwind {
213 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8i16_nxv8i16:
214 ; CHECK:       # %bb.0: # %entry
215 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
216 ; CHECK-NEXT:    vmv.v.v v8, v10
217 ; CHECK-NEXT:    ret
218 entry:
219   %a = call <vscale x 8 x i16> @llvm.riscv.vmv.v.v.nxv8i16(
220     <vscale x 8 x i16> %0,
221     <vscale x 8 x i16> %1,
222     iXLen %2)
224   ret <vscale x 8 x i16> %a
227 declare <vscale x 16 x i16> @llvm.riscv.vmv.v.v.nxv16i16(
228   <vscale x 16 x i16>,
229   <vscale x 16 x i16>,
230   iXLen);
232 define <vscale x 16 x i16> @intrinsic_vmv.v.v_v_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, iXLen %2) nounwind {
233 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv16i16_nxv16i16:
234 ; CHECK:       # %bb.0: # %entry
235 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
236 ; CHECK-NEXT:    vmv.v.v v8, v12
237 ; CHECK-NEXT:    ret
238 entry:
239   %a = call <vscale x 16 x i16> @llvm.riscv.vmv.v.v.nxv16i16(
240     <vscale x 16 x i16> %0,
241     <vscale x 16 x i16> %1,
242     iXLen %2)
244   ret <vscale x 16 x i16> %a
247 declare <vscale x 32 x i16> @llvm.riscv.vmv.v.v.nxv32i16(
248   <vscale x 32 x i16>,
249   <vscale x 32 x i16>,
250   iXLen);
252 define <vscale x 32 x i16> @intrinsic_vmv.v.v_v_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, iXLen %2) nounwind {
253 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv32i16_nxv32i16:
254 ; CHECK:       # %bb.0: # %entry
255 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma
256 ; CHECK-NEXT:    vmv.v.v v8, v16
257 ; CHECK-NEXT:    ret
258 entry:
259   %a = call <vscale x 32 x i16> @llvm.riscv.vmv.v.v.nxv32i16(
260     <vscale x 32 x i16> %0,
261     <vscale x 32 x i16> %1,
262     iXLen %2)
264   ret <vscale x 32 x i16> %a
267 declare <vscale x 1 x i32> @llvm.riscv.vmv.v.v.nxv1i32(
268   <vscale x 1 x i32>,
269   <vscale x 1 x i32>,
270   iXLen);
272 define <vscale x 1 x i32> @intrinsic_vmv.v.v_v_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, iXLen %2) nounwind {
273 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1i32_nxv1i32:
274 ; CHECK:       # %bb.0: # %entry
275 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
276 ; CHECK-NEXT:    vmv.v.v v8, v9
277 ; CHECK-NEXT:    ret
278 entry:
279   %a = call <vscale x 1 x i32> @llvm.riscv.vmv.v.v.nxv1i32(
280     <vscale x 1 x i32> %0,
281     <vscale x 1 x i32> %1,
282     iXLen %2)
284   ret <vscale x 1 x i32> %a
287 declare <vscale x 2 x i32> @llvm.riscv.vmv.v.v.nxv2i32(
288   <vscale x 2 x i32>,
289   <vscale x 2 x i32>,
290   iXLen);
292 define <vscale x 2 x i32> @intrinsic_vmv.v.v_v_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, iXLen %2) nounwind {
293 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2i32_nxv2i32:
294 ; CHECK:       # %bb.0: # %entry
295 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
296 ; CHECK-NEXT:    vmv.v.v v8, v9
297 ; CHECK-NEXT:    ret
298 entry:
299   %a = call <vscale x 2 x i32> @llvm.riscv.vmv.v.v.nxv2i32(
300     <vscale x 2 x i32> %0,
301     <vscale x 2 x i32> %1,
302     iXLen %2)
304   ret <vscale x 2 x i32> %a
307 declare <vscale x 4 x i32> @llvm.riscv.vmv.v.v.nxv4i32(
308   <vscale x 4 x i32>,
309   <vscale x 4 x i32>,
310   iXLen);
312 define <vscale x 4 x i32> @intrinsic_vmv.v.v_v_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, iXLen %2) nounwind {
313 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4i32_nxv4i32:
314 ; CHECK:       # %bb.0: # %entry
315 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
316 ; CHECK-NEXT:    vmv.v.v v8, v10
317 ; CHECK-NEXT:    ret
318 entry:
319   %a = call <vscale x 4 x i32> @llvm.riscv.vmv.v.v.nxv4i32(
320     <vscale x 4 x i32> %0,
321     <vscale x 4 x i32> %1,
322     iXLen %2)
324   ret <vscale x 4 x i32> %a
327 declare <vscale x 8 x i32> @llvm.riscv.vmv.v.v.nxv8i32(
328   <vscale x 8 x i32>,
329   <vscale x 8 x i32>,
330   iXLen);
332 define <vscale x 8 x i32> @intrinsic_vmv.v.v_v_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, iXLen %2) nounwind {
333 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8i32_nxv8i32:
334 ; CHECK:       # %bb.0: # %entry
335 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
336 ; CHECK-NEXT:    vmv.v.v v8, v12
337 ; CHECK-NEXT:    ret
338 entry:
339   %a = call <vscale x 8 x i32> @llvm.riscv.vmv.v.v.nxv8i32(
340     <vscale x 8 x i32> %0,
341     <vscale x 8 x i32> %1,
342     iXLen %2)
344   ret <vscale x 8 x i32> %a
347 declare <vscale x 16 x i32> @llvm.riscv.vmv.v.v.nxv16i32(
348   <vscale x 16 x i32>,
349   <vscale x 16 x i32>,
350   iXLen);
352 define <vscale x 16 x i32> @intrinsic_vmv.v.v_v_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, iXLen %2) nounwind {
353 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv16i32_nxv16i32:
354 ; CHECK:       # %bb.0: # %entry
355 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, ma
356 ; CHECK-NEXT:    vmv.v.v v8, v16
357 ; CHECK-NEXT:    ret
358 entry:
359   %a = call <vscale x 16 x i32> @llvm.riscv.vmv.v.v.nxv16i32(
360     <vscale x 16 x i32> %0,
361     <vscale x 16 x i32> %1,
362     iXLen %2)
364   ret <vscale x 16 x i32> %a
367 declare <vscale x 1 x i64> @llvm.riscv.vmv.v.v.nxv1i64(
368   <vscale x 1 x i64>,
369   <vscale x 1 x i64>,
370   iXLen);
372 define <vscale x 1 x i64> @intrinsic_vmv.v.v_v_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, iXLen %2) nounwind {
373 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1i64_nxv1i64:
374 ; CHECK:       # %bb.0: # %entry
375 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
376 ; CHECK-NEXT:    vmv.v.v v8, v9
377 ; CHECK-NEXT:    ret
378 entry:
379   %a = call <vscale x 1 x i64> @llvm.riscv.vmv.v.v.nxv1i64(
380     <vscale x 1 x i64> %0,
381     <vscale x 1 x i64> %1,
382     iXLen %2)
384   ret <vscale x 1 x i64> %a
387 declare <vscale x 2 x i64> @llvm.riscv.vmv.v.v.nxv2i64(
388   <vscale x 2 x i64>,
389   <vscale x 2 x i64>,
390   iXLen);
392 define <vscale x 2 x i64> @intrinsic_vmv.v.v_v_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, iXLen %2) nounwind {
393 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2i64_nxv2i64:
394 ; CHECK:       # %bb.0: # %entry
395 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
396 ; CHECK-NEXT:    vmv.v.v v8, v10
397 ; CHECK-NEXT:    ret
398 entry:
399   %a = call <vscale x 2 x i64> @llvm.riscv.vmv.v.v.nxv2i64(
400     <vscale x 2 x i64> %0,
401     <vscale x 2 x i64> %1,
402     iXLen %2)
404   ret <vscale x 2 x i64> %a
407 declare <vscale x 4 x i64> @llvm.riscv.vmv.v.v.nxv4i64(
408   <vscale x 4 x i64>,
409   <vscale x 4 x i64>,
410   iXLen);
412 define <vscale x 4 x i64> @intrinsic_vmv.v.v_v_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, iXLen %2) nounwind {
413 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4i64_nxv4i64:
414 ; CHECK:       # %bb.0: # %entry
415 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
416 ; CHECK-NEXT:    vmv.v.v v8, v12
417 ; CHECK-NEXT:    ret
418 entry:
419   %a = call <vscale x 4 x i64> @llvm.riscv.vmv.v.v.nxv4i64(
420     <vscale x 4 x i64> %0,
421     <vscale x 4 x i64> %1,
422     iXLen %2)
424   ret <vscale x 4 x i64> %a
427 declare <vscale x 8 x i64> @llvm.riscv.vmv.v.v.nxv8i64(
428   <vscale x 8 x i64>,
429   <vscale x 8 x i64>,
430   iXLen);
432 define <vscale x 8 x i64> @intrinsic_vmv.v.v_v_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, iXLen %2) nounwind {
433 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8i64_nxv8i64:
434 ; CHECK:       # %bb.0: # %entry
435 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma
436 ; CHECK-NEXT:    vmv.v.v v8, v16
437 ; CHECK-NEXT:    ret
438 entry:
439   %a = call <vscale x 8 x i64> @llvm.riscv.vmv.v.v.nxv8i64(
440     <vscale x 8 x i64> %0,
441     <vscale x 8 x i64> %1,
442     iXLen %2)
444   ret <vscale x 8 x i64> %a
447 declare <vscale x 1 x half> @llvm.riscv.vmv.v.v.nxv1f16(
448   <vscale x 1 x half>,
449   <vscale x 1 x half>,
450   iXLen);
452 define <vscale x 1 x half> @intrinsic_vmv.v.v_v_nxv1f16_nxv1f16(<vscale x 1 x half> %0, <vscale x 1 x half> %1, iXLen %2) nounwind {
453 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1f16_nxv1f16:
454 ; CHECK:       # %bb.0: # %entry
455 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
456 ; CHECK-NEXT:    vmv.v.v v8, v9
457 ; CHECK-NEXT:    ret
458 entry:
459   %a = call <vscale x 1 x half> @llvm.riscv.vmv.v.v.nxv1f16(
460     <vscale x 1 x half> %0,
461     <vscale x 1 x half> %1,
462     iXLen %2)
464   ret <vscale x 1 x half> %a
467 declare <vscale x 2 x half> @llvm.riscv.vmv.v.v.nxv2f16(
468   <vscale x 2 x half>,
469   <vscale x 2 x half>,
470   iXLen);
472 define <vscale x 2 x half> @intrinsic_vmv.v.v_v_nxv2f16_nxv2f16(<vscale x 2 x half> %0, <vscale x 2 x half> %1, iXLen %2) nounwind {
473 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2f16_nxv2f16:
474 ; CHECK:       # %bb.0: # %entry
475 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
476 ; CHECK-NEXT:    vmv.v.v v8, v9
477 ; CHECK-NEXT:    ret
478 entry:
479   %a = call <vscale x 2 x half> @llvm.riscv.vmv.v.v.nxv2f16(
480     <vscale x 2 x half> %0,
481     <vscale x 2 x half> %1,
482     iXLen %2)
484   ret <vscale x 2 x half> %a
487 declare <vscale x 4 x half> @llvm.riscv.vmv.v.v.nxv4f16(
488   <vscale x 4 x half>,
489   <vscale x 4 x half>,
490   iXLen);
492 define <vscale x 4 x half> @intrinsic_vmv.v.v_v_nxv4f16_nxv4f16(<vscale x 4 x half> %0, <vscale x 4 x half> %1, iXLen %2) nounwind {
493 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4f16_nxv4f16:
494 ; CHECK:       # %bb.0: # %entry
495 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
496 ; CHECK-NEXT:    vmv.v.v v8, v9
497 ; CHECK-NEXT:    ret
498 entry:
499   %a = call <vscale x 4 x half> @llvm.riscv.vmv.v.v.nxv4f16(
500     <vscale x 4 x half> %0,
501     <vscale x 4 x half> %1,
502     iXLen %2)
504   ret <vscale x 4 x half> %a
507 declare <vscale x 8 x half> @llvm.riscv.vmv.v.v.nxv8f16(
508   <vscale x 8 x half>,
509   <vscale x 8 x half>,
510   iXLen);
512 define <vscale x 8 x half> @intrinsic_vmv.v.v_v_nxv8f16_nxv8f16(<vscale x 8 x half> %0, <vscale x 8 x half> %1, iXLen %2) nounwind {
513 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8f16_nxv8f16:
514 ; CHECK:       # %bb.0: # %entry
515 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
516 ; CHECK-NEXT:    vmv.v.v v8, v10
517 ; CHECK-NEXT:    ret
518 entry:
519   %a = call <vscale x 8 x half> @llvm.riscv.vmv.v.v.nxv8f16(
520     <vscale x 8 x half> %0,
521     <vscale x 8 x half> %1,
522     iXLen %2)
524   ret <vscale x 8 x half> %a
527 declare <vscale x 16 x half> @llvm.riscv.vmv.v.v.nxv16f16(
528   <vscale x 16 x half>,
529   <vscale x 16 x half>,
530   iXLen);
532 define <vscale x 16 x half> @intrinsic_vmv.v.v_v_nxv16f16_nxv16f16(<vscale x 16 x half> %0, <vscale x 16 x half> %1, iXLen %2) nounwind {
533 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv16f16_nxv16f16:
534 ; CHECK:       # %bb.0: # %entry
535 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
536 ; CHECK-NEXT:    vmv.v.v v8, v12
537 ; CHECK-NEXT:    ret
538 entry:
539   %a = call <vscale x 16 x half> @llvm.riscv.vmv.v.v.nxv16f16(
540     <vscale x 16 x half> %0,
541     <vscale x 16 x half> %1,
542     iXLen %2)
544   ret <vscale x 16 x half> %a
547 declare <vscale x 32 x half> @llvm.riscv.vmv.v.v.nxv32f16(
548   <vscale x 32 x half>,
549   <vscale x 32 x half>,
550   iXLen);
552 define <vscale x 32 x half> @intrinsic_vmv.v.v_v_nxv32f16_nxv32f16(<vscale x 32 x half> %0, <vscale x 32 x half> %1, iXLen %2) nounwind {
553 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv32f16_nxv32f16:
554 ; CHECK:       # %bb.0: # %entry
555 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma
556 ; CHECK-NEXT:    vmv.v.v v8, v16
557 ; CHECK-NEXT:    ret
558 entry:
559   %a = call <vscale x 32 x half> @llvm.riscv.vmv.v.v.nxv32f16(
560     <vscale x 32 x half> %0,
561     <vscale x 32 x half> %1,
562     iXLen %2)
564   ret <vscale x 32 x half> %a
567 declare <vscale x 1 x bfloat> @llvm.riscv.vmv.v.v.nxv1bf16(
568   <vscale x 1 x bfloat>,
569   <vscale x 1 x bfloat>,
570   iXLen);
572 define <vscale x 1 x bfloat> @intrinsic_vmv.v.v_v_nxv1bf16_nxv1bf16(<vscale x 1 x bfloat> %0, <vscale x 1 x bfloat> %1, iXLen %2) nounwind {
573 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1bf16_nxv1bf16:
574 ; CHECK:       # %bb.0: # %entry
575 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma
576 ; CHECK-NEXT:    vmv.v.v v8, v9
577 ; CHECK-NEXT:    ret
578 entry:
579   %a = call <vscale x 1 x bfloat> @llvm.riscv.vmv.v.v.nxv1bf16(
580     <vscale x 1 x bfloat> %0,
581     <vscale x 1 x bfloat> %1,
582     iXLen %2)
584   ret <vscale x 1 x bfloat> %a
587 declare <vscale x 2 x bfloat> @llvm.riscv.vmv.v.v.nxv2bf16(
588   <vscale x 2 x bfloat>,
589   <vscale x 2 x bfloat>,
590   iXLen);
592 define <vscale x 2 x bfloat> @intrinsic_vmv.v.v_v_nxv2bf16_nxv2bf16(<vscale x 2 x bfloat> %0, <vscale x 2 x bfloat> %1, iXLen %2) nounwind {
593 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2bf16_nxv2bf16:
594 ; CHECK:       # %bb.0: # %entry
595 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma
596 ; CHECK-NEXT:    vmv.v.v v8, v9
597 ; CHECK-NEXT:    ret
598 entry:
599   %a = call <vscale x 2 x bfloat> @llvm.riscv.vmv.v.v.nxv2bf16(
600     <vscale x 2 x bfloat> %0,
601     <vscale x 2 x bfloat> %1,
602     iXLen %2)
604   ret <vscale x 2 x bfloat> %a
607 declare <vscale x 4 x bfloat> @llvm.riscv.vmv.v.v.nxv4bf16(
608   <vscale x 4 x bfloat>,
609   <vscale x 4 x bfloat>,
610   iXLen);
612 define <vscale x 4 x bfloat> @intrinsic_vmv.v.v_v_nxv4bf16_nxv4bf16(<vscale x 4 x bfloat> %0, <vscale x 4 x bfloat> %1, iXLen %2) nounwind {
613 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4bf16_nxv4bf16:
614 ; CHECK:       # %bb.0: # %entry
615 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma
616 ; CHECK-NEXT:    vmv.v.v v8, v9
617 ; CHECK-NEXT:    ret
618 entry:
619   %a = call <vscale x 4 x bfloat> @llvm.riscv.vmv.v.v.nxv4bf16(
620     <vscale x 4 x bfloat> %0,
621     <vscale x 4 x bfloat> %1,
622     iXLen %2)
624   ret <vscale x 4 x bfloat> %a
627 declare <vscale x 8 x bfloat> @llvm.riscv.vmv.v.v.nxv8bf16(
628   <vscale x 8 x bfloat>,
629   <vscale x 8 x bfloat>,
630   iXLen);
632 define <vscale x 8 x bfloat> @intrinsic_vmv.v.v_v_nxv8bf16_nxv8bf16(<vscale x 8 x bfloat> %0, <vscale x 8 x bfloat> %1, iXLen %2) nounwind {
633 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8bf16_nxv8bf16:
634 ; CHECK:       # %bb.0: # %entry
635 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
636 ; CHECK-NEXT:    vmv.v.v v8, v10
637 ; CHECK-NEXT:    ret
638 entry:
639   %a = call <vscale x 8 x bfloat> @llvm.riscv.vmv.v.v.nxv8bf16(
640     <vscale x 8 x bfloat> %0,
641     <vscale x 8 x bfloat> %1,
642     iXLen %2)
644   ret <vscale x 8 x bfloat> %a
647 declare <vscale x 16 x bfloat> @llvm.riscv.vmv.v.v.nxv16bf16(
648   <vscale x 16 x bfloat>,
649   <vscale x 16 x bfloat>,
650   iXLen);
652 define <vscale x 16 x bfloat> @intrinsic_vmv.v.v_v_nxv16bf16_nxv16bf16(<vscale x 16 x bfloat> %0, <vscale x 16 x bfloat> %1, iXLen %2) nounwind {
653 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv16bf16_nxv16bf16:
654 ; CHECK:       # %bb.0: # %entry
655 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
656 ; CHECK-NEXT:    vmv.v.v v8, v12
657 ; CHECK-NEXT:    ret
658 entry:
659   %a = call <vscale x 16 x bfloat> @llvm.riscv.vmv.v.v.nxv16bf16(
660     <vscale x 16 x bfloat> %0,
661     <vscale x 16 x bfloat> %1,
662     iXLen %2)
664   ret <vscale x 16 x bfloat> %a
667 declare <vscale x 32 x bfloat> @llvm.riscv.vmv.v.v.nxv32bf16(
668   <vscale x 32 x bfloat>,
669   <vscale x 32 x bfloat>,
670   iXLen);
672 define <vscale x 32 x bfloat> @intrinsic_vmv.v.v_v_nxv32bf16_nxv32bf16(<vscale x 32 x bfloat> %0, <vscale x 32 x bfloat> %1, iXLen %2) nounwind {
673 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv32bf16_nxv32bf16:
674 ; CHECK:       # %bb.0: # %entry
675 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma
676 ; CHECK-NEXT:    vmv.v.v v8, v16
677 ; CHECK-NEXT:    ret
678 entry:
679   %a = call <vscale x 32 x bfloat> @llvm.riscv.vmv.v.v.nxv32bf16(
680     <vscale x 32 x bfloat> %0,
681     <vscale x 32 x bfloat> %1,
682     iXLen %2)
684   ret <vscale x 32 x bfloat> %a
687 declare <vscale x 1 x float> @llvm.riscv.vmv.v.v.nxv1f32(
688   <vscale x 1 x float>,
689   <vscale x 1 x float>,
690   iXLen);
692 define <vscale x 1 x float> @intrinsic_vmv.v.v_v_nxv1f32_nxv1f32(<vscale x 1 x float> %0, <vscale x 1 x float> %1, iXLen %2) nounwind {
693 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1f32_nxv1f32:
694 ; CHECK:       # %bb.0: # %entry
695 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma
696 ; CHECK-NEXT:    vmv.v.v v8, v9
697 ; CHECK-NEXT:    ret
698 entry:
699   %a = call <vscale x 1 x float> @llvm.riscv.vmv.v.v.nxv1f32(
700     <vscale x 1 x float> %0,
701     <vscale x 1 x float> %1,
702     iXLen %2)
704   ret <vscale x 1 x float> %a
707 declare <vscale x 2 x float> @llvm.riscv.vmv.v.v.nxv2f32(
708   <vscale x 2 x float>,
709   <vscale x 2 x float>,
710   iXLen);
712 define <vscale x 2 x float> @intrinsic_vmv.v.v_v_nxv2f32_nxv2f32(<vscale x 2 x float> %0, <vscale x 2 x float> %1, iXLen %2) nounwind {
713 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2f32_nxv2f32:
714 ; CHECK:       # %bb.0: # %entry
715 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma
716 ; CHECK-NEXT:    vmv.v.v v8, v9
717 ; CHECK-NEXT:    ret
718 entry:
719   %a = call <vscale x 2 x float> @llvm.riscv.vmv.v.v.nxv2f32(
720     <vscale x 2 x float> %0,
721     <vscale x 2 x float> %1,
722     iXLen %2)
724   ret <vscale x 2 x float> %a
727 declare <vscale x 4 x float> @llvm.riscv.vmv.v.v.nxv4f32(
728   <vscale x 4 x float>,
729   <vscale x 4 x float>,
730   iXLen);
732 define <vscale x 4 x float> @intrinsic_vmv.v.v_v_nxv4f32_nxv4f32(<vscale x 4 x float> %0, <vscale x 4 x float> %1, iXLen %2) nounwind {
733 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4f32_nxv4f32:
734 ; CHECK:       # %bb.0: # %entry
735 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
736 ; CHECK-NEXT:    vmv.v.v v8, v10
737 ; CHECK-NEXT:    ret
738 entry:
739   %a = call <vscale x 4 x float> @llvm.riscv.vmv.v.v.nxv4f32(
740     <vscale x 4 x float> %0,
741     <vscale x 4 x float> %1,
742     iXLen %2)
744   ret <vscale x 4 x float> %a
747 declare <vscale x 8 x float> @llvm.riscv.vmv.v.v.nxv8f32(
748   <vscale x 8 x float>,
749   <vscale x 8 x float>,
750   iXLen);
752 define <vscale x 8 x float> @intrinsic_vmv.v.v_v_nxv8f32_nxv8f32(<vscale x 8 x float> %0, <vscale x 8 x float> %1, iXLen %2) nounwind {
753 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8f32_nxv8f32:
754 ; CHECK:       # %bb.0: # %entry
755 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
756 ; CHECK-NEXT:    vmv.v.v v8, v12
757 ; CHECK-NEXT:    ret
758 entry:
759   %a = call <vscale x 8 x float> @llvm.riscv.vmv.v.v.nxv8f32(
760     <vscale x 8 x float> %0,
761     <vscale x 8 x float> %1,
762     iXLen %2)
764   ret <vscale x 8 x float> %a
767 declare <vscale x 16 x float> @llvm.riscv.vmv.v.v.nxv16f32(
768   <vscale x 16 x float>,
769   <vscale x 16 x float>,
770   iXLen);
772 define <vscale x 16 x float> @intrinsic_vmv.v.v_v_nxv16f32_nxv16f32(<vscale x 16 x float> %0, <vscale x 16 x float> %1, iXLen %2) nounwind {
773 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv16f32_nxv16f32:
774 ; CHECK:       # %bb.0: # %entry
775 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, ma
776 ; CHECK-NEXT:    vmv.v.v v8, v16
777 ; CHECK-NEXT:    ret
778 entry:
779   %a = call <vscale x 16 x float> @llvm.riscv.vmv.v.v.nxv16f32(
780     <vscale x 16 x float> %0,
781     <vscale x 16 x float> %1,
782     iXLen %2)
784   ret <vscale x 16 x float> %a
787 declare <vscale x 1 x double> @llvm.riscv.vmv.v.v.nxv1f64(
788   <vscale x 1 x double>,
789   <vscale x 1 x double>,
790   iXLen);
792 define <vscale x 1 x double> @intrinsic_vmv.v.v_v_nxv1f64_nxv1f64(<vscale x 1 x double> %0, <vscale x 1 x double> %1, iXLen %2) nounwind {
793 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv1f64_nxv1f64:
794 ; CHECK:       # %bb.0: # %entry
795 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
796 ; CHECK-NEXT:    vmv.v.v v8, v9
797 ; CHECK-NEXT:    ret
798 entry:
799   %a = call <vscale x 1 x double> @llvm.riscv.vmv.v.v.nxv1f64(
800     <vscale x 1 x double> %0,
801     <vscale x 1 x double> %1,
802     iXLen %2)
804   ret <vscale x 1 x double> %a
807 declare <vscale x 2 x double> @llvm.riscv.vmv.v.v.nxv2f64(
808   <vscale x 2 x double>,
809   <vscale x 2 x double>,
810   iXLen);
812 define <vscale x 2 x double> @intrinsic_vmv.v.v_v_nxv2f64_nxv2f64(<vscale x 2 x double> %0, <vscale x 2 x double> %1, iXLen %2) nounwind {
813 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv2f64_nxv2f64:
814 ; CHECK:       # %bb.0: # %entry
815 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
816 ; CHECK-NEXT:    vmv.v.v v8, v10
817 ; CHECK-NEXT:    ret
818 entry:
819   %a = call <vscale x 2 x double> @llvm.riscv.vmv.v.v.nxv2f64(
820     <vscale x 2 x double> %0,
821     <vscale x 2 x double> %1,
822     iXLen %2)
824   ret <vscale x 2 x double> %a
827 declare <vscale x 4 x double> @llvm.riscv.vmv.v.v.nxv4f64(
828   <vscale x 4 x double>,
829   <vscale x 4 x double>,
830   iXLen);
832 define <vscale x 4 x double> @intrinsic_vmv.v.v_v_nxv4f64_nxv4f64(<vscale x 4 x double> %0, <vscale x 4 x double> %1, iXLen %2) nounwind {
833 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv4f64_nxv4f64:
834 ; CHECK:       # %bb.0: # %entry
835 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
836 ; CHECK-NEXT:    vmv.v.v v8, v12
837 ; CHECK-NEXT:    ret
838 entry:
839   %a = call <vscale x 4 x double> @llvm.riscv.vmv.v.v.nxv4f64(
840     <vscale x 4 x double> %0,
841     <vscale x 4 x double> %1,
842     iXLen %2)
844   ret <vscale x 4 x double> %a
847 declare <vscale x 8 x double> @llvm.riscv.vmv.v.v.nxv8f64(
848   <vscale x 8 x double>,
849   <vscale x 8 x double>,
850   iXLen);
852 define <vscale x 8 x double> @intrinsic_vmv.v.v_v_nxv8f64_nxv8f64(<vscale x 8 x double> %0, <vscale x 8 x double> %1, iXLen %2) nounwind {
853 ; CHECK-LABEL: intrinsic_vmv.v.v_v_nxv8f64_nxv8f64:
854 ; CHECK:       # %bb.0: # %entry
855 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma
856 ; CHECK-NEXT:    vmv.v.v v8, v16
857 ; CHECK-NEXT:    ret
858 entry:
859   %a = call <vscale x 8 x double> @llvm.riscv.vmv.v.v.nxv8f64(
860     <vscale x 8 x double> %0,
861     <vscale x 8 x double> %1,
862     iXLen %2)
864   ret <vscale x 8 x double> %a