Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vrgatherei16-rv32.ll
blobce14b19f89a35fedc50902a0d0c2fffa86d0ced3
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(
6   <vscale x 1 x i8>,
7   <vscale x 1 x i8>,
8   <vscale x 1 x i16>,
9   i32);
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
17 ; CHECK-NEXT:    ret
18 entry:
19   %a = call <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.nxv1i8(
20     <vscale x 1 x i8> undef,
21     <vscale x 1 x i8> %0,
22     <vscale x 1 x i16> %1,
23     i32 %2)
25   ret <vscale x 1 x i8> %a
28 declare <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv1i8(
29   <vscale x 1 x i8>,
30   <vscale x 1 x i8>,
31   <vscale x 1 x i16>,
32   <vscale x 1 x i1>,
33   i32,
34   i32);
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
41 ; CHECK-NEXT:    ret
42 entry:
43   %a = call <vscale x 1 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv1i8(
44     <vscale x 1 x i8> %0,
45     <vscale x 1 x i8> %1,
46     <vscale x 1 x i16> %2,
47     <vscale x 1 x i1> %3,
48     i32 %4, i32 1)
50   ret <vscale x 1 x i8> %a
53 declare <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.nxv2i8(
54   <vscale x 2 x i8>,
55   <vscale x 2 x i8>,
56   <vscale x 2 x i16>,
57   i32);
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
65 ; CHECK-NEXT:    ret
66 entry:
67   %a = call <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.nxv2i8(
68     <vscale x 2 x i8> undef,
69     <vscale x 2 x i8> %0,
70     <vscale x 2 x i16> %1,
71     i32 %2)
73   ret <vscale x 2 x i8> %a
76 declare <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv2i8(
77   <vscale x 2 x i8>,
78   <vscale x 2 x i8>,
79   <vscale x 2 x i16>,
80   <vscale x 2 x i1>,
81   i32,
82   i32);
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
89 ; CHECK-NEXT:    ret
90 entry:
91   %a = call <vscale x 2 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv2i8(
92     <vscale x 2 x i8> %0,
93     <vscale x 2 x i8> %1,
94     <vscale x 2 x i16> %2,
95     <vscale x 2 x i1> %3,
96     i32 %4, i32 1)
98   ret <vscale x 2 x i8> %a
101 declare <vscale x 4 x i8> @llvm.riscv.vrgatherei16.vv.nxv4i8(
102   <vscale x 4 x i8>,
103   <vscale x 4 x i8>,
104   <vscale x 4 x i16>,
105   i32);
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
113 ; CHECK-NEXT:    ret
114 entry:
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,
119     i32 %2)
121   ret <vscale x 4 x i8> %a
124 declare <vscale x 4 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv4i8(
125   <vscale x 4 x i8>,
126   <vscale x 4 x i8>,
127   <vscale x 4 x i16>,
128   <vscale x 4 x i1>,
129   i32,
130   i32);
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
137 ; CHECK-NEXT:    ret
138 entry:
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,
144     i32 %4, i32 1)
146   ret <vscale x 4 x i8> %a
149 declare <vscale x 8 x i8> @llvm.riscv.vrgatherei16.vv.nxv8i8(
150   <vscale x 8 x i8>,
151   <vscale x 8 x i8>,
152   <vscale x 8 x i16>,
153   i32);
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
161 ; CHECK-NEXT:    ret
162 entry:
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,
167     i32 %2)
169   ret <vscale x 8 x i8> %a
172 declare <vscale x 8 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv8i8(
173   <vscale x 8 x i8>,
174   <vscale x 8 x i8>,
175   <vscale x 8 x i16>,
176   <vscale x 8 x i1>,
177   i32,
178   i32);
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
185 ; CHECK-NEXT:    ret
186 entry:
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,
192     i32 %4, i32 1)
194   ret <vscale x 8 x i8> %a
197 declare <vscale x 16 x i8> @llvm.riscv.vrgatherei16.vv.nxv16i8(
198   <vscale x 16 x i8>,
199   <vscale x 16 x i8>,
200   <vscale x 16 x i16>,
201   i32);
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
209 ; CHECK-NEXT:    ret
210 entry:
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,
215     i32 %2)
217   ret <vscale x 16 x i8> %a
220 declare <vscale x 16 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv16i8(
221   <vscale x 16 x i8>,
222   <vscale x 16 x i8>,
223   <vscale x 16 x i16>,
224   <vscale x 16 x i1>,
225   i32,
226   i32);
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
233 ; CHECK-NEXT:    ret
234 entry:
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,
240     i32 %4, i32 1)
242   ret <vscale x 16 x i8> %a
245 declare <vscale x 32 x i8> @llvm.riscv.vrgatherei16.vv.nxv32i8(
246   <vscale x 32 x i8>,
247   <vscale x 32 x i8>,
248   <vscale x 32 x i16>,
249   i32);
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
257 ; CHECK-NEXT:    ret
258 entry:
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,
263     i32 %2)
265   ret <vscale x 32 x i8> %a
268 declare <vscale x 32 x i8> @llvm.riscv.vrgatherei16.vv.mask.nxv32i8(
269   <vscale x 32 x i8>,
270   <vscale x 32 x i8>,
271   <vscale x 32 x i16>,
272   <vscale x 32 x i1>,
273   i32,
274   i32);
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
281 ; CHECK-NEXT:    ret
282 entry:
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,
288     i32 %4, i32 1)
290   ret <vscale x 32 x i8> %a
293 declare <vscale x 1 x i16> @llvm.riscv.vrgatherei16.vv.nxv1i16(
294   <vscale x 1 x i16>,
295   <vscale x 1 x i16>,
296   <vscale x 1 x i16>,
297   i32);
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
305 ; CHECK-NEXT:    ret
306 entry:
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,
311     i32 %2)
313   ret <vscale x 1 x i16> %a
316 declare <vscale x 1 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv1i16(
317   <vscale x 1 x i16>,
318   <vscale x 1 x i16>,
319   <vscale x 1 x i16>,
320   <vscale x 1 x i1>,
321   i32,
322   i32);
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
329 ; CHECK-NEXT:    ret
330 entry:
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,
336     i32 %4, i32 1)
338   ret <vscale x 1 x i16> %a
341 declare <vscale x 2 x i16> @llvm.riscv.vrgatherei16.vv.nxv2i16(
342   <vscale x 2 x i16>,
343   <vscale x 2 x i16>,
344   <vscale x 2 x i16>,
345   i32);
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
353 ; CHECK-NEXT:    ret
354 entry:
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,
359     i32 %2)
361   ret <vscale x 2 x i16> %a
364 declare <vscale x 2 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv2i16(
365   <vscale x 2 x i16>,
366   <vscale x 2 x i16>,
367   <vscale x 2 x i16>,
368   <vscale x 2 x i1>,
369   i32,
370   i32);
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
377 ; CHECK-NEXT:    ret
378 entry:
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,
384     i32 %4, i32 1)
386   ret <vscale x 2 x i16> %a
389 declare <vscale x 4 x i16> @llvm.riscv.vrgatherei16.vv.nxv4i16(
390   <vscale x 4 x i16>,
391   <vscale x 4 x i16>,
392   <vscale x 4 x i16>,
393   i32);
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
401 ; CHECK-NEXT:    ret
402 entry:
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,
407     i32 %2)
409   ret <vscale x 4 x i16> %a
412 declare <vscale x 4 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv4i16(
413   <vscale x 4 x i16>,
414   <vscale x 4 x i16>,
415   <vscale x 4 x i16>,
416   <vscale x 4 x i1>,
417   i32,
418   i32);
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
425 ; CHECK-NEXT:    ret
426 entry:
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,
432     i32 %4, i32 1)
434   ret <vscale x 4 x i16> %a
437 declare <vscale x 8 x i16> @llvm.riscv.vrgatherei16.vv.nxv8i16(
438   <vscale x 8 x i16>,
439   <vscale x 8 x i16>,
440   <vscale x 8 x i16>,
441   i32);
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
449 ; CHECK-NEXT:    ret
450 entry:
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,
455     i32 %2)
457   ret <vscale x 8 x i16> %a
460 declare <vscale x 8 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv8i16(
461   <vscale x 8 x i16>,
462   <vscale x 8 x i16>,
463   <vscale x 8 x i16>,
464   <vscale x 8 x i1>,
465   i32,
466   i32);
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
473 ; CHECK-NEXT:    ret
474 entry:
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,
480     i32 %4, i32 1)
482   ret <vscale x 8 x i16> %a
485 declare <vscale x 16 x i16> @llvm.riscv.vrgatherei16.vv.nxv16i16(
486   <vscale x 16 x i16>,
487   <vscale x 16 x i16>,
488   <vscale x 16 x i16>,
489   i32);
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
497 ; CHECK-NEXT:    ret
498 entry:
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,
503     i32 %2)
505   ret <vscale x 16 x i16> %a
508 declare <vscale x 16 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv16i16(
509   <vscale x 16 x i16>,
510   <vscale x 16 x i16>,
511   <vscale x 16 x i16>,
512   <vscale x 16 x i1>,
513   i32,
514   i32);
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
521 ; CHECK-NEXT:    ret
522 entry:
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,
528     i32 %4, i32 1)
530   ret <vscale x 16 x i16> %a
533 declare <vscale x 32 x i16> @llvm.riscv.vrgatherei16.vv.nxv32i16(
534   <vscale x 32 x i16>,
535   <vscale x 32 x i16>,
536   <vscale x 32 x i16>,
537   i32);
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
545 ; CHECK-NEXT:    ret
546 entry:
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,
551     i32 %2)
553   ret <vscale x 32 x i16> %a
556 declare <vscale x 32 x i16> @llvm.riscv.vrgatherei16.vv.mask.nxv32i16(
557   <vscale x 32 x i16>,
558   <vscale x 32 x i16>,
559   <vscale x 32 x i16>,
560   <vscale x 32 x i1>,
561   i32,
562   i32);
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
570 ; CHECK-NEXT:    ret
571 entry:
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,
577     i32 %4, i32 1)
579   ret <vscale x 32 x i16> %a
582 declare <vscale x 1 x i32> @llvm.riscv.vrgatherei16.vv.nxv1i32(
583   <vscale x 1 x i32>,
584   <vscale x 1 x i32>,
585   <vscale x 1 x i16>,
586   i32);
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
594 ; CHECK-NEXT:    ret
595 entry:
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,
600     i32 %2)
602   ret <vscale x 1 x i32> %a
605 declare <vscale x 1 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv1i32(
606   <vscale x 1 x i32>,
607   <vscale x 1 x i32>,
608   <vscale x 1 x i16>,
609   <vscale x 1 x i1>,
610   i32,
611   i32);
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
618 ; CHECK-NEXT:    ret
619 entry:
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,
625     i32 %4, i32 1)
627   ret <vscale x 1 x i32> %a
630 declare <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.nxv4i32(
631   <vscale x 4 x i32>,
632   <vscale x 4 x i32>,
633   <vscale x 4 x i16>,
634   i32);
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
642 ; CHECK-NEXT:    ret
643 entry:
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,
648     i32 %2)
650   ret <vscale x 4 x i32> %a
653 declare <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv4i32(
654   <vscale x 4 x i32>,
655   <vscale x 4 x i32>,
656   <vscale x 4 x i16>,
657   <vscale x 4 x i1>,
658   i32,
659   i32);
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
666 ; CHECK-NEXT:    ret
667 entry:
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,
673     i32 %4, i32 1)
675   ret <vscale x 4 x i32> %a
678 declare <vscale x 8 x i32> @llvm.riscv.vrgatherei16.vv.nxv8i32(
679   <vscale x 8 x i32>,
680   <vscale x 8 x i32>,
681   <vscale x 8 x i16>,
682   i32);
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
690 ; CHECK-NEXT:    ret
691 entry:
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,
696     i32 %2)
698   ret <vscale x 8 x i32> %a
701 declare <vscale x 8 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv8i32(
702   <vscale x 8 x i32>,
703   <vscale x 8 x i32>,
704   <vscale x 8 x i16>,
705   <vscale x 8 x i1>,
706   i32,
707   i32);
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
714 ; CHECK-NEXT:    ret
715 entry:
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,
721     i32 %4, i32 1)
723   ret <vscale x 8 x i32> %a
726 declare <vscale x 16 x i32> @llvm.riscv.vrgatherei16.vv.nxv16i32(
727   <vscale x 16 x i32>,
728   <vscale x 16 x i32>,
729   <vscale x 16 x i16>,
730   i32);
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
738 ; CHECK-NEXT:    ret
739 entry:
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,
744     i32 %2)
746   ret <vscale x 16 x i32> %a
749 declare <vscale x 16 x i32> @llvm.riscv.vrgatherei16.vv.mask.nxv16i32(
750   <vscale x 16 x i32>,
751   <vscale x 16 x i32>,
752   <vscale x 16 x i16>,
753   <vscale x 16 x i1>,
754   i32,
755   i32);
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
763 ; CHECK-NEXT:    ret
764 entry:
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,
770     i32 %4, i32 1)
772   ret <vscale x 16 x i32> %a
775 declare <vscale x 4 x i64> @llvm.riscv.vrgatherei16.vv.nxv4i64(
776   <vscale x 4 x i64>,
777   <vscale x 4 x i64>,
778   <vscale x 4 x i16>,
779   i32);
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
787 ; CHECK-NEXT:    ret
788 entry:
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,
793     i32 %2)
795   ret <vscale x 4 x i64> %a
798 declare <vscale x 4 x i64> @llvm.riscv.vrgatherei16.vv.mask.nxv4i64(
799   <vscale x 4 x i64>,
800   <vscale x 4 x i64>,
801   <vscale x 4 x i16>,
802   <vscale x 4 x i1>,
803   i32,
804   i32);
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
811 ; CHECK-NEXT:    ret
812 entry:
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,
818     i32 %4, i32 1)
820   ret <vscale x 4 x i64> %a
823 declare <vscale x 8 x i64> @llvm.riscv.vrgatherei16.vv.nxv8i64(
824   <vscale x 8 x i64>,
825   <vscale x 8 x i64>,
826   <vscale x 8 x i16>,
827   i32);
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
835 ; CHECK-NEXT:    ret
836 entry:
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,
841     i32 %2)
843   ret <vscale x 8 x i64> %a
846 declare <vscale x 8 x i64> @llvm.riscv.vrgatherei16.vv.mask.nxv8i64(
847   <vscale x 8 x i64>,
848   <vscale x 8 x i64>,
849   <vscale x 8 x i16>,
850   <vscale x 8 x i1>,
851   i32,
852   i32);
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
860 ; CHECK-NEXT:    ret
861 entry:
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,
867     i32 %4, i32 1)
869   ret <vscale x 8 x i64> %a
872 declare <vscale x 1 x half> @llvm.riscv.vrgatherei16.vv.nxv1f16(
873   <vscale x 1 x half>,
874   <vscale x 1 x half>,
875   <vscale x 1 x i16>,
876   i32);
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
884 ; CHECK-NEXT:    ret
885 entry:
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,
890     i32 %2)
892   ret <vscale x 1 x half> %a
895 declare <vscale x 1 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv1f16(
896   <vscale x 1 x half>,
897   <vscale x 1 x half>,
898   <vscale x 1 x i16>,
899   <vscale x 1 x i1>,
900   i32,
901   i32);
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
908 ; CHECK-NEXT:    ret
909 entry:
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,
915     i32 %4, i32 1)
917   ret <vscale x 1 x half> %a
920 declare <vscale x 2 x half> @llvm.riscv.vrgatherei16.vv.nxv2f16(
921   <vscale x 2 x half>,
922   <vscale x 2 x half>,
923   <vscale x 2 x i16>,
924   i32);
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
932 ; CHECK-NEXT:    ret
933 entry:
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,
938     i32 %2)
940   ret <vscale x 2 x half> %a
943 declare <vscale x 2 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv2f16(
944   <vscale x 2 x half>,
945   <vscale x 2 x half>,
946   <vscale x 2 x i16>,
947   <vscale x 2 x i1>,
948   i32,
949   i32);
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
956 ; CHECK-NEXT:    ret
957 entry:
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,
963     i32 %4, i32 1)
965   ret <vscale x 2 x half> %a
968 declare <vscale x 4 x half> @llvm.riscv.vrgatherei16.vv.nxv4f16(
969   <vscale x 4 x half>,
970   <vscale x 4 x half>,
971   <vscale x 4 x i16>,
972   i32);
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
980 ; CHECK-NEXT:    ret
981 entry:
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,
986     i32 %2)
988   ret <vscale x 4 x half> %a
991 declare <vscale x 4 x half> @llvm.riscv.vrgatherei16.vv.mask.nxv4f16(
992   <vscale x 4 x half>,
993   <vscale x 4 x half>,
994   <vscale x 4 x i16>,
995   <vscale x 4 x i1>,
996   i32,
997   i32);
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
1004 ; CHECK-NEXT:    ret
1005 entry:
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,
1011     i32 %4, i32 1)
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>,
1019   <vscale x 8 x i16>,
1020   i32);
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
1028 ; CHECK-NEXT:    ret
1029 entry:
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,
1034     i32 %2)
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>,
1042   <vscale x 8 x i16>,
1043   <vscale x 8 x i1>,
1044   i32,
1045   i32);
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
1052 ; CHECK-NEXT:    ret
1053 entry:
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,
1059     i32 %4, i32 1)
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>,
1068   i32);
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
1076 ; CHECK-NEXT:    ret
1077 entry:
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,
1082     i32 %2)
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>,
1091   <vscale x 16 x i1>,
1092   i32,
1093   i32);
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
1100 ; CHECK-NEXT:    ret
1101 entry:
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,
1107     i32 %4, i32 1)
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>,
1116   i32);
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
1124 ; CHECK-NEXT:    ret
1125 entry:
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,
1130     i32 %2)
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>,
1139   <vscale x 32 x i1>,
1140   i32,
1141   i32);
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
1149 ; CHECK-NEXT:    ret
1150 entry:
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,
1156     i32 %4, i32 1)
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>,
1164   <vscale x 1 x i16>,
1165   i32);
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
1173 ; CHECK-NEXT:    ret
1174 entry:
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,
1179     i32 %2)
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>,
1187   <vscale x 1 x i16>,
1188   <vscale x 1 x i1>,
1189   i32,
1190   i32);
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
1197 ; CHECK-NEXT:    ret
1198 entry:
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,
1204     i32 %4, i32 1)
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>,
1212   <vscale x 4 x i16>,
1213   i32);
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
1221 ; CHECK-NEXT:    ret
1222 entry:
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,
1227     i32 %2)
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>,
1235   <vscale x 4 x i16>,
1236   <vscale x 4 x i1>,
1237   i32,
1238   i32);
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
1245 ; CHECK-NEXT:    ret
1246 entry:
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,
1252     i32 %4, i32 1)
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>,
1260   <vscale x 8 x i16>,
1261   i32);
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
1269 ; CHECK-NEXT:    ret
1270 entry:
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,
1275     i32 %2)
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>,
1283   <vscale x 8 x i16>,
1284   <vscale x 8 x i1>,
1285   i32,
1286   i32);
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
1293 ; CHECK-NEXT:    ret
1294 entry:
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,
1300     i32 %4, i32 1)
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>,
1309   i32);
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
1317 ; CHECK-NEXT:    ret
1318 entry:
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,
1323     i32 %2)
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>,
1332   <vscale x 16 x i1>,
1333   i32,
1334   i32);
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
1342 ; CHECK-NEXT:    ret
1343 entry:
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,
1349     i32 %4, i32 1)
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>,
1357   <vscale x 4 x i16>,
1358   i32);
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
1366 ; CHECK-NEXT:    ret
1367 entry:
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,
1372     i32 %2)
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>,
1380   <vscale x 4 x i16>,
1381   <vscale x 4 x i1>,
1382   i32,
1383   i32);
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
1390 ; CHECK-NEXT:    ret
1391 entry:
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,
1397     i32 %4, i32 1)
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>,
1405   <vscale x 8 x i16>,
1406   i32);
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
1414 ; CHECK-NEXT:    ret
1415 entry:
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,
1420     i32 %2)
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>,
1428   <vscale x 8 x i16>,
1429   <vscale x 8 x i1>,
1430   i32,
1431   i32);
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
1439 ; CHECK-NEXT:    ret
1440 entry:
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,
1446     i32 %4, i32 1)
1448   ret <vscale x 8 x double> %a