1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+d,+zfh,+zvfh -verify-machineinstrs \
3 ; RUN: < %s | FileCheck %s
5 declare <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.nxv1i8(
11 define <vscale x 1 x i8> @intrinsic_vrgatherei16_vv_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
12 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv1i8_nxv1i8:
13 ; CHECK: # %bb.0: # %entry
14 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
15 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
16 ; CHECK-NEXT: vmv1r.v v8, v10
19 %a = call <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.nxv1i8(
20 <vscale x 1 x i8> undef,
22 <vscale x 1 x i16> %1,
25 ret <vscale x 1 x i8> %a
28 declare <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv1i8(
36 define <vscale x 1 x i8> @intrinsic_vrgatherei16_mask_vv_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
37 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv1i8_nxv1i8:
38 ; CHECK: # %bb.0: # %entry
39 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu
40 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
43 %a = call <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv1i8(
46 <vscale x 1 x i16> %2,
50 ret <vscale x 1 x i8> %a
53 declare <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.nxv2i8(
59 define <vscale x 2 x i8> @intrinsic_vrgatherei16_vv_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i16> %1, i32 %2) nounwind {
60 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv2i8_nxv2i8:
61 ; CHECK: # %bb.0: # %entry
62 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
63 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
64 ; CHECK-NEXT: vmv1r.v v8, v10
67 %a = call <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.nxv2i8(
68 <vscale x 2 x i8> undef,
70 <vscale x 2 x i16> %1,
73 ret <vscale x 2 x i8> %a
76 declare <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv2i8(
84 define <vscale x 2 x i8> @intrinsic_vrgatherei16_mask_vv_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
85 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv2i8_nxv2i8:
86 ; CHECK: # %bb.0: # %entry
87 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu
88 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
91 %a = call <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv2i8(
94 <vscale x 2 x i16> %2,
98 ret <vscale x 2 x i8> %a
101 declare <vscale x 4 x i8> @llvm.riscv.vrgatherei16.vv.nxv4i8(
107 define <vscale x 4 x i8> @intrinsic_vrgatherei16_vv_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
108 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4i8_nxv4i8:
109 ; CHECK: # %bb.0: # %entry
110 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
111 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
112 ; CHECK-NEXT: vmv1r.v v8, v10
115 %a = call <vscale x 4 x i8> @llvm.riscv.vrgatherei16.vv.nxv4i8(
116 <vscale x 4 x i8> undef,
117 <vscale x 4 x i8> %0,
118 <vscale x 4 x i16> %1,
121 ret <vscale x 4 x i8> %a
124 declare <vscale x 4 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv4i8(
132 define <vscale x 4 x i8> @intrinsic_vrgatherei16_mask_vv_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
133 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4i8_nxv4i8:
134 ; CHECK: # %bb.0: # %entry
135 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu
136 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
139 %a = call <vscale x 4 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv4i8(
140 <vscale x 4 x i8> %0,
141 <vscale x 4 x i8> %1,
142 <vscale x 4 x i16> %2,
143 <vscale x 4 x i1> %3,
146 ret <vscale x 4 x i8> %a
149 declare <vscale x 8 x i8> @llvm.riscv.vrgatherei16.vv.nxv8i8(
155 define <vscale x 8 x i8> @intrinsic_vrgatherei16_vv_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
156 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8i8_nxv8i8:
157 ; CHECK: # %bb.0: # %entry
158 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
159 ; CHECK-NEXT: vrgatherei16.vv v9, v8, v10
160 ; CHECK-NEXT: vmv.v.v v8, v9
163 %a = call <vscale x 8 x i8> @llvm.riscv.vrgatherei16.vv.nxv8i8(
164 <vscale x 8 x i8> undef,
165 <vscale x 8 x i8> %0,
166 <vscale x 8 x i16> %1,
169 ret <vscale x 8 x i8> %a
172 declare <vscale x 8 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv8i8(
180 define <vscale x 8 x i8> @intrinsic_vrgatherei16_mask_vv_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
181 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8i8_nxv8i8:
182 ; CHECK: # %bb.0: # %entry
183 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu
184 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
187 %a = call <vscale x 8 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv8i8(
188 <vscale x 8 x i8> %0,
189 <vscale x 8 x i8> %1,
190 <vscale x 8 x i16> %2,
191 <vscale x 8 x i1> %3,
194 ret <vscale x 8 x i8> %a
197 declare <vscale x 16 x i8> @llvm.riscv.vrgatherei16.vv.nxv16i8(
203 define <vscale x 16 x i8> @intrinsic_vrgatherei16_vv_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
204 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16i8_nxv16i8:
205 ; CHECK: # %bb.0: # %entry
206 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
207 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v12
208 ; CHECK-NEXT: vmv.v.v v8, v10
211 %a = call <vscale x 16 x i8> @llvm.riscv.vrgatherei16.vv.nxv16i8(
212 <vscale x 16 x i8> undef,
213 <vscale x 16 x i8> %0,
214 <vscale x 16 x i16> %1,
217 ret <vscale x 16 x i8> %a
220 declare <vscale x 16 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv16i8(
228 define <vscale x 16 x i8> @intrinsic_vrgatherei16_mask_vv_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
229 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16i8_nxv16i8:
230 ; CHECK: # %bb.0: # %entry
231 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu
232 ; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t
235 %a = call <vscale x 16 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv16i8(
236 <vscale x 16 x i8> %0,
237 <vscale x 16 x i8> %1,
238 <vscale x 16 x i16> %2,
239 <vscale x 16 x i1> %3,
242 ret <vscale x 16 x i8> %a
245 declare <vscale x 32 x i8> @llvm.riscv.vrgatherei16.vv.nxv32i8(
251 define <vscale x 32 x i8> @intrinsic_vrgatherei16_vv_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i16> %1, i32 %2) nounwind {
252 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv32i8_nxv32i8:
253 ; CHECK: # %bb.0: # %entry
254 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
255 ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
256 ; CHECK-NEXT: vmv.v.v v8, v12
259 %a = call <vscale x 32 x i8> @llvm.riscv.vrgatherei16.vv.nxv32i8(
260 <vscale x 32 x i8> undef,
261 <vscale x 32 x i8> %0,
262 <vscale x 32 x i16> %1,
265 ret <vscale x 32 x i8> %a
268 declare <vscale x 32 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv32i8(
276 define <vscale x 32 x i8> @intrinsic_vrgatherei16_mask_vv_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, <vscale x 32 x i16> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
277 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv32i8_nxv32i8:
278 ; CHECK: # %bb.0: # %entry
279 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu
280 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
283 %a = call <vscale x 32 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv32i8(
284 <vscale x 32 x i8> %0,
285 <vscale x 32 x i8> %1,
286 <vscale x 32 x i16> %2,
287 <vscale x 32 x i1> %3,
290 ret <vscale x 32 x i8> %a
293 declare <vscale x 1 x i16> @llvm.riscv.vrgatherei16.vv.nxv1i16(
299 define <vscale x 1 x i16> @intrinsic_vrgatherei16_vv_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
300 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv1i16_nxv1i16:
301 ; CHECK: # %bb.0: # %entry
302 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
303 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
304 ; CHECK-NEXT: vmv1r.v v8, v10
307 %a = call <vscale x 1 x i16> @llvm.riscv.vrgatherei16.vv.nxv1i16(
308 <vscale x 1 x i16> undef,
309 <vscale x 1 x i16> %0,
310 <vscale x 1 x i16> %1,
313 ret <vscale x 1 x i16> %a
316 declare <vscale x 1 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv1i16(
324 define <vscale x 1 x i16> @intrinsic_vrgatherei16_mask_vv_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
325 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv1i16_nxv1i16:
326 ; CHECK: # %bb.0: # %entry
327 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu
328 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
331 %a = call <vscale x 1 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv1i16(
332 <vscale x 1 x i16> %0,
333 <vscale x 1 x i16> %1,
334 <vscale x 1 x i16> %2,
335 <vscale x 1 x i1> %3,
338 ret <vscale x 1 x i16> %a
341 declare <vscale x 2 x i16> @llvm.riscv.vrgatherei16.vv.nxv2i16(
347 define <vscale x 2 x i16> @intrinsic_vrgatherei16_vv_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i32 %2) nounwind {
348 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv2i16_nxv2i16:
349 ; CHECK: # %bb.0: # %entry
350 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
351 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
352 ; CHECK-NEXT: vmv1r.v v8, v10
355 %a = call <vscale x 2 x i16> @llvm.riscv.vrgatherei16.vv.nxv2i16(
356 <vscale x 2 x i16> undef,
357 <vscale x 2 x i16> %0,
358 <vscale x 2 x i16> %1,
361 ret <vscale x 2 x i16> %a
364 declare <vscale x 2 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv2i16(
372 define <vscale x 2 x i16> @intrinsic_vrgatherei16_mask_vv_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
373 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv2i16_nxv2i16:
374 ; CHECK: # %bb.0: # %entry
375 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu
376 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
379 %a = call <vscale x 2 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv2i16(
380 <vscale x 2 x i16> %0,
381 <vscale x 2 x i16> %1,
382 <vscale x 2 x i16> %2,
383 <vscale x 2 x i1> %3,
386 ret <vscale x 2 x i16> %a
389 declare <vscale x 4 x i16> @llvm.riscv.vrgatherei16.vv.nxv4i16(
395 define <vscale x 4 x i16> @intrinsic_vrgatherei16_vv_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
396 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4i16_nxv4i16:
397 ; CHECK: # %bb.0: # %entry
398 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
399 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
400 ; CHECK-NEXT: vmv.v.v v8, v10
403 %a = call <vscale x 4 x i16> @llvm.riscv.vrgatherei16.vv.nxv4i16(
404 <vscale x 4 x i16> undef,
405 <vscale x 4 x i16> %0,
406 <vscale x 4 x i16> %1,
409 ret <vscale x 4 x i16> %a
412 declare <vscale x 4 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv4i16(
420 define <vscale x 4 x i16> @intrinsic_vrgatherei16_mask_vv_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
421 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4i16_nxv4i16:
422 ; CHECK: # %bb.0: # %entry
423 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu
424 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
427 %a = call <vscale x 4 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv4i16(
428 <vscale x 4 x i16> %0,
429 <vscale x 4 x i16> %1,
430 <vscale x 4 x i16> %2,
431 <vscale x 4 x i1> %3,
434 ret <vscale x 4 x i16> %a
437 declare <vscale x 8 x i16> @llvm.riscv.vrgatherei16.vv.nxv8i16(
443 define <vscale x 8 x i16> @intrinsic_vrgatherei16_vv_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
444 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8i16_nxv8i16:
445 ; CHECK: # %bb.0: # %entry
446 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
447 ; CHECK-NEXT: vrgatherei16.vv v12, v8, v10
448 ; CHECK-NEXT: vmv.v.v v8, v12
451 %a = call <vscale x 8 x i16> @llvm.riscv.vrgatherei16.vv.nxv8i16(
452 <vscale x 8 x i16> undef,
453 <vscale x 8 x i16> %0,
454 <vscale x 8 x i16> %1,
457 ret <vscale x 8 x i16> %a
460 declare <vscale x 8 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv8i16(
468 define <vscale x 8 x i16> @intrinsic_vrgatherei16_mask_vv_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
469 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8i16_nxv8i16:
470 ; CHECK: # %bb.0: # %entry
471 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu
472 ; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t
475 %a = call <vscale x 8 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv8i16(
476 <vscale x 8 x i16> %0,
477 <vscale x 8 x i16> %1,
478 <vscale x 8 x i16> %2,
479 <vscale x 8 x i1> %3,
482 ret <vscale x 8 x i16> %a
485 declare <vscale x 16 x i16> @llvm.riscv.vrgatherei16.vv.nxv16i16(
491 define <vscale x 16 x i16> @intrinsic_vrgatherei16_vv_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
492 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16i16_nxv16i16:
493 ; CHECK: # %bb.0: # %entry
494 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
495 ; CHECK-NEXT: vrgatherei16.vv v16, v8, v12
496 ; CHECK-NEXT: vmv.v.v v8, v16
499 %a = call <vscale x 16 x i16> @llvm.riscv.vrgatherei16.vv.nxv16i16(
500 <vscale x 16 x i16> undef,
501 <vscale x 16 x i16> %0,
502 <vscale x 16 x i16> %1,
505 ret <vscale x 16 x i16> %a
508 declare <vscale x 16 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv16i16(
516 define <vscale x 16 x i16> @intrinsic_vrgatherei16_mask_vv_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
517 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16i16_nxv16i16:
518 ; CHECK: # %bb.0: # %entry
519 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
520 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
523 %a = call <vscale x 16 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv16i16(
524 <vscale x 16 x i16> %0,
525 <vscale x 16 x i16> %1,
526 <vscale x 16 x i16> %2,
527 <vscale x 16 x i1> %3,
530 ret <vscale x 16 x i16> %a
533 declare <vscale x 32 x i16> @llvm.riscv.vrgatherei16.vv.nxv32i16(
539 define <vscale x 32 x i16> @intrinsic_vrgatherei16_vv_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i32 %2) nounwind {
540 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv32i16_nxv32i16:
541 ; CHECK: # %bb.0: # %entry
542 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
543 ; CHECK-NEXT: vrgatherei16.vv v24, v8, v16
544 ; CHECK-NEXT: vmv.v.v v8, v24
547 %a = call <vscale x 32 x i16> @llvm.riscv.vrgatherei16.vv.nxv32i16(
548 <vscale x 32 x i16> undef,
549 <vscale x 32 x i16> %0,
550 <vscale x 32 x i16> %1,
553 ret <vscale x 32 x i16> %a
556 declare <vscale x 32 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv32i16(
564 define <vscale x 32 x i16> @intrinsic_vrgatherei16_mask_vv_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, <vscale x 32 x i16> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
565 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv32i16_nxv32i16:
566 ; CHECK: # %bb.0: # %entry
567 ; CHECK-NEXT: vl8re16.v v24, (a0)
568 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu
569 ; CHECK-NEXT: vrgatherei16.vv v8, v16, v24, v0.t
572 %a = call <vscale x 32 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv32i16(
573 <vscale x 32 x i16> %0,
574 <vscale x 32 x i16> %1,
575 <vscale x 32 x i16> %2,
576 <vscale x 32 x i1> %3,
579 ret <vscale x 32 x i16> %a
582 declare <vscale x 1 x i32> @llvm.riscv.vrgatherei16.vv.nxv1i32(
588 define <vscale x 1 x i32> @intrinsic_vrgatherei16_vv_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
589 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv1i32_nxv1i32:
590 ; CHECK: # %bb.0: # %entry
591 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
592 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
593 ; CHECK-NEXT: vmv1r.v v8, v10
596 %a = call <vscale x 1 x i32> @llvm.riscv.vrgatherei16.vv.nxv1i32(
597 <vscale x 1 x i32> undef,
598 <vscale x 1 x i32> %0,
599 <vscale x 1 x i16> %1,
602 ret <vscale x 1 x i32> %a
605 declare <vscale x 1 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv1i32(
613 define <vscale x 1 x i32> @intrinsic_vrgatherei16_mask_vv_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
614 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv1i32_nxv1i32:
615 ; CHECK: # %bb.0: # %entry
616 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu
617 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
620 %a = call <vscale x 1 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv1i32(
621 <vscale x 1 x i32> %0,
622 <vscale x 1 x i32> %1,
623 <vscale x 1 x i16> %2,
624 <vscale x 1 x i1> %3,
627 ret <vscale x 1 x i32> %a
630 declare <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.nxv4i32(
636 define <vscale x 4 x i32> @intrinsic_vrgatherei16_vv_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
637 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4i32_nxv4i32:
638 ; CHECK: # %bb.0: # %entry
639 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
640 ; CHECK-NEXT: vrgatherei16.vv v12, v8, v10
641 ; CHECK-NEXT: vmv.v.v v8, v12
644 %a = call <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.nxv4i32(
645 <vscale x 4 x i32> undef,
646 <vscale x 4 x i32> %0,
647 <vscale x 4 x i16> %1,
650 ret <vscale x 4 x i32> %a
653 declare <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv4i32(
661 define <vscale x 4 x i32> @intrinsic_vrgatherei16_mask_vv_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
662 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4i32_nxv4i32:
663 ; CHECK: # %bb.0: # %entry
664 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu
665 ; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t
668 %a = call <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv4i32(
669 <vscale x 4 x i32> %0,
670 <vscale x 4 x i32> %1,
671 <vscale x 4 x i16> %2,
672 <vscale x 4 x i1> %3,
675 ret <vscale x 4 x i32> %a
678 declare <vscale x 8 x i32> @llvm.riscv.vrgatherei16.vv.nxv8i32(
684 define <vscale x 8 x i32> @intrinsic_vrgatherei16_vv_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
685 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8i32_nxv8i32:
686 ; CHECK: # %bb.0: # %entry
687 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
688 ; CHECK-NEXT: vrgatherei16.vv v16, v8, v12
689 ; CHECK-NEXT: vmv.v.v v8, v16
692 %a = call <vscale x 8 x i32> @llvm.riscv.vrgatherei16.vv.nxv8i32(
693 <vscale x 8 x i32> undef,
694 <vscale x 8 x i32> %0,
695 <vscale x 8 x i16> %1,
698 ret <vscale x 8 x i32> %a
701 declare <vscale x 8 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv8i32(
709 define <vscale x 8 x i32> @intrinsic_vrgatherei16_mask_vv_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
710 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8i32_nxv8i32:
711 ; CHECK: # %bb.0: # %entry
712 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu
713 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
716 %a = call <vscale x 8 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv8i32(
717 <vscale x 8 x i32> %0,
718 <vscale x 8 x i32> %1,
719 <vscale x 8 x i16> %2,
720 <vscale x 8 x i1> %3,
723 ret <vscale x 8 x i32> %a
726 declare <vscale x 16 x i32> @llvm.riscv.vrgatherei16.vv.nxv16i32(
732 define <vscale x 16 x i32> @intrinsic_vrgatherei16_vv_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
733 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16i32_nxv16i32:
734 ; CHECK: # %bb.0: # %entry
735 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
736 ; CHECK-NEXT: vrgatherei16.vv v24, v8, v16
737 ; CHECK-NEXT: vmv.v.v v8, v24
740 %a = call <vscale x 16 x i32> @llvm.riscv.vrgatherei16.vv.nxv16i32(
741 <vscale x 16 x i32> undef,
742 <vscale x 16 x i32> %0,
743 <vscale x 16 x i16> %1,
746 ret <vscale x 16 x i32> %a
749 declare <vscale x 16 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv16i32(
757 define <vscale x 16 x i32> @intrinsic_vrgatherei16_mask_vv_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
758 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16i32_nxv16i32:
759 ; CHECK: # %bb.0: # %entry
760 ; CHECK-NEXT: vl4re16.v v24, (a0)
761 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu
762 ; CHECK-NEXT: vrgatherei16.vv v8, v16, v24, v0.t
765 %a = call <vscale x 16 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv16i32(
766 <vscale x 16 x i32> %0,
767 <vscale x 16 x i32> %1,
768 <vscale x 16 x i16> %2,
769 <vscale x 16 x i1> %3,
772 ret <vscale x 16 x i32> %a
775 declare <vscale x 4 x i64> @llvm.riscv.vrgatherei16.vv.nxv4i64(
781 define <vscale x 4 x i64> @intrinsic_vrgatherei16_vv_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
782 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4i64_nxv4i64:
783 ; CHECK: # %bb.0: # %entry
784 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
785 ; CHECK-NEXT: vrgatherei16.vv v16, v8, v12
786 ; CHECK-NEXT: vmv.v.v v8, v16
789 %a = call <vscale x 4 x i64> @llvm.riscv.vrgatherei16.vv.nxv4i64(
790 <vscale x 4 x i64> undef,
791 <vscale x 4 x i64> %0,
792 <vscale x 4 x i16> %1,
795 ret <vscale x 4 x i64> %a
798 declare <vscale x 4 x i64> @llvm.riscv.vrgatherei16.vv.mask.nxv4i64(
806 define <vscale x 4 x i64> @intrinsic_vrgatherei16_mask_vv_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
807 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4i64_nxv4i64:
808 ; CHECK: # %bb.0: # %entry
809 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu
810 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
813 %a = call <vscale x 4 x i64> @llvm.riscv.vrgatherei16.vv.mask.nxv4i64(
814 <vscale x 4 x i64> %0,
815 <vscale x 4 x i64> %1,
816 <vscale x 4 x i16> %2,
817 <vscale x 4 x i1> %3,
820 ret <vscale x 4 x i64> %a
823 declare <vscale x 8 x i64> @llvm.riscv.vrgatherei16.vv.nxv8i64(
829 define <vscale x 8 x i64> @intrinsic_vrgatherei16_vv_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
830 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8i64_nxv8i64:
831 ; CHECK: # %bb.0: # %entry
832 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
833 ; CHECK-NEXT: vrgatherei16.vv v24, v8, v16
834 ; CHECK-NEXT: vmv.v.v v8, v24
837 %a = call <vscale x 8 x i64> @llvm.riscv.vrgatherei16.vv.nxv8i64(
838 <vscale x 8 x i64> undef,
839 <vscale x 8 x i64> %0,
840 <vscale x 8 x i16> %1,
843 ret <vscale x 8 x i64> %a
846 declare <vscale x 8 x i64> @llvm.riscv.vrgatherei16.vv.mask.nxv8i64(
854 define <vscale x 8 x i64> @intrinsic_vrgatherei16_mask_vv_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
855 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8i64_nxv8i64:
856 ; CHECK: # %bb.0: # %entry
857 ; CHECK-NEXT: vl2re16.v v24, (a0)
858 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu
859 ; CHECK-NEXT: vrgatherei16.vv v8, v16, v24, v0.t
862 %a = call <vscale x 8 x i64> @llvm.riscv.vrgatherei16.vv.mask.nxv8i64(
863 <vscale x 8 x i64> %0,
864 <vscale x 8 x i64> %1,
865 <vscale x 8 x i16> %2,
866 <vscale x 8 x i1> %3,
869 ret <vscale x 8 x i64> %a
872 declare <vscale x 1 x half> @llvm.riscv.vrgatherei16.vv.nxv1f16(
878 define <vscale x 1 x half> @intrinsic_vrgatherei16_vv_nxv1f16_nxv1f16(<vscale x 1 x half> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
879 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv1f16_nxv1f16:
880 ; CHECK: # %bb.0: # %entry
881 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
882 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
883 ; CHECK-NEXT: vmv1r.v v8, v10
886 %a = call <vscale x 1 x half> @llvm.riscv.vrgatherei16.vv.nxv1f16(
887 <vscale x 1 x half> undef,
888 <vscale x 1 x half> %0,
889 <vscale x 1 x i16> %1,
892 ret <vscale x 1 x half> %a
895 declare <vscale x 1 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv1f16(
903 define <vscale x 1 x half> @intrinsic_vrgatherei16_mask_vv_nxv1f16_nxv1f16(<vscale x 1 x half> %0, <vscale x 1 x half> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
904 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv1f16_nxv1f16:
905 ; CHECK: # %bb.0: # %entry
906 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu
907 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
910 %a = call <vscale x 1 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv1f16(
911 <vscale x 1 x half> %0,
912 <vscale x 1 x half> %1,
913 <vscale x 1 x i16> %2,
914 <vscale x 1 x i1> %3,
917 ret <vscale x 1 x half> %a
920 declare <vscale x 2 x half> @llvm.riscv.vrgatherei16.vv.nxv2f16(
926 define <vscale x 2 x half> @intrinsic_vrgatherei16_vv_nxv2f16_nxv2f16(<vscale x 2 x half> %0, <vscale x 2 x i16> %1, i32 %2) nounwind {
927 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv2f16_nxv2f16:
928 ; CHECK: # %bb.0: # %entry
929 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
930 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
931 ; CHECK-NEXT: vmv1r.v v8, v10
934 %a = call <vscale x 2 x half> @llvm.riscv.vrgatherei16.vv.nxv2f16(
935 <vscale x 2 x half> undef,
936 <vscale x 2 x half> %0,
937 <vscale x 2 x i16> %1,
940 ret <vscale x 2 x half> %a
943 declare <vscale x 2 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv2f16(
951 define <vscale x 2 x half> @intrinsic_vrgatherei16_mask_vv_nxv2f16_nxv2f16(<vscale x 2 x half> %0, <vscale x 2 x half> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
952 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv2f16_nxv2f16:
953 ; CHECK: # %bb.0: # %entry
954 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu
955 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
958 %a = call <vscale x 2 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv2f16(
959 <vscale x 2 x half> %0,
960 <vscale x 2 x half> %1,
961 <vscale x 2 x i16> %2,
962 <vscale x 2 x i1> %3,
965 ret <vscale x 2 x half> %a
968 declare <vscale x 4 x half> @llvm.riscv.vrgatherei16.vv.nxv4f16(
974 define <vscale x 4 x half> @intrinsic_vrgatherei16_vv_nxv4f16_nxv4f16(<vscale x 4 x half> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
975 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4f16_nxv4f16:
976 ; CHECK: # %bb.0: # %entry
977 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
978 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
979 ; CHECK-NEXT: vmv.v.v v8, v10
982 %a = call <vscale x 4 x half> @llvm.riscv.vrgatherei16.vv.nxv4f16(
983 <vscale x 4 x half> undef,
984 <vscale x 4 x half> %0,
985 <vscale x 4 x i16> %1,
988 ret <vscale x 4 x half> %a
991 declare <vscale x 4 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv4f16(
999 define <vscale x 4 x half> @intrinsic_vrgatherei16_mask_vv_nxv4f16_nxv4f16(<vscale x 4 x half> %0, <vscale x 4 x half> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1000 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4f16_nxv4f16:
1001 ; CHECK: # %bb.0: # %entry
1002 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu
1003 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
1006 %a = call <vscale x 4 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv4f16(
1007 <vscale x 4 x half> %0,
1008 <vscale x 4 x half> %1,
1009 <vscale x 4 x i16> %2,
1010 <vscale x 4 x i1> %3,
1013 ret <vscale x 4 x half> %a
1016 declare <vscale x 8 x half> @llvm.riscv.vrgatherei16.vv.nxv8f16(
1017 <vscale x 8 x half>,
1018 <vscale x 8 x half>,
1022 define <vscale x 8 x half> @intrinsic_vrgatherei16_vv_nxv8f16_nxv8f16(<vscale x 8 x half> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
1023 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8f16_nxv8f16:
1024 ; CHECK: # %bb.0: # %entry
1025 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
1026 ; CHECK-NEXT: vrgatherei16.vv v12, v8, v10
1027 ; CHECK-NEXT: vmv.v.v v8, v12
1030 %a = call <vscale x 8 x half> @llvm.riscv.vrgatherei16.vv.nxv8f16(
1031 <vscale x 8 x half> undef,
1032 <vscale x 8 x half> %0,
1033 <vscale x 8 x i16> %1,
1036 ret <vscale x 8 x half> %a
1039 declare <vscale x 8 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv8f16(
1040 <vscale x 8 x half>,
1041 <vscale x 8 x half>,
1047 define <vscale x 8 x half> @intrinsic_vrgatherei16_mask_vv_nxv8f16_nxv8f16(<vscale x 8 x half> %0, <vscale x 8 x half> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1048 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8f16_nxv8f16:
1049 ; CHECK: # %bb.0: # %entry
1050 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu
1051 ; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t
1054 %a = call <vscale x 8 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv8f16(
1055 <vscale x 8 x half> %0,
1056 <vscale x 8 x half> %1,
1057 <vscale x 8 x i16> %2,
1058 <vscale x 8 x i1> %3,
1061 ret <vscale x 8 x half> %a
1064 declare <vscale x 16 x half> @llvm.riscv.vrgatherei16.vv.nxv16f16(
1065 <vscale x 16 x half>,
1066 <vscale x 16 x half>,
1067 <vscale x 16 x i16>,
1070 define <vscale x 16 x half> @intrinsic_vrgatherei16_vv_nxv16f16_nxv16f16(<vscale x 16 x half> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
1071 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16f16_nxv16f16:
1072 ; CHECK: # %bb.0: # %entry
1073 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
1074 ; CHECK-NEXT: vrgatherei16.vv v16, v8, v12
1075 ; CHECK-NEXT: vmv.v.v v8, v16
1078 %a = call <vscale x 16 x half> @llvm.riscv.vrgatherei16.vv.nxv16f16(
1079 <vscale x 16 x half> undef,
1080 <vscale x 16 x half> %0,
1081 <vscale x 16 x i16> %1,
1084 ret <vscale x 16 x half> %a
1087 declare <vscale x 16 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv16f16(
1088 <vscale x 16 x half>,
1089 <vscale x 16 x half>,
1090 <vscale x 16 x i16>,
1095 define <vscale x 16 x half> @intrinsic_vrgatherei16_mask_vv_nxv16f16_nxv16f16(<vscale x 16 x half> %0, <vscale x 16 x half> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1096 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16f16_nxv16f16:
1097 ; CHECK: # %bb.0: # %entry
1098 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
1099 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
1102 %a = call <vscale x 16 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv16f16(
1103 <vscale x 16 x half> %0,
1104 <vscale x 16 x half> %1,
1105 <vscale x 16 x i16> %2,
1106 <vscale x 16 x i1> %3,
1109 ret <vscale x 16 x half> %a
1112 declare <vscale x 32 x half> @llvm.riscv.vrgatherei16.vv.nxv32f16(
1113 <vscale x 32 x half>,
1114 <vscale x 32 x half>,
1115 <vscale x 32 x i16>,
1118 define <vscale x 32 x half> @intrinsic_vrgatherei16_vv_nxv32f16_nxv32f16(<vscale x 32 x half> %0, <vscale x 32 x i16> %1, i32 %2) nounwind {
1119 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv32f16_nxv32f16:
1120 ; CHECK: # %bb.0: # %entry
1121 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
1122 ; CHECK-NEXT: vrgatherei16.vv v24, v8, v16
1123 ; CHECK-NEXT: vmv.v.v v8, v24
1126 %a = call <vscale x 32 x half> @llvm.riscv.vrgatherei16.vv.nxv32f16(
1127 <vscale x 32 x half> undef,
1128 <vscale x 32 x half> %0,
1129 <vscale x 32 x i16> %1,
1132 ret <vscale x 32 x half> %a
1135 declare <vscale x 32 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv32f16(
1136 <vscale x 32 x half>,
1137 <vscale x 32 x half>,
1138 <vscale x 32 x i16>,
1143 define <vscale x 32 x half> @intrinsic_vrgatherei16_mask_vv_nxv32f16_nxv32f16(<vscale x 32 x half> %0, <vscale x 32 x half> %1, <vscale x 32 x i16> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
1144 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv32f16_nxv32f16:
1145 ; CHECK: # %bb.0: # %entry
1146 ; CHECK-NEXT: vl8re16.v v24, (a0)
1147 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu
1148 ; CHECK-NEXT: vrgatherei16.vv v8, v16, v24, v0.t
1151 %a = call <vscale x 32 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv32f16(
1152 <vscale x 32 x half> %0,
1153 <vscale x 32 x half> %1,
1154 <vscale x 32 x i16> %2,
1155 <vscale x 32 x i1> %3,
1158 ret <vscale x 32 x half> %a
1161 declare <vscale x 1 x float> @llvm.riscv.vrgatherei16.vv.nxv1f32(
1162 <vscale x 1 x float>,
1163 <vscale x 1 x float>,
1167 define <vscale x 1 x float> @intrinsic_vrgatherei16_vv_nxv1f32_nxv1f32(<vscale x 1 x float> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
1168 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv1f32_nxv1f32:
1169 ; CHECK: # %bb.0: # %entry
1170 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1171 ; CHECK-NEXT: vrgatherei16.vv v10, v8, v9
1172 ; CHECK-NEXT: vmv1r.v v8, v10
1175 %a = call <vscale x 1 x float> @llvm.riscv.vrgatherei16.vv.nxv1f32(
1176 <vscale x 1 x float> undef,
1177 <vscale x 1 x float> %0,
1178 <vscale x 1 x i16> %1,
1181 ret <vscale x 1 x float> %a
1184 declare <vscale x 1 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv1f32(
1185 <vscale x 1 x float>,
1186 <vscale x 1 x float>,
1192 define <vscale x 1 x float> @intrinsic_vrgatherei16_mask_vv_nxv1f32_nxv1f32(<vscale x 1 x float> %0, <vscale x 1 x float> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1193 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv1f32_nxv1f32:
1194 ; CHECK: # %bb.0: # %entry
1195 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu
1196 ; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t
1199 %a = call <vscale x 1 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv1f32(
1200 <vscale x 1 x float> %0,
1201 <vscale x 1 x float> %1,
1202 <vscale x 1 x i16> %2,
1203 <vscale x 1 x i1> %3,
1206 ret <vscale x 1 x float> %a
1209 declare <vscale x 4 x float> @llvm.riscv.vrgatherei16.vv.nxv4f32(
1210 <vscale x 4 x float>,
1211 <vscale x 4 x float>,
1215 define <vscale x 4 x float> @intrinsic_vrgatherei16_vv_nxv4f32_nxv4f32(<vscale x 4 x float> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
1216 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4f32_nxv4f32:
1217 ; CHECK: # %bb.0: # %entry
1218 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1219 ; CHECK-NEXT: vrgatherei16.vv v12, v8, v10
1220 ; CHECK-NEXT: vmv.v.v v8, v12
1223 %a = call <vscale x 4 x float> @llvm.riscv.vrgatherei16.vv.nxv4f32(
1224 <vscale x 4 x float> undef,
1225 <vscale x 4 x float> %0,
1226 <vscale x 4 x i16> %1,
1229 ret <vscale x 4 x float> %a
1232 declare <vscale x 4 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv4f32(
1233 <vscale x 4 x float>,
1234 <vscale x 4 x float>,
1240 define <vscale x 4 x float> @intrinsic_vrgatherei16_mask_vv_nxv4f32_nxv4f32(<vscale x 4 x float> %0, <vscale x 4 x float> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1241 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4f32_nxv4f32:
1242 ; CHECK: # %bb.0: # %entry
1243 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu
1244 ; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t
1247 %a = call <vscale x 4 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv4f32(
1248 <vscale x 4 x float> %0,
1249 <vscale x 4 x float> %1,
1250 <vscale x 4 x i16> %2,
1251 <vscale x 4 x i1> %3,
1254 ret <vscale x 4 x float> %a
1257 declare <vscale x 8 x float> @llvm.riscv.vrgatherei16.vv.nxv8f32(
1258 <vscale x 8 x float>,
1259 <vscale x 8 x float>,
1263 define <vscale x 8 x float> @intrinsic_vrgatherei16_vv_nxv8f32_nxv8f32(<vscale x 8 x float> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
1264 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8f32_nxv8f32:
1265 ; CHECK: # %bb.0: # %entry
1266 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1267 ; CHECK-NEXT: vrgatherei16.vv v16, v8, v12
1268 ; CHECK-NEXT: vmv.v.v v8, v16
1271 %a = call <vscale x 8 x float> @llvm.riscv.vrgatherei16.vv.nxv8f32(
1272 <vscale x 8 x float> undef,
1273 <vscale x 8 x float> %0,
1274 <vscale x 8 x i16> %1,
1277 ret <vscale x 8 x float> %a
1280 declare <vscale x 8 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv8f32(
1281 <vscale x 8 x float>,
1282 <vscale x 8 x float>,
1288 define <vscale x 8 x float> @intrinsic_vrgatherei16_mask_vv_nxv8f32_nxv8f32(<vscale x 8 x float> %0, <vscale x 8 x float> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1289 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8f32_nxv8f32:
1290 ; CHECK: # %bb.0: # %entry
1291 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu
1292 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
1295 %a = call <vscale x 8 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv8f32(
1296 <vscale x 8 x float> %0,
1297 <vscale x 8 x float> %1,
1298 <vscale x 8 x i16> %2,
1299 <vscale x 8 x i1> %3,
1302 ret <vscale x 8 x float> %a
1305 declare <vscale x 16 x float> @llvm.riscv.vrgatherei16.vv.nxv16f32(
1306 <vscale x 16 x float>,
1307 <vscale x 16 x float>,
1308 <vscale x 16 x i16>,
1311 define <vscale x 16 x float> @intrinsic_vrgatherei16_vv_nxv16f32_nxv16f32(<vscale x 16 x float> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
1312 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16f32_nxv16f32:
1313 ; CHECK: # %bb.0: # %entry
1314 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1315 ; CHECK-NEXT: vrgatherei16.vv v24, v8, v16
1316 ; CHECK-NEXT: vmv.v.v v8, v24
1319 %a = call <vscale x 16 x float> @llvm.riscv.vrgatherei16.vv.nxv16f32(
1320 <vscale x 16 x float> undef,
1321 <vscale x 16 x float> %0,
1322 <vscale x 16 x i16> %1,
1325 ret <vscale x 16 x float> %a
1328 declare <vscale x 16 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv16f32(
1329 <vscale x 16 x float>,
1330 <vscale x 16 x float>,
1331 <vscale x 16 x i16>,
1336 define <vscale x 16 x float> @intrinsic_vrgatherei16_mask_vv_nxv16f32_nxv16f32(<vscale x 16 x float> %0, <vscale x 16 x float> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1337 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16f32_nxv16f32:
1338 ; CHECK: # %bb.0: # %entry
1339 ; CHECK-NEXT: vl4re16.v v24, (a0)
1340 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu
1341 ; CHECK-NEXT: vrgatherei16.vv v8, v16, v24, v0.t
1344 %a = call <vscale x 16 x float> @llvm.riscv.vrgatherei16.vv.mask.nxv16f32(
1345 <vscale x 16 x float> %0,
1346 <vscale x 16 x float> %1,
1347 <vscale x 16 x i16> %2,
1348 <vscale x 16 x i1> %3,
1351 ret <vscale x 16 x float> %a
1354 declare <vscale x 4 x double> @llvm.riscv.vrgatherei16.vv.nxv4f64(
1355 <vscale x 4 x double>,
1356 <vscale x 4 x double>,
1360 define <vscale x 4 x double> @intrinsic_vrgatherei16_vv_nxv4f64_nxv4f64(<vscale x 4 x double> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
1361 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv4f64_nxv4f64:
1362 ; CHECK: # %bb.0: # %entry
1363 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1364 ; CHECK-NEXT: vrgatherei16.vv v16, v8, v12
1365 ; CHECK-NEXT: vmv.v.v v8, v16
1368 %a = call <vscale x 4 x double> @llvm.riscv.vrgatherei16.vv.nxv4f64(
1369 <vscale x 4 x double> undef,
1370 <vscale x 4 x double> %0,
1371 <vscale x 4 x i16> %1,
1374 ret <vscale x 4 x double> %a
1377 declare <vscale x 4 x double> @llvm.riscv.vrgatherei16.vv.mask.nxv4f64(
1378 <vscale x 4 x double>,
1379 <vscale x 4 x double>,
1385 define <vscale x 4 x double> @intrinsic_vrgatherei16_mask_vv_nxv4f64_nxv4f64(<vscale x 4 x double> %0, <vscale x 4 x double> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1386 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv4f64_nxv4f64:
1387 ; CHECK: # %bb.0: # %entry
1388 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu
1389 ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
1392 %a = call <vscale x 4 x double> @llvm.riscv.vrgatherei16.vv.mask.nxv4f64(
1393 <vscale x 4 x double> %0,
1394 <vscale x 4 x double> %1,
1395 <vscale x 4 x i16> %2,
1396 <vscale x 4 x i1> %3,
1399 ret <vscale x 4 x double> %a
1402 declare <vscale x 8 x double> @llvm.riscv.vrgatherei16.vv.nxv8f64(
1403 <vscale x 8 x double>,
1404 <vscale x 8 x double>,
1408 define <vscale x 8 x double> @intrinsic_vrgatherei16_vv_nxv8f64_nxv8f64(<vscale x 8 x double> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
1409 ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8f64_nxv8f64:
1410 ; CHECK: # %bb.0: # %entry
1411 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1412 ; CHECK-NEXT: vrgatherei16.vv v24, v8, v16
1413 ; CHECK-NEXT: vmv.v.v v8, v24
1416 %a = call <vscale x 8 x double> @llvm.riscv.vrgatherei16.vv.nxv8f64(
1417 <vscale x 8 x double> undef,
1418 <vscale x 8 x double> %0,
1419 <vscale x 8 x i16> %1,
1422 ret <vscale x 8 x double> %a
1425 declare <vscale x 8 x double> @llvm.riscv.vrgatherei16.vv.mask.nxv8f64(
1426 <vscale x 8 x double>,
1427 <vscale x 8 x double>,
1433 define <vscale x 8 x double> @intrinsic_vrgatherei16_mask_vv_nxv8f64_nxv8f64(<vscale x 8 x double> %0, <vscale x 8 x double> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1434 ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8f64_nxv8f64:
1435 ; CHECK: # %bb.0: # %entry
1436 ; CHECK-NEXT: vl2re16.v v24, (a0)
1437 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu
1438 ; CHECK-NEXT: vrgatherei16.vv v8, v16, v24, v0.t
1441 %a = call <vscale x 8 x double> @llvm.riscv.vrgatherei16.vv.mask.nxv8f64(
1442 <vscale x 8 x double> %0,
1443 <vscale x 8 x double> %1,
1444 <vscale x 8 x i16> %2,
1445 <vscale x 8 x i1> %3,
1448 ret <vscale x 8 x double> %a