Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsse.ll
blob9b627bcd664673e16ecd56a5e80c73ae87985d29
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,+zfh,+zvfh \
3 ; RUN:   -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zfh,+zvfh \
5 ; RUN:   -verify-machineinstrs -target-abi=lp64d | FileCheck %s
7 declare void @llvm.riscv.vsse.nxv1i64(
8   <vscale x 1 x i64>,
9   ptr,
10   iXLen,
11   iXLen);
13 define void @intrinsic_vsse_v_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
14 ; CHECK-LABEL: intrinsic_vsse_v_nxv1i64_nxv1i64:
15 ; CHECK:       # %bb.0: # %entry
16 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
17 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
18 ; CHECK-NEXT:    ret
19 entry:
20   call void @llvm.riscv.vsse.nxv1i64(
21     <vscale x 1 x i64> %0,
22     ptr %1,
23     iXLen %2,
24     iXLen %3)
26   ret void
29 declare void @llvm.riscv.vsse.mask.nxv1i64(
30   <vscale x 1 x i64>,
31   ptr,
32   iXLen,
33   <vscale x 1 x i1>,
34   iXLen);
36 define void @intrinsic_vsse_mask_v_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
37 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1i64_nxv1i64:
38 ; CHECK:       # %bb.0: # %entry
39 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
40 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
41 ; CHECK-NEXT:    ret
42 entry:
43   call void @llvm.riscv.vsse.mask.nxv1i64(
44     <vscale x 1 x i64> %0,
45     ptr %1,
46     iXLen %2,
47     <vscale x 1 x i1> %3,
48     iXLen %4)
50   ret void
53 declare void @llvm.riscv.vsse.nxv2i64(
54   <vscale x 2 x i64>,
55   ptr,
56   iXLen,
57   iXLen);
59 define void @intrinsic_vsse_v_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
60 ; CHECK-LABEL: intrinsic_vsse_v_nxv2i64_nxv2i64:
61 ; CHECK:       # %bb.0: # %entry
62 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
63 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
64 ; CHECK-NEXT:    ret
65 entry:
66   call void @llvm.riscv.vsse.nxv2i64(
67     <vscale x 2 x i64> %0,
68     ptr %1,
69     iXLen %2,
70     iXLen %3)
72   ret void
75 declare void @llvm.riscv.vsse.mask.nxv2i64(
76   <vscale x 2 x i64>,
77   ptr,
78   iXLen,
79   <vscale x 2 x i1>,
80   iXLen);
82 define void @intrinsic_vsse_mask_v_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
83 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2i64_nxv2i64:
84 ; CHECK:       # %bb.0: # %entry
85 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
86 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
87 ; CHECK-NEXT:    ret
88 entry:
89   call void @llvm.riscv.vsse.mask.nxv2i64(
90     <vscale x 2 x i64> %0,
91     ptr %1,
92     iXLen %2,
93     <vscale x 2 x i1> %3,
94     iXLen %4)
96   ret void
99 declare void @llvm.riscv.vsse.nxv4i64(
100   <vscale x 4 x i64>,
101   ptr,
102   iXLen,
103   iXLen);
105 define void @intrinsic_vsse_v_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
106 ; CHECK-LABEL: intrinsic_vsse_v_nxv4i64_nxv4i64:
107 ; CHECK:       # %bb.0: # %entry
108 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
109 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
110 ; CHECK-NEXT:    ret
111 entry:
112   call void @llvm.riscv.vsse.nxv4i64(
113     <vscale x 4 x i64> %0,
114     ptr %1,
115     iXLen %2,
116     iXLen %3)
118   ret void
121 declare void @llvm.riscv.vsse.mask.nxv4i64(
122   <vscale x 4 x i64>,
123   ptr,
124   iXLen,
125   <vscale x 4 x i1>,
126   iXLen);
128 define void @intrinsic_vsse_mask_v_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
129 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4i64_nxv4i64:
130 ; CHECK:       # %bb.0: # %entry
131 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
132 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
133 ; CHECK-NEXT:    ret
134 entry:
135   call void @llvm.riscv.vsse.mask.nxv4i64(
136     <vscale x 4 x i64> %0,
137     ptr %1,
138     iXLen %2,
139     <vscale x 4 x i1> %3,
140     iXLen %4)
142   ret void
145 declare void @llvm.riscv.vsse.nxv8i64(
146   <vscale x 8 x i64>,
147   ptr,
148   iXLen,
149   iXLen);
151 define void @intrinsic_vsse_v_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
152 ; CHECK-LABEL: intrinsic_vsse_v_nxv8i64_nxv8i64:
153 ; CHECK:       # %bb.0: # %entry
154 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
155 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
156 ; CHECK-NEXT:    ret
157 entry:
158   call void @llvm.riscv.vsse.nxv8i64(
159     <vscale x 8 x i64> %0,
160     ptr %1,
161     iXLen %2,
162     iXLen %3)
164   ret void
167 declare void @llvm.riscv.vsse.mask.nxv8i64(
168   <vscale x 8 x i64>,
169   ptr,
170   iXLen,
171   <vscale x 8 x i1>,
172   iXLen);
174 define void @intrinsic_vsse_mask_v_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
175 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8i64_nxv8i64:
176 ; CHECK:       # %bb.0: # %entry
177 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
178 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
179 ; CHECK-NEXT:    ret
180 entry:
181   call void @llvm.riscv.vsse.mask.nxv8i64(
182     <vscale x 8 x i64> %0,
183     ptr %1,
184     iXLen %2,
185     <vscale x 8 x i1> %3,
186     iXLen %4)
188   ret void
191 declare void @llvm.riscv.vsse.nxv1f64(
192   <vscale x 1 x double>,
193   ptr,
194   iXLen,
195   iXLen);
197 define void @intrinsic_vsse_v_nxv1f64_nxv1f64(<vscale x 1 x double> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
198 ; CHECK-LABEL: intrinsic_vsse_v_nxv1f64_nxv1f64:
199 ; CHECK:       # %bb.0: # %entry
200 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
201 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
202 ; CHECK-NEXT:    ret
203 entry:
204   call void @llvm.riscv.vsse.nxv1f64(
205     <vscale x 1 x double> %0,
206     ptr %1,
207     iXLen %2,
208     iXLen %3)
210   ret void
213 declare void @llvm.riscv.vsse.mask.nxv1f64(
214   <vscale x 1 x double>,
215   ptr,
216   iXLen,
217   <vscale x 1 x i1>,
218   iXLen);
220 define void @intrinsic_vsse_mask_v_nxv1f64_nxv1f64(<vscale x 1 x double> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
221 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1f64_nxv1f64:
222 ; CHECK:       # %bb.0: # %entry
223 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
224 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
225 ; CHECK-NEXT:    ret
226 entry:
227   call void @llvm.riscv.vsse.mask.nxv1f64(
228     <vscale x 1 x double> %0,
229     ptr %1,
230     iXLen %2,
231     <vscale x 1 x i1> %3,
232     iXLen %4)
234   ret void
237 declare void @llvm.riscv.vsse.nxv2f64(
238   <vscale x 2 x double>,
239   ptr,
240   iXLen,
241   iXLen);
243 define void @intrinsic_vsse_v_nxv2f64_nxv2f64(<vscale x 2 x double> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
244 ; CHECK-LABEL: intrinsic_vsse_v_nxv2f64_nxv2f64:
245 ; CHECK:       # %bb.0: # %entry
246 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
247 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
248 ; CHECK-NEXT:    ret
249 entry:
250   call void @llvm.riscv.vsse.nxv2f64(
251     <vscale x 2 x double> %0,
252     ptr %1,
253     iXLen %2,
254     iXLen %3)
256   ret void
259 declare void @llvm.riscv.vsse.mask.nxv2f64(
260   <vscale x 2 x double>,
261   ptr,
262   iXLen,
263   <vscale x 2 x i1>,
264   iXLen);
266 define void @intrinsic_vsse_mask_v_nxv2f64_nxv2f64(<vscale x 2 x double> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
267 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2f64_nxv2f64:
268 ; CHECK:       # %bb.0: # %entry
269 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
270 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
271 ; CHECK-NEXT:    ret
272 entry:
273   call void @llvm.riscv.vsse.mask.nxv2f64(
274     <vscale x 2 x double> %0,
275     ptr %1,
276     iXLen %2,
277     <vscale x 2 x i1> %3,
278     iXLen %4)
280   ret void
283 declare void @llvm.riscv.vsse.nxv4f64(
284   <vscale x 4 x double>,
285   ptr,
286   iXLen,
287   iXLen);
289 define void @intrinsic_vsse_v_nxv4f64_nxv4f64(<vscale x 4 x double> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
290 ; CHECK-LABEL: intrinsic_vsse_v_nxv4f64_nxv4f64:
291 ; CHECK:       # %bb.0: # %entry
292 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
293 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
294 ; CHECK-NEXT:    ret
295 entry:
296   call void @llvm.riscv.vsse.nxv4f64(
297     <vscale x 4 x double> %0,
298     ptr %1,
299     iXLen %2,
300     iXLen %3)
302   ret void
305 declare void @llvm.riscv.vsse.mask.nxv4f64(
306   <vscale x 4 x double>,
307   ptr,
308   iXLen,
309   <vscale x 4 x i1>,
310   iXLen);
312 define void @intrinsic_vsse_mask_v_nxv4f64_nxv4f64(<vscale x 4 x double> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
313 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4f64_nxv4f64:
314 ; CHECK:       # %bb.0: # %entry
315 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
316 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
317 ; CHECK-NEXT:    ret
318 entry:
319   call void @llvm.riscv.vsse.mask.nxv4f64(
320     <vscale x 4 x double> %0,
321     ptr %1,
322     iXLen %2,
323     <vscale x 4 x i1> %3,
324     iXLen %4)
326   ret void
329 declare void @llvm.riscv.vsse.nxv8f64(
330   <vscale x 8 x double>,
331   ptr,
332   iXLen,
333   iXLen);
335 define void @intrinsic_vsse_v_nxv8f64_nxv8f64(<vscale x 8 x double> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
336 ; CHECK-LABEL: intrinsic_vsse_v_nxv8f64_nxv8f64:
337 ; CHECK:       # %bb.0: # %entry
338 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
339 ; CHECK-NEXT:    vsse64.v v8, (a0), a1
340 ; CHECK-NEXT:    ret
341 entry:
342   call void @llvm.riscv.vsse.nxv8f64(
343     <vscale x 8 x double> %0,
344     ptr %1,
345     iXLen %2,
346     iXLen %3)
348   ret void
351 declare void @llvm.riscv.vsse.mask.nxv8f64(
352   <vscale x 8 x double>,
353   ptr,
354   iXLen,
355   <vscale x 8 x i1>,
356   iXLen);
358 define void @intrinsic_vsse_mask_v_nxv8f64_nxv8f64(<vscale x 8 x double> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
359 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8f64_nxv8f64:
360 ; CHECK:       # %bb.0: # %entry
361 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
362 ; CHECK-NEXT:    vsse64.v v8, (a0), a1, v0.t
363 ; CHECK-NEXT:    ret
364 entry:
365   call void @llvm.riscv.vsse.mask.nxv8f64(
366     <vscale x 8 x double> %0,
367     ptr %1,
368     iXLen %2,
369     <vscale x 8 x i1> %3,
370     iXLen %4)
372   ret void
375 declare void @llvm.riscv.vsse.nxv1i32(
376   <vscale x 1 x i32>,
377   ptr,
378   iXLen,
379   iXLen);
381 define void @intrinsic_vsse_v_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
382 ; CHECK-LABEL: intrinsic_vsse_v_nxv1i32_nxv1i32:
383 ; CHECK:       # %bb.0: # %entry
384 ; CHECK-NEXT:    vsetvli zero, a2, e32, mf2, ta, ma
385 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
386 ; CHECK-NEXT:    ret
387 entry:
388   call void @llvm.riscv.vsse.nxv1i32(
389     <vscale x 1 x i32> %0,
390     ptr %1,
391     iXLen %2,
392     iXLen %3)
394   ret void
397 declare void @llvm.riscv.vsse.mask.nxv1i32(
398   <vscale x 1 x i32>,
399   ptr,
400   iXLen,
401   <vscale x 1 x i1>,
402   iXLen);
404 define void @intrinsic_vsse_mask_v_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
405 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1i32_nxv1i32:
406 ; CHECK:       # %bb.0: # %entry
407 ; CHECK-NEXT:    vsetvli zero, a2, e32, mf2, ta, ma
408 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
409 ; CHECK-NEXT:    ret
410 entry:
411   call void @llvm.riscv.vsse.mask.nxv1i32(
412     <vscale x 1 x i32> %0,
413     ptr %1,
414     iXLen %2,
415     <vscale x 1 x i1> %3,
416     iXLen %4)
418   ret void
421 declare void @llvm.riscv.vsse.nxv2i32(
422   <vscale x 2 x i32>,
423   ptr,
424   iXLen,
425   iXLen);
427 define void @intrinsic_vsse_v_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
428 ; CHECK-LABEL: intrinsic_vsse_v_nxv2i32_nxv2i32:
429 ; CHECK:       # %bb.0: # %entry
430 ; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma
431 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
432 ; CHECK-NEXT:    ret
433 entry:
434   call void @llvm.riscv.vsse.nxv2i32(
435     <vscale x 2 x i32> %0,
436     ptr %1,
437     iXLen %2,
438     iXLen %3)
440   ret void
443 declare void @llvm.riscv.vsse.mask.nxv2i32(
444   <vscale x 2 x i32>,
445   ptr,
446   iXLen,
447   <vscale x 2 x i1>,
448   iXLen);
450 define void @intrinsic_vsse_mask_v_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
451 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2i32_nxv2i32:
452 ; CHECK:       # %bb.0: # %entry
453 ; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma
454 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
455 ; CHECK-NEXT:    ret
456 entry:
457   call void @llvm.riscv.vsse.mask.nxv2i32(
458     <vscale x 2 x i32> %0,
459     ptr %1,
460     iXLen %2,
461     <vscale x 2 x i1> %3,
462     iXLen %4)
464   ret void
467 declare void @llvm.riscv.vsse.nxv4i32(
468   <vscale x 4 x i32>,
469   ptr,
470   iXLen,
471   iXLen);
473 define void @intrinsic_vsse_v_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
474 ; CHECK-LABEL: intrinsic_vsse_v_nxv4i32_nxv4i32:
475 ; CHECK:       # %bb.0: # %entry
476 ; CHECK-NEXT:    vsetvli zero, a2, e32, m2, ta, ma
477 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
478 ; CHECK-NEXT:    ret
479 entry:
480   call void @llvm.riscv.vsse.nxv4i32(
481     <vscale x 4 x i32> %0,
482     ptr %1,
483     iXLen %2,
484     iXLen %3)
486   ret void
489 declare void @llvm.riscv.vsse.mask.nxv4i32(
490   <vscale x 4 x i32>,
491   ptr,
492   iXLen,
493   <vscale x 4 x i1>,
494   iXLen);
496 define void @intrinsic_vsse_mask_v_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
497 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4i32_nxv4i32:
498 ; CHECK:       # %bb.0: # %entry
499 ; CHECK-NEXT:    vsetvli zero, a2, e32, m2, ta, ma
500 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
501 ; CHECK-NEXT:    ret
502 entry:
503   call void @llvm.riscv.vsse.mask.nxv4i32(
504     <vscale x 4 x i32> %0,
505     ptr %1,
506     iXLen %2,
507     <vscale x 4 x i1> %3,
508     iXLen %4)
510   ret void
513 declare void @llvm.riscv.vsse.nxv8i32(
514   <vscale x 8 x i32>,
515   ptr,
516   iXLen,
517   iXLen);
519 define void @intrinsic_vsse_v_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
520 ; CHECK-LABEL: intrinsic_vsse_v_nxv8i32_nxv8i32:
521 ; CHECK:       # %bb.0: # %entry
522 ; CHECK-NEXT:    vsetvli zero, a2, e32, m4, ta, ma
523 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
524 ; CHECK-NEXT:    ret
525 entry:
526   call void @llvm.riscv.vsse.nxv8i32(
527     <vscale x 8 x i32> %0,
528     ptr %1,
529     iXLen %2,
530     iXLen %3)
532   ret void
535 declare void @llvm.riscv.vsse.mask.nxv8i32(
536   <vscale x 8 x i32>,
537   ptr,
538   iXLen,
539   <vscale x 8 x i1>,
540   iXLen);
542 define void @intrinsic_vsse_mask_v_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
543 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8i32_nxv8i32:
544 ; CHECK:       # %bb.0: # %entry
545 ; CHECK-NEXT:    vsetvli zero, a2, e32, m4, ta, ma
546 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
547 ; CHECK-NEXT:    ret
548 entry:
549   call void @llvm.riscv.vsse.mask.nxv8i32(
550     <vscale x 8 x i32> %0,
551     ptr %1,
552     iXLen %2,
553     <vscale x 8 x i1> %3,
554     iXLen %4)
556   ret void
559 declare void @llvm.riscv.vsse.nxv16i32(
560   <vscale x 16 x i32>,
561   ptr,
562   iXLen,
563   iXLen);
565 define void @intrinsic_vsse_v_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
566 ; CHECK-LABEL: intrinsic_vsse_v_nxv16i32_nxv16i32:
567 ; CHECK:       # %bb.0: # %entry
568 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
569 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
570 ; CHECK-NEXT:    ret
571 entry:
572   call void @llvm.riscv.vsse.nxv16i32(
573     <vscale x 16 x i32> %0,
574     ptr %1,
575     iXLen %2,
576     iXLen %3)
578   ret void
581 declare void @llvm.riscv.vsse.mask.nxv16i32(
582   <vscale x 16 x i32>,
583   ptr,
584   iXLen,
585   <vscale x 16 x i1>,
586   iXLen);
588 define void @intrinsic_vsse_mask_v_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, ptr %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
589 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv16i32_nxv16i32:
590 ; CHECK:       # %bb.0: # %entry
591 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
592 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
593 ; CHECK-NEXT:    ret
594 entry:
595   call void @llvm.riscv.vsse.mask.nxv16i32(
596     <vscale x 16 x i32> %0,
597     ptr %1,
598     iXLen %2,
599     <vscale x 16 x i1> %3,
600     iXLen %4)
602   ret void
605 declare void @llvm.riscv.vsse.nxv1f32(
606   <vscale x 1 x float>,
607   ptr,
608   iXLen,
609   iXLen);
611 define void @intrinsic_vsse_v_nxv1f32_nxv1f32(<vscale x 1 x float> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
612 ; CHECK-LABEL: intrinsic_vsse_v_nxv1f32_nxv1f32:
613 ; CHECK:       # %bb.0: # %entry
614 ; CHECK-NEXT:    vsetvli zero, a2, e32, mf2, ta, ma
615 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
616 ; CHECK-NEXT:    ret
617 entry:
618   call void @llvm.riscv.vsse.nxv1f32(
619     <vscale x 1 x float> %0,
620     ptr %1,
621     iXLen %2,
622     iXLen %3)
624   ret void
627 declare void @llvm.riscv.vsse.mask.nxv1f32(
628   <vscale x 1 x float>,
629   ptr,
630   iXLen,
631   <vscale x 1 x i1>,
632   iXLen);
634 define void @intrinsic_vsse_mask_v_nxv1f32_nxv1f32(<vscale x 1 x float> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
635 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1f32_nxv1f32:
636 ; CHECK:       # %bb.0: # %entry
637 ; CHECK-NEXT:    vsetvli zero, a2, e32, mf2, ta, ma
638 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
639 ; CHECK-NEXT:    ret
640 entry:
641   call void @llvm.riscv.vsse.mask.nxv1f32(
642     <vscale x 1 x float> %0,
643     ptr %1,
644     iXLen %2,
645     <vscale x 1 x i1> %3,
646     iXLen %4)
648   ret void
651 declare void @llvm.riscv.vsse.nxv2f32(
652   <vscale x 2 x float>,
653   ptr,
654   iXLen,
655   iXLen);
657 define void @intrinsic_vsse_v_nxv2f32_nxv2f32(<vscale x 2 x float> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
658 ; CHECK-LABEL: intrinsic_vsse_v_nxv2f32_nxv2f32:
659 ; CHECK:       # %bb.0: # %entry
660 ; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma
661 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
662 ; CHECK-NEXT:    ret
663 entry:
664   call void @llvm.riscv.vsse.nxv2f32(
665     <vscale x 2 x float> %0,
666     ptr %1,
667     iXLen %2,
668     iXLen %3)
670   ret void
673 declare void @llvm.riscv.vsse.mask.nxv2f32(
674   <vscale x 2 x float>,
675   ptr,
676   iXLen,
677   <vscale x 2 x i1>,
678   iXLen);
680 define void @intrinsic_vsse_mask_v_nxv2f32_nxv2f32(<vscale x 2 x float> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
681 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2f32_nxv2f32:
682 ; CHECK:       # %bb.0: # %entry
683 ; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma
684 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
685 ; CHECK-NEXT:    ret
686 entry:
687   call void @llvm.riscv.vsse.mask.nxv2f32(
688     <vscale x 2 x float> %0,
689     ptr %1,
690     iXLen %2,
691     <vscale x 2 x i1> %3,
692     iXLen %4)
694   ret void
697 declare void @llvm.riscv.vsse.nxv4f32(
698   <vscale x 4 x float>,
699   ptr,
700   iXLen,
701   iXLen);
703 define void @intrinsic_vsse_v_nxv4f32_nxv4f32(<vscale x 4 x float> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
704 ; CHECK-LABEL: intrinsic_vsse_v_nxv4f32_nxv4f32:
705 ; CHECK:       # %bb.0: # %entry
706 ; CHECK-NEXT:    vsetvli zero, a2, e32, m2, ta, ma
707 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
708 ; CHECK-NEXT:    ret
709 entry:
710   call void @llvm.riscv.vsse.nxv4f32(
711     <vscale x 4 x float> %0,
712     ptr %1,
713     iXLen %2,
714     iXLen %3)
716   ret void
719 declare void @llvm.riscv.vsse.mask.nxv4f32(
720   <vscale x 4 x float>,
721   ptr,
722   iXLen,
723   <vscale x 4 x i1>,
724   iXLen);
726 define void @intrinsic_vsse_mask_v_nxv4f32_nxv4f32(<vscale x 4 x float> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
727 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4f32_nxv4f32:
728 ; CHECK:       # %bb.0: # %entry
729 ; CHECK-NEXT:    vsetvli zero, a2, e32, m2, ta, ma
730 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
731 ; CHECK-NEXT:    ret
732 entry:
733   call void @llvm.riscv.vsse.mask.nxv4f32(
734     <vscale x 4 x float> %0,
735     ptr %1,
736     iXLen %2,
737     <vscale x 4 x i1> %3,
738     iXLen %4)
740   ret void
743 declare void @llvm.riscv.vsse.nxv8f32(
744   <vscale x 8 x float>,
745   ptr,
746   iXLen,
747   iXLen);
749 define void @intrinsic_vsse_v_nxv8f32_nxv8f32(<vscale x 8 x float> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
750 ; CHECK-LABEL: intrinsic_vsse_v_nxv8f32_nxv8f32:
751 ; CHECK:       # %bb.0: # %entry
752 ; CHECK-NEXT:    vsetvli zero, a2, e32, m4, ta, ma
753 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
754 ; CHECK-NEXT:    ret
755 entry:
756   call void @llvm.riscv.vsse.nxv8f32(
757     <vscale x 8 x float> %0,
758     ptr %1,
759     iXLen %2,
760     iXLen %3)
762   ret void
765 declare void @llvm.riscv.vsse.mask.nxv8f32(
766   <vscale x 8 x float>,
767   ptr,
768   iXLen,
769   <vscale x 8 x i1>,
770   iXLen);
772 define void @intrinsic_vsse_mask_v_nxv8f32_nxv8f32(<vscale x 8 x float> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
773 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8f32_nxv8f32:
774 ; CHECK:       # %bb.0: # %entry
775 ; CHECK-NEXT:    vsetvli zero, a2, e32, m4, ta, ma
776 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
777 ; CHECK-NEXT:    ret
778 entry:
779   call void @llvm.riscv.vsse.mask.nxv8f32(
780     <vscale x 8 x float> %0,
781     ptr %1,
782     iXLen %2,
783     <vscale x 8 x i1> %3,
784     iXLen %4)
786   ret void
789 declare void @llvm.riscv.vsse.nxv16f32(
790   <vscale x 16 x float>,
791   ptr,
792   iXLen,
793   iXLen);
795 define void @intrinsic_vsse_v_nxv16f32_nxv16f32(<vscale x 16 x float> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
796 ; CHECK-LABEL: intrinsic_vsse_v_nxv16f32_nxv16f32:
797 ; CHECK:       # %bb.0: # %entry
798 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
799 ; CHECK-NEXT:    vsse32.v v8, (a0), a1
800 ; CHECK-NEXT:    ret
801 entry:
802   call void @llvm.riscv.vsse.nxv16f32(
803     <vscale x 16 x float> %0,
804     ptr %1,
805     iXLen %2,
806     iXLen %3)
808   ret void
811 declare void @llvm.riscv.vsse.mask.nxv16f32(
812   <vscale x 16 x float>,
813   ptr,
814   iXLen,
815   <vscale x 16 x i1>,
816   iXLen);
818 define void @intrinsic_vsse_mask_v_nxv16f32_nxv16f32(<vscale x 16 x float> %0, ptr %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
819 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv16f32_nxv16f32:
820 ; CHECK:       # %bb.0: # %entry
821 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
822 ; CHECK-NEXT:    vsse32.v v8, (a0), a1, v0.t
823 ; CHECK-NEXT:    ret
824 entry:
825   call void @llvm.riscv.vsse.mask.nxv16f32(
826     <vscale x 16 x float> %0,
827     ptr %1,
828     iXLen %2,
829     <vscale x 16 x i1> %3,
830     iXLen %4)
832   ret void
835 declare void @llvm.riscv.vsse.nxv1i16(
836   <vscale x 1 x i16>,
837   ptr,
838   iXLen,
839   iXLen);
841 define void @intrinsic_vsse_v_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
842 ; CHECK-LABEL: intrinsic_vsse_v_nxv1i16_nxv1i16:
843 ; CHECK:       # %bb.0: # %entry
844 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf4, ta, ma
845 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
846 ; CHECK-NEXT:    ret
847 entry:
848   call void @llvm.riscv.vsse.nxv1i16(
849     <vscale x 1 x i16> %0,
850     ptr %1,
851     iXLen %2,
852     iXLen %3)
854   ret void
857 declare void @llvm.riscv.vsse.mask.nxv1i16(
858   <vscale x 1 x i16>,
859   ptr,
860   iXLen,
861   <vscale x 1 x i1>,
862   iXLen);
864 define void @intrinsic_vsse_mask_v_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
865 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1i16_nxv1i16:
866 ; CHECK:       # %bb.0: # %entry
867 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf4, ta, ma
868 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
869 ; CHECK-NEXT:    ret
870 entry:
871   call void @llvm.riscv.vsse.mask.nxv1i16(
872     <vscale x 1 x i16> %0,
873     ptr %1,
874     iXLen %2,
875     <vscale x 1 x i1> %3,
876     iXLen %4)
878   ret void
881 declare void @llvm.riscv.vsse.nxv2i16(
882   <vscale x 2 x i16>,
883   ptr,
884   iXLen,
885   iXLen);
887 define void @intrinsic_vsse_v_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
888 ; CHECK-LABEL: intrinsic_vsse_v_nxv2i16_nxv2i16:
889 ; CHECK:       # %bb.0: # %entry
890 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf2, ta, ma
891 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
892 ; CHECK-NEXT:    ret
893 entry:
894   call void @llvm.riscv.vsse.nxv2i16(
895     <vscale x 2 x i16> %0,
896     ptr %1,
897     iXLen %2,
898     iXLen %3)
900   ret void
903 declare void @llvm.riscv.vsse.mask.nxv2i16(
904   <vscale x 2 x i16>,
905   ptr,
906   iXLen,
907   <vscale x 2 x i1>,
908   iXLen);
910 define void @intrinsic_vsse_mask_v_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
911 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2i16_nxv2i16:
912 ; CHECK:       # %bb.0: # %entry
913 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf2, ta, ma
914 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
915 ; CHECK-NEXT:    ret
916 entry:
917   call void @llvm.riscv.vsse.mask.nxv2i16(
918     <vscale x 2 x i16> %0,
919     ptr %1,
920     iXLen %2,
921     <vscale x 2 x i1> %3,
922     iXLen %4)
924   ret void
927 declare void @llvm.riscv.vsse.nxv4i16(
928   <vscale x 4 x i16>,
929   ptr,
930   iXLen,
931   iXLen);
933 define void @intrinsic_vsse_v_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
934 ; CHECK-LABEL: intrinsic_vsse_v_nxv4i16_nxv4i16:
935 ; CHECK:       # %bb.0: # %entry
936 ; CHECK-NEXT:    vsetvli zero, a2, e16, m1, ta, ma
937 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
938 ; CHECK-NEXT:    ret
939 entry:
940   call void @llvm.riscv.vsse.nxv4i16(
941     <vscale x 4 x i16> %0,
942     ptr %1,
943     iXLen %2,
944     iXLen %3)
946   ret void
949 declare void @llvm.riscv.vsse.mask.nxv4i16(
950   <vscale x 4 x i16>,
951   ptr,
952   iXLen,
953   <vscale x 4 x i1>,
954   iXLen);
956 define void @intrinsic_vsse_mask_v_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
957 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4i16_nxv4i16:
958 ; CHECK:       # %bb.0: # %entry
959 ; CHECK-NEXT:    vsetvli zero, a2, e16, m1, ta, ma
960 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
961 ; CHECK-NEXT:    ret
962 entry:
963   call void @llvm.riscv.vsse.mask.nxv4i16(
964     <vscale x 4 x i16> %0,
965     ptr %1,
966     iXLen %2,
967     <vscale x 4 x i1> %3,
968     iXLen %4)
970   ret void
973 declare void @llvm.riscv.vsse.nxv8i16(
974   <vscale x 8 x i16>,
975   ptr,
976   iXLen,
977   iXLen);
979 define void @intrinsic_vsse_v_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
980 ; CHECK-LABEL: intrinsic_vsse_v_nxv8i16_nxv8i16:
981 ; CHECK:       # %bb.0: # %entry
982 ; CHECK-NEXT:    vsetvli zero, a2, e16, m2, ta, ma
983 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
984 ; CHECK-NEXT:    ret
985 entry:
986   call void @llvm.riscv.vsse.nxv8i16(
987     <vscale x 8 x i16> %0,
988     ptr %1,
989     iXLen %2,
990     iXLen %3)
992   ret void
995 declare void @llvm.riscv.vsse.mask.nxv8i16(
996   <vscale x 8 x i16>,
997   ptr,
998   iXLen,
999   <vscale x 8 x i1>,
1000   iXLen);
1002 define void @intrinsic_vsse_mask_v_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
1003 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8i16_nxv8i16:
1004 ; CHECK:       # %bb.0: # %entry
1005 ; CHECK-NEXT:    vsetvli zero, a2, e16, m2, ta, ma
1006 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1007 ; CHECK-NEXT:    ret
1008 entry:
1009   call void @llvm.riscv.vsse.mask.nxv8i16(
1010     <vscale x 8 x i16> %0,
1011     ptr %1,
1012     iXLen %2,
1013     <vscale x 8 x i1> %3,
1014     iXLen %4)
1016   ret void
1019 declare void @llvm.riscv.vsse.nxv16i16(
1020   <vscale x 16 x i16>,
1021   ptr,
1022   iXLen,
1023   iXLen);
1025 define void @intrinsic_vsse_v_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1026 ; CHECK-LABEL: intrinsic_vsse_v_nxv16i16_nxv16i16:
1027 ; CHECK:       # %bb.0: # %entry
1028 ; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1029 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1030 ; CHECK-NEXT:    ret
1031 entry:
1032   call void @llvm.riscv.vsse.nxv16i16(
1033     <vscale x 16 x i16> %0,
1034     ptr %1,
1035     iXLen %2,
1036     iXLen %3)
1038   ret void
1041 declare void @llvm.riscv.vsse.mask.nxv16i16(
1042   <vscale x 16 x i16>,
1043   ptr,
1044   iXLen,
1045   <vscale x 16 x i1>,
1046   iXLen);
1048 define void @intrinsic_vsse_mask_v_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, ptr %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
1049 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv16i16_nxv16i16:
1050 ; CHECK:       # %bb.0: # %entry
1051 ; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1052 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1053 ; CHECK-NEXT:    ret
1054 entry:
1055   call void @llvm.riscv.vsse.mask.nxv16i16(
1056     <vscale x 16 x i16> %0,
1057     ptr %1,
1058     iXLen %2,
1059     <vscale x 16 x i1> %3,
1060     iXLen %4)
1062   ret void
1065 declare void @llvm.riscv.vsse.nxv32i16(
1066   <vscale x 32 x i16>,
1067   ptr,
1068   iXLen,
1069   iXLen);
1071 define void @intrinsic_vsse_v_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1072 ; CHECK-LABEL: intrinsic_vsse_v_nxv32i16_nxv32i16:
1073 ; CHECK:       # %bb.0: # %entry
1074 ; CHECK-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1075 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1076 ; CHECK-NEXT:    ret
1077 entry:
1078   call void @llvm.riscv.vsse.nxv32i16(
1079     <vscale x 32 x i16> %0,
1080     ptr %1,
1081     iXLen %2,
1082     iXLen %3)
1084   ret void
1087 declare void @llvm.riscv.vsse.mask.nxv32i16(
1088   <vscale x 32 x i16>,
1089   ptr,
1090   iXLen,
1091   <vscale x 32 x i1>,
1092   iXLen);
1094 define void @intrinsic_vsse_mask_v_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, ptr %1, iXLen %2, <vscale x 32 x i1> %3, iXLen %4) nounwind {
1095 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv32i16_nxv32i16:
1096 ; CHECK:       # %bb.0: # %entry
1097 ; CHECK-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1098 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1099 ; CHECK-NEXT:    ret
1100 entry:
1101   call void @llvm.riscv.vsse.mask.nxv32i16(
1102     <vscale x 32 x i16> %0,
1103     ptr %1,
1104     iXLen %2,
1105     <vscale x 32 x i1> %3,
1106     iXLen %4)
1108   ret void
1111 declare void @llvm.riscv.vsse.nxv1f16(
1112   <vscale x 1 x half>,
1113   ptr,
1114   iXLen,
1115   iXLen);
1117 define void @intrinsic_vsse_v_nxv1f16_nxv1f16(<vscale x 1 x half> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1118 ; CHECK-LABEL: intrinsic_vsse_v_nxv1f16_nxv1f16:
1119 ; CHECK:       # %bb.0: # %entry
1120 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf4, ta, ma
1121 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1122 ; CHECK-NEXT:    ret
1123 entry:
1124   call void @llvm.riscv.vsse.nxv1f16(
1125     <vscale x 1 x half> %0,
1126     ptr %1,
1127     iXLen %2,
1128     iXLen %3)
1130   ret void
1133 declare void @llvm.riscv.vsse.mask.nxv1f16(
1134   <vscale x 1 x half>,
1135   ptr,
1136   iXLen,
1137   <vscale x 1 x i1>,
1138   iXLen);
1140 define void @intrinsic_vsse_mask_v_nxv1f16_nxv1f16(<vscale x 1 x half> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
1141 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1f16_nxv1f16:
1142 ; CHECK:       # %bb.0: # %entry
1143 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf4, ta, ma
1144 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1145 ; CHECK-NEXT:    ret
1146 entry:
1147   call void @llvm.riscv.vsse.mask.nxv1f16(
1148     <vscale x 1 x half> %0,
1149     ptr %1,
1150     iXLen %2,
1151     <vscale x 1 x i1> %3,
1152     iXLen %4)
1154   ret void
1157 declare void @llvm.riscv.vsse.nxv2f16(
1158   <vscale x 2 x half>,
1159   ptr,
1160   iXLen,
1161   iXLen);
1163 define void @intrinsic_vsse_v_nxv2f16_nxv2f16(<vscale x 2 x half> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1164 ; CHECK-LABEL: intrinsic_vsse_v_nxv2f16_nxv2f16:
1165 ; CHECK:       # %bb.0: # %entry
1166 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf2, ta, ma
1167 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1168 ; CHECK-NEXT:    ret
1169 entry:
1170   call void @llvm.riscv.vsse.nxv2f16(
1171     <vscale x 2 x half> %0,
1172     ptr %1,
1173     iXLen %2,
1174     iXLen %3)
1176   ret void
1179 declare void @llvm.riscv.vsse.mask.nxv2f16(
1180   <vscale x 2 x half>,
1181   ptr,
1182   iXLen,
1183   <vscale x 2 x i1>,
1184   iXLen);
1186 define void @intrinsic_vsse_mask_v_nxv2f16_nxv2f16(<vscale x 2 x half> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
1187 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2f16_nxv2f16:
1188 ; CHECK:       # %bb.0: # %entry
1189 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf2, ta, ma
1190 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1191 ; CHECK-NEXT:    ret
1192 entry:
1193   call void @llvm.riscv.vsse.mask.nxv2f16(
1194     <vscale x 2 x half> %0,
1195     ptr %1,
1196     iXLen %2,
1197     <vscale x 2 x i1> %3,
1198     iXLen %4)
1200   ret void
1203 declare void @llvm.riscv.vsse.nxv4f16(
1204   <vscale x 4 x half>,
1205   ptr,
1206   iXLen,
1207   iXLen);
1209 define void @intrinsic_vsse_v_nxv4f16_nxv4f16(<vscale x 4 x half> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1210 ; CHECK-LABEL: intrinsic_vsse_v_nxv4f16_nxv4f16:
1211 ; CHECK:       # %bb.0: # %entry
1212 ; CHECK-NEXT:    vsetvli zero, a2, e16, m1, ta, ma
1213 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1214 ; CHECK-NEXT:    ret
1215 entry:
1216   call void @llvm.riscv.vsse.nxv4f16(
1217     <vscale x 4 x half> %0,
1218     ptr %1,
1219     iXLen %2,
1220     iXLen %3)
1222   ret void
1225 declare void @llvm.riscv.vsse.mask.nxv4f16(
1226   <vscale x 4 x half>,
1227   ptr,
1228   iXLen,
1229   <vscale x 4 x i1>,
1230   iXLen);
1232 define void @intrinsic_vsse_mask_v_nxv4f16_nxv4f16(<vscale x 4 x half> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
1233 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4f16_nxv4f16:
1234 ; CHECK:       # %bb.0: # %entry
1235 ; CHECK-NEXT:    vsetvli zero, a2, e16, m1, ta, ma
1236 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1237 ; CHECK-NEXT:    ret
1238 entry:
1239   call void @llvm.riscv.vsse.mask.nxv4f16(
1240     <vscale x 4 x half> %0,
1241     ptr %1,
1242     iXLen %2,
1243     <vscale x 4 x i1> %3,
1244     iXLen %4)
1246   ret void
1249 declare void @llvm.riscv.vsse.nxv8f16(
1250   <vscale x 8 x half>,
1251   ptr,
1252   iXLen,
1253   iXLen);
1255 define void @intrinsic_vsse_v_nxv8f16_nxv8f16(<vscale x 8 x half> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1256 ; CHECK-LABEL: intrinsic_vsse_v_nxv8f16_nxv8f16:
1257 ; CHECK:       # %bb.0: # %entry
1258 ; CHECK-NEXT:    vsetvli zero, a2, e16, m2, ta, ma
1259 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1260 ; CHECK-NEXT:    ret
1261 entry:
1262   call void @llvm.riscv.vsse.nxv8f16(
1263     <vscale x 8 x half> %0,
1264     ptr %1,
1265     iXLen %2,
1266     iXLen %3)
1268   ret void
1271 declare void @llvm.riscv.vsse.mask.nxv8f16(
1272   <vscale x 8 x half>,
1273   ptr,
1274   iXLen,
1275   <vscale x 8 x i1>,
1276   iXLen);
1278 define void @intrinsic_vsse_mask_v_nxv8f16_nxv8f16(<vscale x 8 x half> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
1279 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8f16_nxv8f16:
1280 ; CHECK:       # %bb.0: # %entry
1281 ; CHECK-NEXT:    vsetvli zero, a2, e16, m2, ta, ma
1282 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1283 ; CHECK-NEXT:    ret
1284 entry:
1285   call void @llvm.riscv.vsse.mask.nxv8f16(
1286     <vscale x 8 x half> %0,
1287     ptr %1,
1288     iXLen %2,
1289     <vscale x 8 x i1> %3,
1290     iXLen %4)
1292   ret void
1295 declare void @llvm.riscv.vsse.nxv16f16(
1296   <vscale x 16 x half>,
1297   ptr,
1298   iXLen,
1299   iXLen);
1301 define void @intrinsic_vsse_v_nxv16f16_nxv16f16(<vscale x 16 x half> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1302 ; CHECK-LABEL: intrinsic_vsse_v_nxv16f16_nxv16f16:
1303 ; CHECK:       # %bb.0: # %entry
1304 ; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1305 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1306 ; CHECK-NEXT:    ret
1307 entry:
1308   call void @llvm.riscv.vsse.nxv16f16(
1309     <vscale x 16 x half> %0,
1310     ptr %1,
1311     iXLen %2,
1312     iXLen %3)
1314   ret void
1317 declare void @llvm.riscv.vsse.mask.nxv16f16(
1318   <vscale x 16 x half>,
1319   ptr,
1320   iXLen,
1321   <vscale x 16 x i1>,
1322   iXLen);
1324 define void @intrinsic_vsse_mask_v_nxv16f16_nxv16f16(<vscale x 16 x half> %0, ptr %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
1325 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv16f16_nxv16f16:
1326 ; CHECK:       # %bb.0: # %entry
1327 ; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
1328 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1329 ; CHECK-NEXT:    ret
1330 entry:
1331   call void @llvm.riscv.vsse.mask.nxv16f16(
1332     <vscale x 16 x half> %0,
1333     ptr %1,
1334     iXLen %2,
1335     <vscale x 16 x i1> %3,
1336     iXLen %4)
1338   ret void
1341 declare void @llvm.riscv.vsse.nxv32f16(
1342   <vscale x 32 x half>,
1343   ptr,
1344   iXLen,
1345   iXLen);
1347 define void @intrinsic_vsse_v_nxv32f16_nxv32f16(<vscale x 32 x half> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1348 ; CHECK-LABEL: intrinsic_vsse_v_nxv32f16_nxv32f16:
1349 ; CHECK:       # %bb.0: # %entry
1350 ; CHECK-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1351 ; CHECK-NEXT:    vsse16.v v8, (a0), a1
1352 ; CHECK-NEXT:    ret
1353 entry:
1354   call void @llvm.riscv.vsse.nxv32f16(
1355     <vscale x 32 x half> %0,
1356     ptr %1,
1357     iXLen %2,
1358     iXLen %3)
1360   ret void
1363 declare void @llvm.riscv.vsse.mask.nxv32f16(
1364   <vscale x 32 x half>,
1365   ptr,
1366   iXLen,
1367   <vscale x 32 x i1>,
1368   iXLen);
1370 define void @intrinsic_vsse_mask_v_nxv32f16_nxv32f16(<vscale x 32 x half> %0, ptr %1, iXLen %2, <vscale x 32 x i1> %3, iXLen %4) nounwind {
1371 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv32f16_nxv32f16:
1372 ; CHECK:       # %bb.0: # %entry
1373 ; CHECK-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1374 ; CHECK-NEXT:    vsse16.v v8, (a0), a1, v0.t
1375 ; CHECK-NEXT:    ret
1376 entry:
1377   call void @llvm.riscv.vsse.mask.nxv32f16(
1378     <vscale x 32 x half> %0,
1379     ptr %1,
1380     iXLen %2,
1381     <vscale x 32 x i1> %3,
1382     iXLen %4)
1384   ret void
1387 declare void @llvm.riscv.vsse.nxv1i8(
1388   <vscale x 1 x i8>,
1389   ptr,
1390   iXLen,
1391   iXLen);
1393 define void @intrinsic_vsse_v_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1394 ; CHECK-LABEL: intrinsic_vsse_v_nxv1i8_nxv1i8:
1395 ; CHECK:       # %bb.0: # %entry
1396 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf8, ta, ma
1397 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1398 ; CHECK-NEXT:    ret
1399 entry:
1400   call void @llvm.riscv.vsse.nxv1i8(
1401     <vscale x 1 x i8> %0,
1402     ptr %1,
1403     iXLen %2,
1404     iXLen %3)
1406   ret void
1409 declare void @llvm.riscv.vsse.mask.nxv1i8(
1410   <vscale x 1 x i8>,
1411   ptr,
1412   iXLen,
1413   <vscale x 1 x i1>,
1414   iXLen);
1416 define void @intrinsic_vsse_mask_v_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, ptr %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
1417 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv1i8_nxv1i8:
1418 ; CHECK:       # %bb.0: # %entry
1419 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf8, ta, ma
1420 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1421 ; CHECK-NEXT:    ret
1422 entry:
1423   call void @llvm.riscv.vsse.mask.nxv1i8(
1424     <vscale x 1 x i8> %0,
1425     ptr %1,
1426     iXLen %2,
1427     <vscale x 1 x i1> %3,
1428     iXLen %4)
1430   ret void
1433 declare void @llvm.riscv.vsse.nxv2i8(
1434   <vscale x 2 x i8>,
1435   ptr,
1436   iXLen,
1437   iXLen);
1439 define void @intrinsic_vsse_v_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1440 ; CHECK-LABEL: intrinsic_vsse_v_nxv2i8_nxv2i8:
1441 ; CHECK:       # %bb.0: # %entry
1442 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf4, ta, ma
1443 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1444 ; CHECK-NEXT:    ret
1445 entry:
1446   call void @llvm.riscv.vsse.nxv2i8(
1447     <vscale x 2 x i8> %0,
1448     ptr %1,
1449     iXLen %2,
1450     iXLen %3)
1452   ret void
1455 declare void @llvm.riscv.vsse.mask.nxv2i8(
1456   <vscale x 2 x i8>,
1457   ptr,
1458   iXLen,
1459   <vscale x 2 x i1>,
1460   iXLen);
1462 define void @intrinsic_vsse_mask_v_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, ptr %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
1463 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv2i8_nxv2i8:
1464 ; CHECK:       # %bb.0: # %entry
1465 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf4, ta, ma
1466 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1467 ; CHECK-NEXT:    ret
1468 entry:
1469   call void @llvm.riscv.vsse.mask.nxv2i8(
1470     <vscale x 2 x i8> %0,
1471     ptr %1,
1472     iXLen %2,
1473     <vscale x 2 x i1> %3,
1474     iXLen %4)
1476   ret void
1479 declare void @llvm.riscv.vsse.nxv4i8(
1480   <vscale x 4 x i8>,
1481   ptr,
1482   iXLen,
1483   iXLen);
1485 define void @intrinsic_vsse_v_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1486 ; CHECK-LABEL: intrinsic_vsse_v_nxv4i8_nxv4i8:
1487 ; CHECK:       # %bb.0: # %entry
1488 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf2, ta, ma
1489 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1490 ; CHECK-NEXT:    ret
1491 entry:
1492   call void @llvm.riscv.vsse.nxv4i8(
1493     <vscale x 4 x i8> %0,
1494     ptr %1,
1495     iXLen %2,
1496     iXLen %3)
1498   ret void
1501 declare void @llvm.riscv.vsse.mask.nxv4i8(
1502   <vscale x 4 x i8>,
1503   ptr,
1504   iXLen,
1505   <vscale x 4 x i1>,
1506   iXLen);
1508 define void @intrinsic_vsse_mask_v_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, ptr %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
1509 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv4i8_nxv4i8:
1510 ; CHECK:       # %bb.0: # %entry
1511 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf2, ta, ma
1512 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1513 ; CHECK-NEXT:    ret
1514 entry:
1515   call void @llvm.riscv.vsse.mask.nxv4i8(
1516     <vscale x 4 x i8> %0,
1517     ptr %1,
1518     iXLen %2,
1519     <vscale x 4 x i1> %3,
1520     iXLen %4)
1522   ret void
1525 declare void @llvm.riscv.vsse.nxv8i8(
1526   <vscale x 8 x i8>,
1527   ptr,
1528   iXLen,
1529   iXLen);
1531 define void @intrinsic_vsse_v_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1532 ; CHECK-LABEL: intrinsic_vsse_v_nxv8i8_nxv8i8:
1533 ; CHECK:       # %bb.0: # %entry
1534 ; CHECK-NEXT:    vsetvli zero, a2, e8, m1, ta, ma
1535 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1536 ; CHECK-NEXT:    ret
1537 entry:
1538   call void @llvm.riscv.vsse.nxv8i8(
1539     <vscale x 8 x i8> %0,
1540     ptr %1,
1541     iXLen %2,
1542     iXLen %3)
1544   ret void
1547 declare void @llvm.riscv.vsse.mask.nxv8i8(
1548   <vscale x 8 x i8>,
1549   ptr,
1550   iXLen,
1551   <vscale x 8 x i1>,
1552   iXLen);
1554 define void @intrinsic_vsse_mask_v_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, ptr %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
1555 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv8i8_nxv8i8:
1556 ; CHECK:       # %bb.0: # %entry
1557 ; CHECK-NEXT:    vsetvli zero, a2, e8, m1, ta, ma
1558 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1559 ; CHECK-NEXT:    ret
1560 entry:
1561   call void @llvm.riscv.vsse.mask.nxv8i8(
1562     <vscale x 8 x i8> %0,
1563     ptr %1,
1564     iXLen %2,
1565     <vscale x 8 x i1> %3,
1566     iXLen %4)
1568   ret void
1571 declare void @llvm.riscv.vsse.nxv16i8(
1572   <vscale x 16 x i8>,
1573   ptr,
1574   iXLen,
1575   iXLen);
1577 define void @intrinsic_vsse_v_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1578 ; CHECK-LABEL: intrinsic_vsse_v_nxv16i8_nxv16i8:
1579 ; CHECK:       # %bb.0: # %entry
1580 ; CHECK-NEXT:    vsetvli zero, a2, e8, m2, ta, ma
1581 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1582 ; CHECK-NEXT:    ret
1583 entry:
1584   call void @llvm.riscv.vsse.nxv16i8(
1585     <vscale x 16 x i8> %0,
1586     ptr %1,
1587     iXLen %2,
1588     iXLen %3)
1590   ret void
1593 declare void @llvm.riscv.vsse.mask.nxv16i8(
1594   <vscale x 16 x i8>,
1595   ptr,
1596   iXLen,
1597   <vscale x 16 x i1>,
1598   iXLen);
1600 define void @intrinsic_vsse_mask_v_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, ptr %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
1601 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv16i8_nxv16i8:
1602 ; CHECK:       # %bb.0: # %entry
1603 ; CHECK-NEXT:    vsetvli zero, a2, e8, m2, ta, ma
1604 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1605 ; CHECK-NEXT:    ret
1606 entry:
1607   call void @llvm.riscv.vsse.mask.nxv16i8(
1608     <vscale x 16 x i8> %0,
1609     ptr %1,
1610     iXLen %2,
1611     <vscale x 16 x i1> %3,
1612     iXLen %4)
1614   ret void
1617 declare void @llvm.riscv.vsse.nxv32i8(
1618   <vscale x 32 x i8>,
1619   ptr,
1620   iXLen,
1621   iXLen);
1623 define void @intrinsic_vsse_v_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1624 ; CHECK-LABEL: intrinsic_vsse_v_nxv32i8_nxv32i8:
1625 ; CHECK:       # %bb.0: # %entry
1626 ; CHECK-NEXT:    vsetvli zero, a2, e8, m4, ta, ma
1627 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1628 ; CHECK-NEXT:    ret
1629 entry:
1630   call void @llvm.riscv.vsse.nxv32i8(
1631     <vscale x 32 x i8> %0,
1632     ptr %1,
1633     iXLen %2,
1634     iXLen %3)
1636   ret void
1639 declare void @llvm.riscv.vsse.mask.nxv32i8(
1640   <vscale x 32 x i8>,
1641   ptr,
1642   iXLen,
1643   <vscale x 32 x i1>,
1644   iXLen);
1646 define void @intrinsic_vsse_mask_v_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, ptr %1, iXLen %2, <vscale x 32 x i1> %3, iXLen %4) nounwind {
1647 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv32i8_nxv32i8:
1648 ; CHECK:       # %bb.0: # %entry
1649 ; CHECK-NEXT:    vsetvli zero, a2, e8, m4, ta, ma
1650 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1651 ; CHECK-NEXT:    ret
1652 entry:
1653   call void @llvm.riscv.vsse.mask.nxv32i8(
1654     <vscale x 32 x i8> %0,
1655     ptr %1,
1656     iXLen %2,
1657     <vscale x 32 x i1> %3,
1658     iXLen %4)
1660   ret void
1663 declare void @llvm.riscv.vsse.nxv64i8(
1664   <vscale x 64 x i8>,
1665   ptr,
1666   iXLen,
1667   iXLen);
1669 define void @intrinsic_vsse_v_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, ptr %1, iXLen %2, iXLen %3) nounwind {
1670 ; CHECK-LABEL: intrinsic_vsse_v_nxv64i8_nxv64i8:
1671 ; CHECK:       # %bb.0: # %entry
1672 ; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
1673 ; CHECK-NEXT:    vsse8.v v8, (a0), a1
1674 ; CHECK-NEXT:    ret
1675 entry:
1676   call void @llvm.riscv.vsse.nxv64i8(
1677     <vscale x 64 x i8> %0,
1678     ptr %1,
1679     iXLen %2,
1680     iXLen %3)
1682   ret void
1685 declare void @llvm.riscv.vsse.mask.nxv64i8(
1686   <vscale x 64 x i8>,
1687   ptr,
1688   iXLen,
1689   <vscale x 64 x i1>,
1690   iXLen);
1692 define void @intrinsic_vsse_mask_v_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, ptr %1, iXLen %2, <vscale x 64 x i1> %3, iXLen %4) nounwind {
1693 ; CHECK-LABEL: intrinsic_vsse_mask_v_nxv64i8_nxv64i8:
1694 ; CHECK:       # %bb.0: # %entry
1695 ; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
1696 ; CHECK-NEXT:    vsse8.v v8, (a0), a1, v0.t
1697 ; CHECK-NEXT:    ret
1698 entry:
1699   call void @llvm.riscv.vsse.mask.nxv64i8(
1700     <vscale x 64 x i8> %0,
1701     ptr %1,
1702     iXLen %2,
1703     <vscale x 64 x i1> %3,
1704     iXLen %4)
1706   ret void