[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vrgather-rv64.ll
blobf6c48690b9bdb4d2ebecd52c29c0721c2a1dcb3f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zfh,+zvfh -verify-machineinstrs \
3 ; RUN:   < %s | FileCheck %s
5 declare <vscale x 1 x i8> @llvm.riscv.vrgather.vv.nxv1i8.i64(
6   <vscale x 1 x i8>,
7   <vscale x 1 x i8>,
8   <vscale x 1 x i8>,
9   i64);
11 define <vscale x 1 x i8> @intrinsic_vrgather_vv_nxv1i8_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i64 %2) nounwind {
12 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1i8_nxv1i8_nxv1i8:
13 ; CHECK:       # %bb.0: # %entry
14 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
15 ; CHECK-NEXT:    vrgather.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.vrgather.vv.nxv1i8.i64(
20     <vscale x 1 x i8> undef,
21     <vscale x 1 x i8> %0,
22     <vscale x 1 x i8> %1,
23     i64 %2)
25   ret <vscale x 1 x i8> %a
28 declare <vscale x 1 x i8> @llvm.riscv.vrgather.vv.mask.nxv1i8.i64(
29   <vscale x 1 x i8>,
30   <vscale x 1 x i8>,
31   <vscale x 1 x i8>,
32   <vscale x 1 x i1>,
33   i64,
34   i64);
36 define <vscale x 1 x i8> @intrinsic_vrgather_mask_vv_nxv1i8_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
37 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1i8_nxv1i8_nxv1i8:
38 ; CHECK:       # %bb.0: # %entry
39 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
40 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
41 ; CHECK-NEXT:    ret
42 entry:
43   %a = call <vscale x 1 x i8> @llvm.riscv.vrgather.vv.mask.nxv1i8.i64(
44     <vscale x 1 x i8> %0,
45     <vscale x 1 x i8> %1,
46     <vscale x 1 x i8> %2,
47     <vscale x 1 x i1> %3,
48     i64 %4, i64 1)
50   ret <vscale x 1 x i8> %a
53 declare <vscale x 2 x i8> @llvm.riscv.vrgather.vv.nxv2i8.i64(
54   <vscale x 2 x i8>,
55   <vscale x 2 x i8>,
56   <vscale x 2 x i8>,
57   i64);
59 define <vscale x 2 x i8> @intrinsic_vrgather_vv_nxv2i8_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, i64 %2) nounwind {
60 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2i8_nxv2i8_nxv2i8:
61 ; CHECK:       # %bb.0: # %entry
62 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
63 ; CHECK-NEXT:    vrgather.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.vrgather.vv.nxv2i8.i64(
68     <vscale x 2 x i8> undef,
69     <vscale x 2 x i8> %0,
70     <vscale x 2 x i8> %1,
71     i64 %2)
73   ret <vscale x 2 x i8> %a
76 declare <vscale x 2 x i8> @llvm.riscv.vrgather.vv.mask.nxv2i8.i64(
77   <vscale x 2 x i8>,
78   <vscale x 2 x i8>,
79   <vscale x 2 x i8>,
80   <vscale x 2 x i1>,
81   i64,
82   i64);
84 define <vscale x 2 x i8> @intrinsic_vrgather_mask_vv_nxv2i8_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, <vscale x 2 x i8> %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
85 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2i8_nxv2i8_nxv2i8:
86 ; CHECK:       # %bb.0: # %entry
87 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
88 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
89 ; CHECK-NEXT:    ret
90 entry:
91   %a = call <vscale x 2 x i8> @llvm.riscv.vrgather.vv.mask.nxv2i8.i64(
92     <vscale x 2 x i8> %0,
93     <vscale x 2 x i8> %1,
94     <vscale x 2 x i8> %2,
95     <vscale x 2 x i1> %3,
96     i64 %4, i64 1)
98   ret <vscale x 2 x i8> %a
101 declare <vscale x 4 x i8> @llvm.riscv.vrgather.vv.nxv4i8.i64(
102   <vscale x 4 x i8>,
103   <vscale x 4 x i8>,
104   <vscale x 4 x i8>,
105   i64);
107 define <vscale x 4 x i8> @intrinsic_vrgather_vv_nxv4i8_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, i64 %2) nounwind {
108 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4i8_nxv4i8_nxv4i8:
109 ; CHECK:       # %bb.0: # %entry
110 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
111 ; CHECK-NEXT:    vrgather.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.vrgather.vv.nxv4i8.i64(
116     <vscale x 4 x i8> undef,
117     <vscale x 4 x i8> %0,
118     <vscale x 4 x i8> %1,
119     i64 %2)
121   ret <vscale x 4 x i8> %a
124 declare <vscale x 4 x i8> @llvm.riscv.vrgather.vv.mask.nxv4i8.i64(
125   <vscale x 4 x i8>,
126   <vscale x 4 x i8>,
127   <vscale x 4 x i8>,
128   <vscale x 4 x i1>,
129   i64,
130   i64);
132 define <vscale x 4 x i8> @intrinsic_vrgather_mask_vv_nxv4i8_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, <vscale x 4 x i8> %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
133 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4i8_nxv4i8_nxv4i8:
134 ; CHECK:       # %bb.0: # %entry
135 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
136 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
137 ; CHECK-NEXT:    ret
138 entry:
139   %a = call <vscale x 4 x i8> @llvm.riscv.vrgather.vv.mask.nxv4i8.i64(
140     <vscale x 4 x i8> %0,
141     <vscale x 4 x i8> %1,
142     <vscale x 4 x i8> %2,
143     <vscale x 4 x i1> %3,
144     i64 %4, i64 1)
146   ret <vscale x 4 x i8> %a
149 declare <vscale x 8 x i8> @llvm.riscv.vrgather.vv.nxv8i8.i64(
150   <vscale x 8 x i8>,
151   <vscale x 8 x i8>,
152   <vscale x 8 x i8>,
153   i64);
155 define <vscale x 8 x i8> @intrinsic_vrgather_vv_nxv8i8_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, i64 %2) nounwind {
156 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8i8_nxv8i8_nxv8i8:
157 ; CHECK:       # %bb.0: # %entry
158 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
159 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
160 ; CHECK-NEXT:    vmv.v.v v8, v10
161 ; CHECK-NEXT:    ret
162 entry:
163   %a = call <vscale x 8 x i8> @llvm.riscv.vrgather.vv.nxv8i8.i64(
164     <vscale x 8 x i8> undef,
165     <vscale x 8 x i8> %0,
166     <vscale x 8 x i8> %1,
167     i64 %2)
169   ret <vscale x 8 x i8> %a
172 declare <vscale x 8 x i8> @llvm.riscv.vrgather.vv.mask.nxv8i8.i64(
173   <vscale x 8 x i8>,
174   <vscale x 8 x i8>,
175   <vscale x 8 x i8>,
176   <vscale x 8 x i1>,
177   i64,
178   i64);
180 define <vscale x 8 x i8> @intrinsic_vrgather_mask_vv_nxv8i8_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, <vscale x 8 x i8> %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
181 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8i8_nxv8i8_nxv8i8:
182 ; CHECK:       # %bb.0: # %entry
183 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
184 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
185 ; CHECK-NEXT:    ret
186 entry:
187   %a = call <vscale x 8 x i8> @llvm.riscv.vrgather.vv.mask.nxv8i8.i64(
188     <vscale x 8 x i8> %0,
189     <vscale x 8 x i8> %1,
190     <vscale x 8 x i8> %2,
191     <vscale x 8 x i1> %3,
192     i64 %4, i64 1)
194   ret <vscale x 8 x i8> %a
197 declare <vscale x 16 x i8> @llvm.riscv.vrgather.vv.nxv16i8.i64(
198   <vscale x 16 x i8>,
199   <vscale x 16 x i8>,
200   <vscale x 16 x i8>,
201   i64);
203 define <vscale x 16 x i8> @intrinsic_vrgather_vv_nxv16i8_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, i64 %2) nounwind {
204 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv16i8_nxv16i8_nxv16i8:
205 ; CHECK:       # %bb.0: # %entry
206 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
207 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
208 ; CHECK-NEXT:    vmv.v.v v8, v12
209 ; CHECK-NEXT:    ret
210 entry:
211   %a = call <vscale x 16 x i8> @llvm.riscv.vrgather.vv.nxv16i8.i64(
212     <vscale x 16 x i8> undef,
213     <vscale x 16 x i8> %0,
214     <vscale x 16 x i8> %1,
215     i64 %2)
217   ret <vscale x 16 x i8> %a
220 declare <vscale x 16 x i8> @llvm.riscv.vrgather.vv.mask.nxv16i8.i64(
221   <vscale x 16 x i8>,
222   <vscale x 16 x i8>,
223   <vscale x 16 x i8>,
224   <vscale x 16 x i1>,
225   i64,
226   i64);
228 define <vscale x 16 x i8> @intrinsic_vrgather_mask_vv_nxv16i8_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
229 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv16i8_nxv16i8_nxv16i8:
230 ; CHECK:       # %bb.0: # %entry
231 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
232 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
233 ; CHECK-NEXT:    ret
234 entry:
235   %a = call <vscale x 16 x i8> @llvm.riscv.vrgather.vv.mask.nxv16i8.i64(
236     <vscale x 16 x i8> %0,
237     <vscale x 16 x i8> %1,
238     <vscale x 16 x i8> %2,
239     <vscale x 16 x i1> %3,
240     i64 %4, i64 1)
242   ret <vscale x 16 x i8> %a
245 declare <vscale x 32 x i8> @llvm.riscv.vrgather.vv.nxv32i8.i64(
246   <vscale x 32 x i8>,
247   <vscale x 32 x i8>,
248   <vscale x 32 x i8>,
249   i64);
251 define <vscale x 32 x i8> @intrinsic_vrgather_vv_nxv32i8_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, i64 %2) nounwind {
252 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv32i8_nxv32i8_nxv32i8:
253 ; CHECK:       # %bb.0: # %entry
254 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
255 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
256 ; CHECK-NEXT:    vmv.v.v v8, v16
257 ; CHECK-NEXT:    ret
258 entry:
259   %a = call <vscale x 32 x i8> @llvm.riscv.vrgather.vv.nxv32i8.i64(
260     <vscale x 32 x i8> undef,
261     <vscale x 32 x i8> %0,
262     <vscale x 32 x i8> %1,
263     i64 %2)
265   ret <vscale x 32 x i8> %a
268 declare <vscale x 32 x i8> @llvm.riscv.vrgather.vv.mask.nxv32i8.i64(
269   <vscale x 32 x i8>,
270   <vscale x 32 x i8>,
271   <vscale x 32 x i8>,
272   <vscale x 32 x i1>,
273   i64,
274   i64);
276 define <vscale x 32 x i8> @intrinsic_vrgather_mask_vv_nxv32i8_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, <vscale x 32 x i8> %2, <vscale x 32 x i1> %3, i64 %4) nounwind {
277 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv32i8_nxv32i8_nxv32i8:
278 ; CHECK:       # %bb.0: # %entry
279 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
280 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
281 ; CHECK-NEXT:    ret
282 entry:
283   %a = call <vscale x 32 x i8> @llvm.riscv.vrgather.vv.mask.nxv32i8.i64(
284     <vscale x 32 x i8> %0,
285     <vscale x 32 x i8> %1,
286     <vscale x 32 x i8> %2,
287     <vscale x 32 x i1> %3,
288     i64 %4, i64 1)
290   ret <vscale x 32 x i8> %a
293 declare <vscale x 64 x i8> @llvm.riscv.vrgather.vv.nxv64i8.i64(
294   <vscale x 64 x i8>,
295   <vscale x 64 x i8>,
296   <vscale x 64 x i8>,
297   i64);
299 define <vscale x 64 x i8> @intrinsic_vrgather_vv_nxv64i8_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, i64 %2) nounwind {
300 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv64i8_nxv64i8_nxv64i8:
301 ; CHECK:       # %bb.0: # %entry
302 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
303 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
304 ; CHECK-NEXT:    vmv.v.v v8, v24
305 ; CHECK-NEXT:    ret
306 entry:
307   %a = call <vscale x 64 x i8> @llvm.riscv.vrgather.vv.nxv64i8.i64(
308     <vscale x 64 x i8> undef,
309     <vscale x 64 x i8> %0,
310     <vscale x 64 x i8> %1,
311     i64 %2)
313   ret <vscale x 64 x i8> %a
316 declare <vscale x 64 x i8> @llvm.riscv.vrgather.vv.mask.nxv64i8.i64(
317   <vscale x 64 x i8>,
318   <vscale x 64 x i8>,
319   <vscale x 64 x i8>,
320   <vscale x 64 x i1>,
321   i64,
322   i64);
324 define <vscale x 64 x i8> @intrinsic_vrgather_mask_vv_nxv64i8_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, <vscale x 64 x i8> %2, <vscale x 64 x i1> %3, i64 %4) nounwind {
325 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv64i8_nxv64i8_nxv64i8:
326 ; CHECK:       # %bb.0: # %entry
327 ; CHECK-NEXT:    vl8r.v v24, (a0)
328 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
329 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
330 ; CHECK-NEXT:    ret
331 entry:
332   %a = call <vscale x 64 x i8> @llvm.riscv.vrgather.vv.mask.nxv64i8.i64(
333     <vscale x 64 x i8> %0,
334     <vscale x 64 x i8> %1,
335     <vscale x 64 x i8> %2,
336     <vscale x 64 x i1> %3,
337     i64 %4, i64 1)
339   ret <vscale x 64 x i8> %a
342 declare <vscale x 1 x i16> @llvm.riscv.vrgather.vv.nxv1i16.i64(
343   <vscale x 1 x i16>,
344   <vscale x 1 x i16>,
345   <vscale x 1 x i16>,
346   i64);
348 define <vscale x 1 x i16> @intrinsic_vrgather_vv_nxv1i16_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i64 %2) nounwind {
349 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1i16_nxv1i16_nxv1i16:
350 ; CHECK:       # %bb.0: # %entry
351 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
352 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
353 ; CHECK-NEXT:    vmv1r.v v8, v10
354 ; CHECK-NEXT:    ret
355 entry:
356   %a = call <vscale x 1 x i16> @llvm.riscv.vrgather.vv.nxv1i16.i64(
357     <vscale x 1 x i16> undef,
358     <vscale x 1 x i16> %0,
359     <vscale x 1 x i16> %1,
360     i64 %2)
362   ret <vscale x 1 x i16> %a
365 declare <vscale x 1 x i16> @llvm.riscv.vrgather.vv.mask.nxv1i16.i64(
366   <vscale x 1 x i16>,
367   <vscale x 1 x i16>,
368   <vscale x 1 x i16>,
369   <vscale x 1 x i1>,
370   i64,
371   i64);
373 define <vscale x 1 x i16> @intrinsic_vrgather_mask_vv_nxv1i16_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, i64 %4) nounwind {
374 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1i16_nxv1i16_nxv1i16:
375 ; CHECK:       # %bb.0: # %entry
376 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
377 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
378 ; CHECK-NEXT:    ret
379 entry:
380   %a = call <vscale x 1 x i16> @llvm.riscv.vrgather.vv.mask.nxv1i16.i64(
381     <vscale x 1 x i16> %0,
382     <vscale x 1 x i16> %1,
383     <vscale x 1 x i16> %2,
384     <vscale x 1 x i1> %3,
385     i64 %4, i64 1)
387   ret <vscale x 1 x i16> %a
390 declare <vscale x 2 x i16> @llvm.riscv.vrgather.vv.nxv2i16.i64(
391   <vscale x 2 x i16>,
392   <vscale x 2 x i16>,
393   <vscale x 2 x i16>,
394   i64);
396 define <vscale x 2 x i16> @intrinsic_vrgather_vv_nxv2i16_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i64 %2) nounwind {
397 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2i16_nxv2i16_nxv2i16:
398 ; CHECK:       # %bb.0: # %entry
399 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
400 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
401 ; CHECK-NEXT:    vmv1r.v v8, v10
402 ; CHECK-NEXT:    ret
403 entry:
404   %a = call <vscale x 2 x i16> @llvm.riscv.vrgather.vv.nxv2i16.i64(
405     <vscale x 2 x i16> undef,
406     <vscale x 2 x i16> %0,
407     <vscale x 2 x i16> %1,
408     i64 %2)
410   ret <vscale x 2 x i16> %a
413 declare <vscale x 2 x i16> @llvm.riscv.vrgather.vv.mask.nxv2i16.i64(
414   <vscale x 2 x i16>,
415   <vscale x 2 x i16>,
416   <vscale x 2 x i16>,
417   <vscale x 2 x i1>,
418   i64,
419   i64);
421 define <vscale x 2 x i16> @intrinsic_vrgather_mask_vv_nxv2i16_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, i64 %4) nounwind {
422 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2i16_nxv2i16_nxv2i16:
423 ; CHECK:       # %bb.0: # %entry
424 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
425 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
426 ; CHECK-NEXT:    ret
427 entry:
428   %a = call <vscale x 2 x i16> @llvm.riscv.vrgather.vv.mask.nxv2i16.i64(
429     <vscale x 2 x i16> %0,
430     <vscale x 2 x i16> %1,
431     <vscale x 2 x i16> %2,
432     <vscale x 2 x i1> %3,
433     i64 %4, i64 1)
435   ret <vscale x 2 x i16> %a
438 declare <vscale x 4 x i16> @llvm.riscv.vrgather.vv.nxv4i16.i64(
439   <vscale x 4 x i16>,
440   <vscale x 4 x i16>,
441   <vscale x 4 x i16>,
442   i64);
444 define <vscale x 4 x i16> @intrinsic_vrgather_vv_nxv4i16_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i64 %2) nounwind {
445 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4i16_nxv4i16_nxv4i16:
446 ; CHECK:       # %bb.0: # %entry
447 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
448 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
449 ; CHECK-NEXT:    vmv.v.v v8, v10
450 ; CHECK-NEXT:    ret
451 entry:
452   %a = call <vscale x 4 x i16> @llvm.riscv.vrgather.vv.nxv4i16.i64(
453     <vscale x 4 x i16> undef,
454     <vscale x 4 x i16> %0,
455     <vscale x 4 x i16> %1,
456     i64 %2)
458   ret <vscale x 4 x i16> %a
461 declare <vscale x 4 x i16> @llvm.riscv.vrgather.vv.mask.nxv4i16.i64(
462   <vscale x 4 x i16>,
463   <vscale x 4 x i16>,
464   <vscale x 4 x i16>,
465   <vscale x 4 x i1>,
466   i64,
467   i64);
469 define <vscale x 4 x i16> @intrinsic_vrgather_mask_vv_nxv4i16_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, i64 %4) nounwind {
470 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4i16_nxv4i16_nxv4i16:
471 ; CHECK:       # %bb.0: # %entry
472 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
473 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
474 ; CHECK-NEXT:    ret
475 entry:
476   %a = call <vscale x 4 x i16> @llvm.riscv.vrgather.vv.mask.nxv4i16.i64(
477     <vscale x 4 x i16> %0,
478     <vscale x 4 x i16> %1,
479     <vscale x 4 x i16> %2,
480     <vscale x 4 x i1> %3,
481     i64 %4, i64 1)
483   ret <vscale x 4 x i16> %a
486 declare <vscale x 8 x i16> @llvm.riscv.vrgather.vv.nxv8i16.i64(
487   <vscale x 8 x i16>,
488   <vscale x 8 x i16>,
489   <vscale x 8 x i16>,
490   i64);
492 define <vscale x 8 x i16> @intrinsic_vrgather_vv_nxv8i16_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i64 %2) nounwind {
493 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8i16_nxv8i16_nxv8i16:
494 ; CHECK:       # %bb.0: # %entry
495 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
496 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
497 ; CHECK-NEXT:    vmv.v.v v8, v12
498 ; CHECK-NEXT:    ret
499 entry:
500   %a = call <vscale x 8 x i16> @llvm.riscv.vrgather.vv.nxv8i16.i64(
501     <vscale x 8 x i16> undef,
502     <vscale x 8 x i16> %0,
503     <vscale x 8 x i16> %1,
504     i64 %2)
506   ret <vscale x 8 x i16> %a
509 declare <vscale x 8 x i16> @llvm.riscv.vrgather.vv.mask.nxv8i16.i64(
510   <vscale x 8 x i16>,
511   <vscale x 8 x i16>,
512   <vscale x 8 x i16>,
513   <vscale x 8 x i1>,
514   i64,
515   i64);
517 define <vscale x 8 x i16> @intrinsic_vrgather_mask_vv_nxv8i16_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, i64 %4) nounwind {
518 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8i16_nxv8i16_nxv8i16:
519 ; CHECK:       # %bb.0: # %entry
520 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
521 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
522 ; CHECK-NEXT:    ret
523 entry:
524   %a = call <vscale x 8 x i16> @llvm.riscv.vrgather.vv.mask.nxv8i16.i64(
525     <vscale x 8 x i16> %0,
526     <vscale x 8 x i16> %1,
527     <vscale x 8 x i16> %2,
528     <vscale x 8 x i1> %3,
529     i64 %4, i64 1)
531   ret <vscale x 8 x i16> %a
534 declare <vscale x 16 x i16> @llvm.riscv.vrgather.vv.nxv16i16.i64(
535   <vscale x 16 x i16>,
536   <vscale x 16 x i16>,
537   <vscale x 16 x i16>,
538   i64);
540 define <vscale x 16 x i16> @intrinsic_vrgather_vv_nxv16i16_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i64 %2) nounwind {
541 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv16i16_nxv16i16_nxv16i16:
542 ; CHECK:       # %bb.0: # %entry
543 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
544 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
545 ; CHECK-NEXT:    vmv.v.v v8, v16
546 ; CHECK-NEXT:    ret
547 entry:
548   %a = call <vscale x 16 x i16> @llvm.riscv.vrgather.vv.nxv16i16.i64(
549     <vscale x 16 x i16> undef,
550     <vscale x 16 x i16> %0,
551     <vscale x 16 x i16> %1,
552     i64 %2)
554   ret <vscale x 16 x i16> %a
557 declare <vscale x 16 x i16> @llvm.riscv.vrgather.vv.mask.nxv16i16.i64(
558   <vscale x 16 x i16>,
559   <vscale x 16 x i16>,
560   <vscale x 16 x i16>,
561   <vscale x 16 x i1>,
562   i64,
563   i64);
565 define <vscale x 16 x i16> @intrinsic_vrgather_mask_vv_nxv16i16_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, i64 %4) nounwind {
566 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv16i16_nxv16i16_nxv16i16:
567 ; CHECK:       # %bb.0: # %entry
568 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
569 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
570 ; CHECK-NEXT:    ret
571 entry:
572   %a = call <vscale x 16 x i16> @llvm.riscv.vrgather.vv.mask.nxv16i16.i64(
573     <vscale x 16 x i16> %0,
574     <vscale x 16 x i16> %1,
575     <vscale x 16 x i16> %2,
576     <vscale x 16 x i1> %3,
577     i64 %4, i64 1)
579   ret <vscale x 16 x i16> %a
582 declare <vscale x 32 x i16> @llvm.riscv.vrgather.vv.nxv32i16.i64(
583   <vscale x 32 x i16>,
584   <vscale x 32 x i16>,
585   <vscale x 32 x i16>,
586   i64);
588 define <vscale x 32 x i16> @intrinsic_vrgather_vv_nxv32i16_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i64 %2) nounwind {
589 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv32i16_nxv32i16_nxv32i16:
590 ; CHECK:       # %bb.0: # %entry
591 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
592 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
593 ; CHECK-NEXT:    vmv.v.v v8, v24
594 ; CHECK-NEXT:    ret
595 entry:
596   %a = call <vscale x 32 x i16> @llvm.riscv.vrgather.vv.nxv32i16.i64(
597     <vscale x 32 x i16> undef,
598     <vscale x 32 x i16> %0,
599     <vscale x 32 x i16> %1,
600     i64 %2)
602   ret <vscale x 32 x i16> %a
605 declare <vscale x 32 x i16> @llvm.riscv.vrgather.vv.mask.nxv32i16.i64(
606   <vscale x 32 x i16>,
607   <vscale x 32 x i16>,
608   <vscale x 32 x i16>,
609   <vscale x 32 x i1>,
610   i64,
611   i64);
613 define <vscale x 32 x i16> @intrinsic_vrgather_mask_vv_nxv32i16_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, i64 %4) nounwind {
614 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv32i16_nxv32i16_nxv32i16:
615 ; CHECK:       # %bb.0: # %entry
616 ; CHECK-NEXT:    vl8re16.v v24, (a0)
617 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
618 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
619 ; CHECK-NEXT:    ret
620 entry:
621   %a = call <vscale x 32 x i16> @llvm.riscv.vrgather.vv.mask.nxv32i16.i64(
622     <vscale x 32 x i16> %0,
623     <vscale x 32 x i16> %1,
624     <vscale x 32 x i16> %2,
625     <vscale x 32 x i1> %3,
626     i64 %4, i64 1)
628   ret <vscale x 32 x i16> %a
631 declare <vscale x 1 x i32> @llvm.riscv.vrgather.vv.nxv1i32.i64(
632   <vscale x 1 x i32>,
633   <vscale x 1 x i32>,
634   <vscale x 1 x i32>,
635   i64);
637 define <vscale x 1 x i32> @intrinsic_vrgather_vv_nxv1i32_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, i64 %2) nounwind {
638 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1i32_nxv1i32_nxv1i32:
639 ; CHECK:       # %bb.0: # %entry
640 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
641 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
642 ; CHECK-NEXT:    vmv1r.v v8, v10
643 ; CHECK-NEXT:    ret
644 entry:
645   %a = call <vscale x 1 x i32> @llvm.riscv.vrgather.vv.nxv1i32.i64(
646     <vscale x 1 x i32> undef,
647     <vscale x 1 x i32> %0,
648     <vscale x 1 x i32> %1,
649     i64 %2)
651   ret <vscale x 1 x i32> %a
654 declare <vscale x 1 x i32> @llvm.riscv.vrgather.vv.mask.nxv1i32.i64(
655   <vscale x 1 x i32>,
656   <vscale x 1 x i32>,
657   <vscale x 1 x i32>,
658   <vscale x 1 x i1>,
659   i64,
660   i64);
662 define <vscale x 1 x i32> @intrinsic_vrgather_mask_vv_nxv1i32_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, <vscale x 1 x i32> %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
663 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1i32_nxv1i32_nxv1i32:
664 ; CHECK:       # %bb.0: # %entry
665 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
666 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
667 ; CHECK-NEXT:    ret
668 entry:
669   %a = call <vscale x 1 x i32> @llvm.riscv.vrgather.vv.mask.nxv1i32.i64(
670     <vscale x 1 x i32> %0,
671     <vscale x 1 x i32> %1,
672     <vscale x 1 x i32> %2,
673     <vscale x 1 x i1> %3,
674     i64 %4, i64 1)
676   ret <vscale x 1 x i32> %a
679 declare <vscale x 2 x i32> @llvm.riscv.vrgather.vv.nxv2i32.i64(
680   <vscale x 2 x i32>,
681   <vscale x 2 x i32>,
682   <vscale x 2 x i32>,
683   i64);
685 define <vscale x 2 x i32> @intrinsic_vrgather_vv_nxv2i32_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, i64 %2) nounwind {
686 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2i32_nxv2i32_nxv2i32:
687 ; CHECK:       # %bb.0: # %entry
688 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
689 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
690 ; CHECK-NEXT:    vmv.v.v v8, v10
691 ; CHECK-NEXT:    ret
692 entry:
693   %a = call <vscale x 2 x i32> @llvm.riscv.vrgather.vv.nxv2i32.i64(
694     <vscale x 2 x i32> undef,
695     <vscale x 2 x i32> %0,
696     <vscale x 2 x i32> %1,
697     i64 %2)
699   ret <vscale x 2 x i32> %a
702 declare <vscale x 2 x i32> @llvm.riscv.vrgather.vv.mask.nxv2i32.i64(
703   <vscale x 2 x i32>,
704   <vscale x 2 x i32>,
705   <vscale x 2 x i32>,
706   <vscale x 2 x i1>,
707   i64,
708   i64);
710 define <vscale x 2 x i32> @intrinsic_vrgather_mask_vv_nxv2i32_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, <vscale x 2 x i32> %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
711 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2i32_nxv2i32_nxv2i32:
712 ; CHECK:       # %bb.0: # %entry
713 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
714 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
715 ; CHECK-NEXT:    ret
716 entry:
717   %a = call <vscale x 2 x i32> @llvm.riscv.vrgather.vv.mask.nxv2i32.i64(
718     <vscale x 2 x i32> %0,
719     <vscale x 2 x i32> %1,
720     <vscale x 2 x i32> %2,
721     <vscale x 2 x i1> %3,
722     i64 %4, i64 1)
724   ret <vscale x 2 x i32> %a
727 declare <vscale x 4 x i32> @llvm.riscv.vrgather.vv.nxv4i32.i64(
728   <vscale x 4 x i32>,
729   <vscale x 4 x i32>,
730   <vscale x 4 x i32>,
731   i64);
733 define <vscale x 4 x i32> @intrinsic_vrgather_vv_nxv4i32_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, i64 %2) nounwind {
734 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4i32_nxv4i32_nxv4i32:
735 ; CHECK:       # %bb.0: # %entry
736 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
737 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
738 ; CHECK-NEXT:    vmv.v.v v8, v12
739 ; CHECK-NEXT:    ret
740 entry:
741   %a = call <vscale x 4 x i32> @llvm.riscv.vrgather.vv.nxv4i32.i64(
742     <vscale x 4 x i32> undef,
743     <vscale x 4 x i32> %0,
744     <vscale x 4 x i32> %1,
745     i64 %2)
747   ret <vscale x 4 x i32> %a
750 declare <vscale x 4 x i32> @llvm.riscv.vrgather.vv.mask.nxv4i32.i64(
751   <vscale x 4 x i32>,
752   <vscale x 4 x i32>,
753   <vscale x 4 x i32>,
754   <vscale x 4 x i1>,
755   i64,
756   i64);
758 define <vscale x 4 x i32> @intrinsic_vrgather_mask_vv_nxv4i32_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
759 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4i32_nxv4i32_nxv4i32:
760 ; CHECK:       # %bb.0: # %entry
761 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
762 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
763 ; CHECK-NEXT:    ret
764 entry:
765   %a = call <vscale x 4 x i32> @llvm.riscv.vrgather.vv.mask.nxv4i32.i64(
766     <vscale x 4 x i32> %0,
767     <vscale x 4 x i32> %1,
768     <vscale x 4 x i32> %2,
769     <vscale x 4 x i1> %3,
770     i64 %4, i64 1)
772   ret <vscale x 4 x i32> %a
775 declare <vscale x 8 x i32> @llvm.riscv.vrgather.vv.nxv8i32.i64(
776   <vscale x 8 x i32>,
777   <vscale x 8 x i32>,
778   <vscale x 8 x i32>,
779   i64);
781 define <vscale x 8 x i32> @intrinsic_vrgather_vv_nxv8i32_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, i64 %2) nounwind {
782 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8i32_nxv8i32_nxv8i32:
783 ; CHECK:       # %bb.0: # %entry
784 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
785 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
786 ; CHECK-NEXT:    vmv.v.v v8, v16
787 ; CHECK-NEXT:    ret
788 entry:
789   %a = call <vscale x 8 x i32> @llvm.riscv.vrgather.vv.nxv8i32.i64(
790     <vscale x 8 x i32> undef,
791     <vscale x 8 x i32> %0,
792     <vscale x 8 x i32> %1,
793     i64 %2)
795   ret <vscale x 8 x i32> %a
798 declare <vscale x 8 x i32> @llvm.riscv.vrgather.vv.mask.nxv8i32.i64(
799   <vscale x 8 x i32>,
800   <vscale x 8 x i32>,
801   <vscale x 8 x i32>,
802   <vscale x 8 x i1>,
803   i64,
804   i64);
806 define <vscale x 8 x i32> @intrinsic_vrgather_mask_vv_nxv8i32_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, <vscale x 8 x i32> %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
807 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8i32_nxv8i32_nxv8i32:
808 ; CHECK:       # %bb.0: # %entry
809 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
810 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
811 ; CHECK-NEXT:    ret
812 entry:
813   %a = call <vscale x 8 x i32> @llvm.riscv.vrgather.vv.mask.nxv8i32.i64(
814     <vscale x 8 x i32> %0,
815     <vscale x 8 x i32> %1,
816     <vscale x 8 x i32> %2,
817     <vscale x 8 x i1> %3,
818     i64 %4, i64 1)
820   ret <vscale x 8 x i32> %a
823 declare <vscale x 16 x i32> @llvm.riscv.vrgather.vv.nxv16i32.i64(
824   <vscale x 16 x i32>,
825   <vscale x 16 x i32>,
826   <vscale x 16 x i32>,
827   i64);
829 define <vscale x 16 x i32> @intrinsic_vrgather_vv_nxv16i32_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, i64 %2) nounwind {
830 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv16i32_nxv16i32_nxv16i32:
831 ; CHECK:       # %bb.0: # %entry
832 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
833 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
834 ; CHECK-NEXT:    vmv.v.v v8, v24
835 ; CHECK-NEXT:    ret
836 entry:
837   %a = call <vscale x 16 x i32> @llvm.riscv.vrgather.vv.nxv16i32.i64(
838     <vscale x 16 x i32> undef,
839     <vscale x 16 x i32> %0,
840     <vscale x 16 x i32> %1,
841     i64 %2)
843   ret <vscale x 16 x i32> %a
846 declare <vscale x 16 x i32> @llvm.riscv.vrgather.vv.mask.nxv16i32.i64(
847   <vscale x 16 x i32>,
848   <vscale x 16 x i32>,
849   <vscale x 16 x i32>,
850   <vscale x 16 x i1>,
851   i64,
852   i64);
854 define <vscale x 16 x i32> @intrinsic_vrgather_mask_vv_nxv16i32_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, <vscale x 16 x i32> %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
855 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv16i32_nxv16i32_nxv16i32:
856 ; CHECK:       # %bb.0: # %entry
857 ; CHECK-NEXT:    vl8re32.v v24, (a0)
858 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
859 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
860 ; CHECK-NEXT:    ret
861 entry:
862   %a = call <vscale x 16 x i32> @llvm.riscv.vrgather.vv.mask.nxv16i32.i64(
863     <vscale x 16 x i32> %0,
864     <vscale x 16 x i32> %1,
865     <vscale x 16 x i32> %2,
866     <vscale x 16 x i1> %3,
867     i64 %4, i64 1)
869   ret <vscale x 16 x i32> %a
872 declare <vscale x 1 x i64> @llvm.riscv.vrgather.vv.nxv1i64.i64(
873   <vscale x 1 x i64>,
874   <vscale x 1 x i64>,
875   <vscale x 1 x i64>,
876   i64);
878 define <vscale x 1 x i64> @intrinsic_vrgather_vv_nxv1i64_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, i64 %2) nounwind {
879 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1i64_nxv1i64_nxv1i64:
880 ; CHECK:       # %bb.0: # %entry
881 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
882 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
883 ; CHECK-NEXT:    vmv.v.v v8, v10
884 ; CHECK-NEXT:    ret
885 entry:
886   %a = call <vscale x 1 x i64> @llvm.riscv.vrgather.vv.nxv1i64.i64(
887     <vscale x 1 x i64> undef,
888     <vscale x 1 x i64> %0,
889     <vscale x 1 x i64> %1,
890     i64 %2)
892   ret <vscale x 1 x i64> %a
895 declare <vscale x 1 x i64> @llvm.riscv.vrgather.vv.mask.nxv1i64.i64(
896   <vscale x 1 x i64>,
897   <vscale x 1 x i64>,
898   <vscale x 1 x i64>,
899   <vscale x 1 x i1>,
900   i64,
901   i64);
903 define <vscale x 1 x i64> @intrinsic_vrgather_mask_vv_nxv1i64_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, <vscale x 1 x i64> %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
904 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1i64_nxv1i64_nxv1i64:
905 ; CHECK:       # %bb.0: # %entry
906 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
907 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
908 ; CHECK-NEXT:    ret
909 entry:
910   %a = call <vscale x 1 x i64> @llvm.riscv.vrgather.vv.mask.nxv1i64.i64(
911     <vscale x 1 x i64> %0,
912     <vscale x 1 x i64> %1,
913     <vscale x 1 x i64> %2,
914     <vscale x 1 x i1> %3,
915     i64 %4, i64 1)
917   ret <vscale x 1 x i64> %a
920 declare <vscale x 2 x i64> @llvm.riscv.vrgather.vv.nxv2i64.i64(
921   <vscale x 2 x i64>,
922   <vscale x 2 x i64>,
923   <vscale x 2 x i64>,
924   i64);
926 define <vscale x 2 x i64> @intrinsic_vrgather_vv_nxv2i64_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, i64 %2) nounwind {
927 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2i64_nxv2i64_nxv2i64:
928 ; CHECK:       # %bb.0: # %entry
929 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
930 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
931 ; CHECK-NEXT:    vmv.v.v v8, v12
932 ; CHECK-NEXT:    ret
933 entry:
934   %a = call <vscale x 2 x i64> @llvm.riscv.vrgather.vv.nxv2i64.i64(
935     <vscale x 2 x i64> undef,
936     <vscale x 2 x i64> %0,
937     <vscale x 2 x i64> %1,
938     i64 %2)
940   ret <vscale x 2 x i64> %a
943 declare <vscale x 2 x i64> @llvm.riscv.vrgather.vv.mask.nxv2i64.i64(
944   <vscale x 2 x i64>,
945   <vscale x 2 x i64>,
946   <vscale x 2 x i64>,
947   <vscale x 2 x i1>,
948   i64,
949   i64);
951 define <vscale x 2 x i64> @intrinsic_vrgather_mask_vv_nxv2i64_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, <vscale x 2 x i64> %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
952 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2i64_nxv2i64_nxv2i64:
953 ; CHECK:       # %bb.0: # %entry
954 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
955 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
956 ; CHECK-NEXT:    ret
957 entry:
958   %a = call <vscale x 2 x i64> @llvm.riscv.vrgather.vv.mask.nxv2i64.i64(
959     <vscale x 2 x i64> %0,
960     <vscale x 2 x i64> %1,
961     <vscale x 2 x i64> %2,
962     <vscale x 2 x i1> %3,
963     i64 %4, i64 1)
965   ret <vscale x 2 x i64> %a
968 declare <vscale x 4 x i64> @llvm.riscv.vrgather.vv.nxv4i64.i64(
969   <vscale x 4 x i64>,
970   <vscale x 4 x i64>,
971   <vscale x 4 x i64>,
972   i64);
974 define <vscale x 4 x i64> @intrinsic_vrgather_vv_nxv4i64_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, i64 %2) nounwind {
975 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4i64_nxv4i64_nxv4i64:
976 ; CHECK:       # %bb.0: # %entry
977 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
978 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
979 ; CHECK-NEXT:    vmv.v.v v8, v16
980 ; CHECK-NEXT:    ret
981 entry:
982   %a = call <vscale x 4 x i64> @llvm.riscv.vrgather.vv.nxv4i64.i64(
983     <vscale x 4 x i64> undef,
984     <vscale x 4 x i64> %0,
985     <vscale x 4 x i64> %1,
986     i64 %2)
988   ret <vscale x 4 x i64> %a
991 declare <vscale x 4 x i64> @llvm.riscv.vrgather.vv.mask.nxv4i64.i64(
992   <vscale x 4 x i64>,
993   <vscale x 4 x i64>,
994   <vscale x 4 x i64>,
995   <vscale x 4 x i1>,
996   i64,
997   i64);
999 define <vscale x 4 x i64> @intrinsic_vrgather_mask_vv_nxv4i64_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, <vscale x 4 x i64> %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
1000 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4i64_nxv4i64_nxv4i64:
1001 ; CHECK:       # %bb.0: # %entry
1002 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1003 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
1004 ; CHECK-NEXT:    ret
1005 entry:
1006   %a = call <vscale x 4 x i64> @llvm.riscv.vrgather.vv.mask.nxv4i64.i64(
1007     <vscale x 4 x i64> %0,
1008     <vscale x 4 x i64> %1,
1009     <vscale x 4 x i64> %2,
1010     <vscale x 4 x i1> %3,
1011     i64 %4, i64 1)
1013   ret <vscale x 4 x i64> %a
1016 declare <vscale x 8 x i64> @llvm.riscv.vrgather.vv.nxv8i64.i64(
1017   <vscale x 8 x i64>,
1018   <vscale x 8 x i64>,
1019   <vscale x 8 x i64>,
1020   i64);
1022 define <vscale x 8 x i64> @intrinsic_vrgather_vv_nxv8i64_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, i64 %2) nounwind {
1023 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8i64_nxv8i64_nxv8i64:
1024 ; CHECK:       # %bb.0: # %entry
1025 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1026 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
1027 ; CHECK-NEXT:    vmv.v.v v8, v24
1028 ; CHECK-NEXT:    ret
1029 entry:
1030   %a = call <vscale x 8 x i64> @llvm.riscv.vrgather.vv.nxv8i64.i64(
1031     <vscale x 8 x i64> undef,
1032     <vscale x 8 x i64> %0,
1033     <vscale x 8 x i64> %1,
1034     i64 %2)
1036   ret <vscale x 8 x i64> %a
1039 declare <vscale x 8 x i64> @llvm.riscv.vrgather.vv.mask.nxv8i64.i64(
1040   <vscale x 8 x i64>,
1041   <vscale x 8 x i64>,
1042   <vscale x 8 x i64>,
1043   <vscale x 8 x i1>,
1044   i64,
1045   i64);
1047 define <vscale x 8 x i64> @intrinsic_vrgather_mask_vv_nxv8i64_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, <vscale x 8 x i64> %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
1048 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8i64_nxv8i64_nxv8i64:
1049 ; CHECK:       # %bb.0: # %entry
1050 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1051 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
1052 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
1053 ; CHECK-NEXT:    ret
1054 entry:
1055   %a = call <vscale x 8 x i64> @llvm.riscv.vrgather.vv.mask.nxv8i64.i64(
1056     <vscale x 8 x i64> %0,
1057     <vscale x 8 x i64> %1,
1058     <vscale x 8 x i64> %2,
1059     <vscale x 8 x i1> %3,
1060     i64 %4, i64 1)
1062   ret <vscale x 8 x i64> %a
1065 declare <vscale x 1 x half> @llvm.riscv.vrgather.vv.nxv1f16.i64(
1066   <vscale x 1 x half>,
1067   <vscale x 1 x half>,
1068   <vscale x 1 x i16>,
1069   i64);
1071 define <vscale x 1 x half> @intrinsic_vrgather_vv_nxv1f16_nxv1f16_nxv1i16(<vscale x 1 x half> %0, <vscale x 1 x i16> %1, i64 %2) nounwind {
1072 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1f16_nxv1f16_nxv1i16:
1073 ; CHECK:       # %bb.0: # %entry
1074 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1075 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
1076 ; CHECK-NEXT:    vmv1r.v v8, v10
1077 ; CHECK-NEXT:    ret
1078 entry:
1079   %a = call <vscale x 1 x half> @llvm.riscv.vrgather.vv.nxv1f16.i64(
1080     <vscale x 1 x half> undef,
1081     <vscale x 1 x half> %0,
1082     <vscale x 1 x i16> %1,
1083     i64 %2)
1085   ret <vscale x 1 x half> %a
1088 declare <vscale x 1 x half> @llvm.riscv.vrgather.vv.mask.nxv1f16.i64(
1089   <vscale x 1 x half>,
1090   <vscale x 1 x half>,
1091   <vscale x 1 x i16>,
1092   <vscale x 1 x i1>,
1093   i64,
1094   i64);
1096 define <vscale x 1 x half> @intrinsic_vrgather_mask_vv_nxv1f16_nxv1f16_nxv1i16(<vscale x 1 x half> %0, <vscale x 1 x half> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
1097 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1f16_nxv1f16_nxv1i16:
1098 ; CHECK:       # %bb.0: # %entry
1099 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
1100 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
1101 ; CHECK-NEXT:    ret
1102 entry:
1103   %a = call <vscale x 1 x half> @llvm.riscv.vrgather.vv.mask.nxv1f16.i64(
1104     <vscale x 1 x half> %0,
1105     <vscale x 1 x half> %1,
1106     <vscale x 1 x i16> %2,
1107     <vscale x 1 x i1> %3,
1108     i64 %4, i64 1)
1110   ret <vscale x 1 x half> %a
1113 declare <vscale x 2 x half> @llvm.riscv.vrgather.vv.nxv2f16.i64(
1114   <vscale x 2 x half>,
1115   <vscale x 2 x half>,
1116   <vscale x 2 x i16>,
1117   i64);
1119 define <vscale x 2 x half> @intrinsic_vrgather_vv_nxv2f16_nxv2f16_nxv2i16(<vscale x 2 x half> %0, <vscale x 2 x i16> %1, i64 %2) nounwind {
1120 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2f16_nxv2f16_nxv2i16:
1121 ; CHECK:       # %bb.0: # %entry
1122 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1123 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
1124 ; CHECK-NEXT:    vmv1r.v v8, v10
1125 ; CHECK-NEXT:    ret
1126 entry:
1127   %a = call <vscale x 2 x half> @llvm.riscv.vrgather.vv.nxv2f16.i64(
1128     <vscale x 2 x half> undef,
1129     <vscale x 2 x half> %0,
1130     <vscale x 2 x i16> %1,
1131     i64 %2)
1133   ret <vscale x 2 x half> %a
1136 declare <vscale x 2 x half> @llvm.riscv.vrgather.vv.mask.nxv2f16.i64(
1137   <vscale x 2 x half>,
1138   <vscale x 2 x half>,
1139   <vscale x 2 x i16>,
1140   <vscale x 2 x i1>,
1141   i64,
1142   i64);
1144 define <vscale x 2 x half> @intrinsic_vrgather_mask_vv_nxv2f16_nxv2f16_nxv2i16(<vscale x 2 x half> %0, <vscale x 2 x half> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
1145 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2f16_nxv2f16_nxv2i16:
1146 ; CHECK:       # %bb.0: # %entry
1147 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
1148 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
1149 ; CHECK-NEXT:    ret
1150 entry:
1151   %a = call <vscale x 2 x half> @llvm.riscv.vrgather.vv.mask.nxv2f16.i64(
1152     <vscale x 2 x half> %0,
1153     <vscale x 2 x half> %1,
1154     <vscale x 2 x i16> %2,
1155     <vscale x 2 x i1> %3,
1156     i64 %4, i64 1)
1158   ret <vscale x 2 x half> %a
1161 declare <vscale x 4 x half> @llvm.riscv.vrgather.vv.nxv4f16.i64(
1162   <vscale x 4 x half>,
1163   <vscale x 4 x half>,
1164   <vscale x 4 x i16>,
1165   i64);
1167 define <vscale x 4 x half> @intrinsic_vrgather_vv_nxv4f16_nxv4f16_nxv4i16(<vscale x 4 x half> %0, <vscale x 4 x i16> %1, i64 %2) nounwind {
1168 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4f16_nxv4f16_nxv4i16:
1169 ; CHECK:       # %bb.0: # %entry
1170 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1171 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
1172 ; CHECK-NEXT:    vmv.v.v v8, v10
1173 ; CHECK-NEXT:    ret
1174 entry:
1175   %a = call <vscale x 4 x half> @llvm.riscv.vrgather.vv.nxv4f16.i64(
1176     <vscale x 4 x half> undef,
1177     <vscale x 4 x half> %0,
1178     <vscale x 4 x i16> %1,
1179     i64 %2)
1181   ret <vscale x 4 x half> %a
1184 declare <vscale x 4 x half> @llvm.riscv.vrgather.vv.mask.nxv4f16.i64(
1185   <vscale x 4 x half>,
1186   <vscale x 4 x half>,
1187   <vscale x 4 x i16>,
1188   <vscale x 4 x i1>,
1189   i64,
1190   i64);
1192 define <vscale x 4 x half> @intrinsic_vrgather_mask_vv_nxv4f16_nxv4f16_nxv4i16(<vscale x 4 x half> %0, <vscale x 4 x half> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
1193 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4f16_nxv4f16_nxv4i16:
1194 ; CHECK:       # %bb.0: # %entry
1195 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
1196 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
1197 ; CHECK-NEXT:    ret
1198 entry:
1199   %a = call <vscale x 4 x half> @llvm.riscv.vrgather.vv.mask.nxv4f16.i64(
1200     <vscale x 4 x half> %0,
1201     <vscale x 4 x half> %1,
1202     <vscale x 4 x i16> %2,
1203     <vscale x 4 x i1> %3,
1204     i64 %4, i64 1)
1206   ret <vscale x 4 x half> %a
1209 declare <vscale x 8 x half> @llvm.riscv.vrgather.vv.nxv8f16.i64(
1210   <vscale x 8 x half>,
1211   <vscale x 8 x half>,
1212   <vscale x 8 x i16>,
1213   i64);
1215 define <vscale x 8 x half> @intrinsic_vrgather_vv_nxv8f16_nxv8f16_nxv8i16(<vscale x 8 x half> %0, <vscale x 8 x i16> %1, i64 %2) nounwind {
1216 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8f16_nxv8f16_nxv8i16:
1217 ; CHECK:       # %bb.0: # %entry
1218 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1219 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
1220 ; CHECK-NEXT:    vmv.v.v v8, v12
1221 ; CHECK-NEXT:    ret
1222 entry:
1223   %a = call <vscale x 8 x half> @llvm.riscv.vrgather.vv.nxv8f16.i64(
1224     <vscale x 8 x half> undef,
1225     <vscale x 8 x half> %0,
1226     <vscale x 8 x i16> %1,
1227     i64 %2)
1229   ret <vscale x 8 x half> %a
1232 declare <vscale x 8 x half> @llvm.riscv.vrgather.vv.mask.nxv8f16.i64(
1233   <vscale x 8 x half>,
1234   <vscale x 8 x half>,
1235   <vscale x 8 x i16>,
1236   <vscale x 8 x i1>,
1237   i64,
1238   i64);
1240 define <vscale x 8 x half> @intrinsic_vrgather_mask_vv_nxv8f16_nxv8f16_nxv8i16(<vscale x 8 x half> %0, <vscale x 8 x half> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
1241 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8f16_nxv8f16_nxv8i16:
1242 ; CHECK:       # %bb.0: # %entry
1243 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
1244 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
1245 ; CHECK-NEXT:    ret
1246 entry:
1247   %a = call <vscale x 8 x half> @llvm.riscv.vrgather.vv.mask.nxv8f16.i64(
1248     <vscale x 8 x half> %0,
1249     <vscale x 8 x half> %1,
1250     <vscale x 8 x i16> %2,
1251     <vscale x 8 x i1> %3,
1252     i64 %4, i64 1)
1254   ret <vscale x 8 x half> %a
1257 declare <vscale x 16 x half> @llvm.riscv.vrgather.vv.nxv16f16.i64(
1258   <vscale x 16 x half>,
1259   <vscale x 16 x half>,
1260   <vscale x 16 x i16>,
1261   i64);
1263 define <vscale x 16 x half> @intrinsic_vrgather_vv_nxv16f16_nxv16f16_nxv16i16(<vscale x 16 x half> %0, <vscale x 16 x i16> %1, i64 %2) nounwind {
1264 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv16f16_nxv16f16_nxv16i16:
1265 ; CHECK:       # %bb.0: # %entry
1266 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1267 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
1268 ; CHECK-NEXT:    vmv.v.v v8, v16
1269 ; CHECK-NEXT:    ret
1270 entry:
1271   %a = call <vscale x 16 x half> @llvm.riscv.vrgather.vv.nxv16f16.i64(
1272     <vscale x 16 x half> undef,
1273     <vscale x 16 x half> %0,
1274     <vscale x 16 x i16> %1,
1275     i64 %2)
1277   ret <vscale x 16 x half> %a
1280 declare <vscale x 16 x half> @llvm.riscv.vrgather.vv.mask.nxv16f16.i64(
1281   <vscale x 16 x half>,
1282   <vscale x 16 x half>,
1283   <vscale x 16 x i16>,
1284   <vscale x 16 x i1>,
1285   i64,
1286   i64);
1288 define <vscale x 16 x half> @intrinsic_vrgather_mask_vv_nxv16f16_nxv16f16_nxv16i16(<vscale x 16 x half> %0, <vscale x 16 x half> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
1289 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv16f16_nxv16f16_nxv16i16:
1290 ; CHECK:       # %bb.0: # %entry
1291 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
1292 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
1293 ; CHECK-NEXT:    ret
1294 entry:
1295   %a = call <vscale x 16 x half> @llvm.riscv.vrgather.vv.mask.nxv16f16.i64(
1296     <vscale x 16 x half> %0,
1297     <vscale x 16 x half> %1,
1298     <vscale x 16 x i16> %2,
1299     <vscale x 16 x i1> %3,
1300     i64 %4, i64 1)
1302   ret <vscale x 16 x half> %a
1305 declare <vscale x 32 x half> @llvm.riscv.vrgather.vv.nxv32f16.i64(
1306   <vscale x 32 x half>,
1307   <vscale x 32 x half>,
1308   <vscale x 32 x i16>,
1309   i64);
1311 define <vscale x 32 x half> @intrinsic_vrgather_vv_nxv32f16_nxv32f16_nxv32i16(<vscale x 32 x half> %0, <vscale x 32 x i16> %1, i64 %2) nounwind {
1312 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv32f16_nxv32f16_nxv32i16:
1313 ; CHECK:       # %bb.0: # %entry
1314 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1315 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
1316 ; CHECK-NEXT:    vmv.v.v v8, v24
1317 ; CHECK-NEXT:    ret
1318 entry:
1319   %a = call <vscale x 32 x half> @llvm.riscv.vrgather.vv.nxv32f16.i64(
1320     <vscale x 32 x half> undef,
1321     <vscale x 32 x half> %0,
1322     <vscale x 32 x i16> %1,
1323     i64 %2)
1325   ret <vscale x 32 x half> %a
1328 declare <vscale x 32 x half> @llvm.riscv.vrgather.vv.mask.nxv32f16.i64(
1329   <vscale x 32 x half>,
1330   <vscale x 32 x half>,
1331   <vscale x 32 x i16>,
1332   <vscale x 32 x i1>,
1333   i64,
1334   i64);
1336 define <vscale x 32 x half> @intrinsic_vrgather_mask_vv_nxv32f16_nxv32f16_nxv32i16(<vscale x 32 x half> %0, <vscale x 32 x half> %1, <vscale x 32 x i16> %2, <vscale x 32 x i1> %3, i64 %4) nounwind {
1337 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv32f16_nxv32f16_nxv32i16:
1338 ; CHECK:       # %bb.0: # %entry
1339 ; CHECK-NEXT:    vl8re16.v v24, (a0)
1340 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
1341 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
1342 ; CHECK-NEXT:    ret
1343 entry:
1344   %a = call <vscale x 32 x half> @llvm.riscv.vrgather.vv.mask.nxv32f16.i64(
1345     <vscale x 32 x half> %0,
1346     <vscale x 32 x half> %1,
1347     <vscale x 32 x i16> %2,
1348     <vscale x 32 x i1> %3,
1349     i64 %4, i64 1)
1351   ret <vscale x 32 x half> %a
1354 declare <vscale x 1 x float> @llvm.riscv.vrgather.vv.nxv1f32.i64(
1355   <vscale x 1 x float>,
1356   <vscale x 1 x float>,
1357   <vscale x 1 x i32>,
1358   i64);
1360 define <vscale x 1 x float> @intrinsic_vrgather_vv_nxv1f32_nxv1f32_nxv1i32(<vscale x 1 x float> %0, <vscale x 1 x i32> %1, i64 %2) nounwind {
1361 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1f32_nxv1f32_nxv1i32:
1362 ; CHECK:       # %bb.0: # %entry
1363 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1364 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
1365 ; CHECK-NEXT:    vmv1r.v v8, v10
1366 ; CHECK-NEXT:    ret
1367 entry:
1368   %a = call <vscale x 1 x float> @llvm.riscv.vrgather.vv.nxv1f32.i64(
1369     <vscale x 1 x float> undef,
1370     <vscale x 1 x float> %0,
1371     <vscale x 1 x i32> %1,
1372     i64 %2)
1374   ret <vscale x 1 x float> %a
1377 declare <vscale x 1 x float> @llvm.riscv.vrgather.vv.mask.nxv1f32.i64(
1378   <vscale x 1 x float>,
1379   <vscale x 1 x float>,
1380   <vscale x 1 x i32>,
1381   <vscale x 1 x i1>,
1382   i64,
1383   i64);
1385 define <vscale x 1 x float> @intrinsic_vrgather_mask_vv_nxv1f32_nxv1f32_nxv1i32(<vscale x 1 x float> %0, <vscale x 1 x float> %1, <vscale x 1 x i32> %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
1386 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1f32_nxv1f32_nxv1i32:
1387 ; CHECK:       # %bb.0: # %entry
1388 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
1389 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
1390 ; CHECK-NEXT:    ret
1391 entry:
1392   %a = call <vscale x 1 x float> @llvm.riscv.vrgather.vv.mask.nxv1f32.i64(
1393     <vscale x 1 x float> %0,
1394     <vscale x 1 x float> %1,
1395     <vscale x 1 x i32> %2,
1396     <vscale x 1 x i1> %3,
1397     i64 %4, i64 1)
1399   ret <vscale x 1 x float> %a
1402 declare <vscale x 2 x float> @llvm.riscv.vrgather.vv.nxv2f32.i64(
1403   <vscale x 2 x float>,
1404   <vscale x 2 x float>,
1405   <vscale x 2 x i32>,
1406   i64);
1408 define <vscale x 2 x float> @intrinsic_vrgather_vv_nxv2f32_nxv2f32_nxv2i32(<vscale x 2 x float> %0, <vscale x 2 x i32> %1, i64 %2) nounwind {
1409 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2f32_nxv2f32_nxv2i32:
1410 ; CHECK:       # %bb.0: # %entry
1411 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1412 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
1413 ; CHECK-NEXT:    vmv.v.v v8, v10
1414 ; CHECK-NEXT:    ret
1415 entry:
1416   %a = call <vscale x 2 x float> @llvm.riscv.vrgather.vv.nxv2f32.i64(
1417     <vscale x 2 x float> undef,
1418     <vscale x 2 x float> %0,
1419     <vscale x 2 x i32> %1,
1420     i64 %2)
1422   ret <vscale x 2 x float> %a
1425 declare <vscale x 2 x float> @llvm.riscv.vrgather.vv.mask.nxv2f32.i64(
1426   <vscale x 2 x float>,
1427   <vscale x 2 x float>,
1428   <vscale x 2 x i32>,
1429   <vscale x 2 x i1>,
1430   i64,
1431   i64);
1433 define <vscale x 2 x float> @intrinsic_vrgather_mask_vv_nxv2f32_nxv2f32_nxv2i32(<vscale x 2 x float> %0, <vscale x 2 x float> %1, <vscale x 2 x i32> %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
1434 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2f32_nxv2f32_nxv2i32:
1435 ; CHECK:       # %bb.0: # %entry
1436 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
1437 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
1438 ; CHECK-NEXT:    ret
1439 entry:
1440   %a = call <vscale x 2 x float> @llvm.riscv.vrgather.vv.mask.nxv2f32.i64(
1441     <vscale x 2 x float> %0,
1442     <vscale x 2 x float> %1,
1443     <vscale x 2 x i32> %2,
1444     <vscale x 2 x i1> %3,
1445     i64 %4, i64 1)
1447   ret <vscale x 2 x float> %a
1450 declare <vscale x 4 x float> @llvm.riscv.vrgather.vv.nxv4f32.i64(
1451   <vscale x 4 x float>,
1452   <vscale x 4 x float>,
1453   <vscale x 4 x i32>,
1454   i64);
1456 define <vscale x 4 x float> @intrinsic_vrgather_vv_nxv4f32_nxv4f32_nxv4i32(<vscale x 4 x float> %0, <vscale x 4 x i32> %1, i64 %2) nounwind {
1457 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4f32_nxv4f32_nxv4i32:
1458 ; CHECK:       # %bb.0: # %entry
1459 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1460 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
1461 ; CHECK-NEXT:    vmv.v.v v8, v12
1462 ; CHECK-NEXT:    ret
1463 entry:
1464   %a = call <vscale x 4 x float> @llvm.riscv.vrgather.vv.nxv4f32.i64(
1465     <vscale x 4 x float> undef,
1466     <vscale x 4 x float> %0,
1467     <vscale x 4 x i32> %1,
1468     i64 %2)
1470   ret <vscale x 4 x float> %a
1473 declare <vscale x 4 x float> @llvm.riscv.vrgather.vv.mask.nxv4f32.i64(
1474   <vscale x 4 x float>,
1475   <vscale x 4 x float>,
1476   <vscale x 4 x i32>,
1477   <vscale x 4 x i1>,
1478   i64,
1479   i64);
1481 define <vscale x 4 x float> @intrinsic_vrgather_mask_vv_nxv4f32_nxv4f32_nxv4i32(<vscale x 4 x float> %0, <vscale x 4 x float> %1, <vscale x 4 x i32> %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
1482 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4f32_nxv4f32_nxv4i32:
1483 ; CHECK:       # %bb.0: # %entry
1484 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1485 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
1486 ; CHECK-NEXT:    ret
1487 entry:
1488   %a = call <vscale x 4 x float> @llvm.riscv.vrgather.vv.mask.nxv4f32.i64(
1489     <vscale x 4 x float> %0,
1490     <vscale x 4 x float> %1,
1491     <vscale x 4 x i32> %2,
1492     <vscale x 4 x i1> %3,
1493     i64 %4, i64 1)
1495   ret <vscale x 4 x float> %a
1498 declare <vscale x 8 x float> @llvm.riscv.vrgather.vv.nxv8f32.i64(
1499   <vscale x 8 x float>,
1500   <vscale x 8 x float>,
1501   <vscale x 8 x i32>,
1502   i64);
1504 define <vscale x 8 x float> @intrinsic_vrgather_vv_nxv8f32_nxv8f32_nxv8i32(<vscale x 8 x float> %0, <vscale x 8 x i32> %1, i64 %2) nounwind {
1505 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8f32_nxv8f32_nxv8i32:
1506 ; CHECK:       # %bb.0: # %entry
1507 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1508 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
1509 ; CHECK-NEXT:    vmv.v.v v8, v16
1510 ; CHECK-NEXT:    ret
1511 entry:
1512   %a = call <vscale x 8 x float> @llvm.riscv.vrgather.vv.nxv8f32.i64(
1513     <vscale x 8 x float> undef,
1514     <vscale x 8 x float> %0,
1515     <vscale x 8 x i32> %1,
1516     i64 %2)
1518   ret <vscale x 8 x float> %a
1521 declare <vscale x 8 x float> @llvm.riscv.vrgather.vv.mask.nxv8f32.i64(
1522   <vscale x 8 x float>,
1523   <vscale x 8 x float>,
1524   <vscale x 8 x i32>,
1525   <vscale x 8 x i1>,
1526   i64,
1527   i64);
1529 define <vscale x 8 x float> @intrinsic_vrgather_mask_vv_nxv8f32_nxv8f32_nxv8i32(<vscale x 8 x float> %0, <vscale x 8 x float> %1, <vscale x 8 x i32> %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
1530 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8f32_nxv8f32_nxv8i32:
1531 ; CHECK:       # %bb.0: # %entry
1532 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1533 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
1534 ; CHECK-NEXT:    ret
1535 entry:
1536   %a = call <vscale x 8 x float> @llvm.riscv.vrgather.vv.mask.nxv8f32.i64(
1537     <vscale x 8 x float> %0,
1538     <vscale x 8 x float> %1,
1539     <vscale x 8 x i32> %2,
1540     <vscale x 8 x i1> %3,
1541     i64 %4, i64 1)
1543   ret <vscale x 8 x float> %a
1546 declare <vscale x 16 x float> @llvm.riscv.vrgather.vv.nxv16f32.i64(
1547   <vscale x 16 x float>,
1548   <vscale x 16 x float>,
1549   <vscale x 16 x i32>,
1550   i64);
1552 define <vscale x 16 x float> @intrinsic_vrgather_vv_nxv16f32_nxv16f32_nxv16i32(<vscale x 16 x float> %0, <vscale x 16 x i32> %1, i64 %2) nounwind {
1553 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv16f32_nxv16f32_nxv16i32:
1554 ; CHECK:       # %bb.0: # %entry
1555 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1556 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
1557 ; CHECK-NEXT:    vmv.v.v v8, v24
1558 ; CHECK-NEXT:    ret
1559 entry:
1560   %a = call <vscale x 16 x float> @llvm.riscv.vrgather.vv.nxv16f32.i64(
1561     <vscale x 16 x float> undef,
1562     <vscale x 16 x float> %0,
1563     <vscale x 16 x i32> %1,
1564     i64 %2)
1566   ret <vscale x 16 x float> %a
1569 declare <vscale x 16 x float> @llvm.riscv.vrgather.vv.mask.nxv16f32.i64(
1570   <vscale x 16 x float>,
1571   <vscale x 16 x float>,
1572   <vscale x 16 x i32>,
1573   <vscale x 16 x i1>,
1574   i64,
1575   i64);
1577 define <vscale x 16 x float> @intrinsic_vrgather_mask_vv_nxv16f32_nxv16f32_nxv16i32(<vscale x 16 x float> %0, <vscale x 16 x float> %1, <vscale x 16 x i32> %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
1578 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv16f32_nxv16f32_nxv16i32:
1579 ; CHECK:       # %bb.0: # %entry
1580 ; CHECK-NEXT:    vl8re32.v v24, (a0)
1581 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
1582 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
1583 ; CHECK-NEXT:    ret
1584 entry:
1585   %a = call <vscale x 16 x float> @llvm.riscv.vrgather.vv.mask.nxv16f32.i64(
1586     <vscale x 16 x float> %0,
1587     <vscale x 16 x float> %1,
1588     <vscale x 16 x i32> %2,
1589     <vscale x 16 x i1> %3,
1590     i64 %4, i64 1)
1592   ret <vscale x 16 x float> %a
1595 declare <vscale x 1 x double> @llvm.riscv.vrgather.vv.nxv1f64.i64(
1596   <vscale x 1 x double>,
1597   <vscale x 1 x double>,
1598   <vscale x 1 x i64>,
1599   i64);
1601 define <vscale x 1 x double> @intrinsic_vrgather_vv_nxv1f64_nxv1f64_nxv1i64(<vscale x 1 x double> %0, <vscale x 1 x i64> %1, i64 %2) nounwind {
1602 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv1f64_nxv1f64_nxv1i64:
1603 ; CHECK:       # %bb.0: # %entry
1604 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1605 ; CHECK-NEXT:    vrgather.vv v10, v8, v9
1606 ; CHECK-NEXT:    vmv.v.v v8, v10
1607 ; CHECK-NEXT:    ret
1608 entry:
1609   %a = call <vscale x 1 x double> @llvm.riscv.vrgather.vv.nxv1f64.i64(
1610     <vscale x 1 x double> undef,
1611     <vscale x 1 x double> %0,
1612     <vscale x 1 x i64> %1,
1613     i64 %2)
1615   ret <vscale x 1 x double> %a
1618 declare <vscale x 1 x double> @llvm.riscv.vrgather.vv.mask.nxv1f64.i64(
1619   <vscale x 1 x double>,
1620   <vscale x 1 x double>,
1621   <vscale x 1 x i64>,
1622   <vscale x 1 x i1>,
1623   i64,
1624   i64);
1626 define <vscale x 1 x double> @intrinsic_vrgather_mask_vv_nxv1f64_nxv1f64_nxv1i64(<vscale x 1 x double> %0, <vscale x 1 x double> %1, <vscale x 1 x i64> %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
1627 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv1f64_nxv1f64_nxv1i64:
1628 ; CHECK:       # %bb.0: # %entry
1629 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
1630 ; CHECK-NEXT:    vrgather.vv v8, v9, v10, v0.t
1631 ; CHECK-NEXT:    ret
1632 entry:
1633   %a = call <vscale x 1 x double> @llvm.riscv.vrgather.vv.mask.nxv1f64.i64(
1634     <vscale x 1 x double> %0,
1635     <vscale x 1 x double> %1,
1636     <vscale x 1 x i64> %2,
1637     <vscale x 1 x i1> %3,
1638     i64 %4, i64 1)
1640   ret <vscale x 1 x double> %a
1643 declare <vscale x 2 x double> @llvm.riscv.vrgather.vv.nxv2f64.i64(
1644   <vscale x 2 x double>,
1645   <vscale x 2 x double>,
1646   <vscale x 2 x i64>,
1647   i64);
1649 define <vscale x 2 x double> @intrinsic_vrgather_vv_nxv2f64_nxv2f64_nxv2i64(<vscale x 2 x double> %0, <vscale x 2 x i64> %1, i64 %2) nounwind {
1650 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv2f64_nxv2f64_nxv2i64:
1651 ; CHECK:       # %bb.0: # %entry
1652 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1653 ; CHECK-NEXT:    vrgather.vv v12, v8, v10
1654 ; CHECK-NEXT:    vmv.v.v v8, v12
1655 ; CHECK-NEXT:    ret
1656 entry:
1657   %a = call <vscale x 2 x double> @llvm.riscv.vrgather.vv.nxv2f64.i64(
1658     <vscale x 2 x double> undef,
1659     <vscale x 2 x double> %0,
1660     <vscale x 2 x i64> %1,
1661     i64 %2)
1663   ret <vscale x 2 x double> %a
1666 declare <vscale x 2 x double> @llvm.riscv.vrgather.vv.mask.nxv2f64.i64(
1667   <vscale x 2 x double>,
1668   <vscale x 2 x double>,
1669   <vscale x 2 x i64>,
1670   <vscale x 2 x i1>,
1671   i64,
1672   i64);
1674 define <vscale x 2 x double> @intrinsic_vrgather_mask_vv_nxv2f64_nxv2f64_nxv2i64(<vscale x 2 x double> %0, <vscale x 2 x double> %1, <vscale x 2 x i64> %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
1675 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv2f64_nxv2f64_nxv2i64:
1676 ; CHECK:       # %bb.0: # %entry
1677 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
1678 ; CHECK-NEXT:    vrgather.vv v8, v10, v12, v0.t
1679 ; CHECK-NEXT:    ret
1680 entry:
1681   %a = call <vscale x 2 x double> @llvm.riscv.vrgather.vv.mask.nxv2f64.i64(
1682     <vscale x 2 x double> %0,
1683     <vscale x 2 x double> %1,
1684     <vscale x 2 x i64> %2,
1685     <vscale x 2 x i1> %3,
1686     i64 %4, i64 1)
1688   ret <vscale x 2 x double> %a
1691 declare <vscale x 4 x double> @llvm.riscv.vrgather.vv.nxv4f64.i64(
1692   <vscale x 4 x double>,
1693   <vscale x 4 x double>,
1694   <vscale x 4 x i64>,
1695   i64);
1697 define <vscale x 4 x double> @intrinsic_vrgather_vv_nxv4f64_nxv4f64_nxv4i64(<vscale x 4 x double> %0, <vscale x 4 x i64> %1, i64 %2) nounwind {
1698 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv4f64_nxv4f64_nxv4i64:
1699 ; CHECK:       # %bb.0: # %entry
1700 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1701 ; CHECK-NEXT:    vrgather.vv v16, v8, v12
1702 ; CHECK-NEXT:    vmv.v.v v8, v16
1703 ; CHECK-NEXT:    ret
1704 entry:
1705   %a = call <vscale x 4 x double> @llvm.riscv.vrgather.vv.nxv4f64.i64(
1706     <vscale x 4 x double> undef,
1707     <vscale x 4 x double> %0,
1708     <vscale x 4 x i64> %1,
1709     i64 %2)
1711   ret <vscale x 4 x double> %a
1714 declare <vscale x 4 x double> @llvm.riscv.vrgather.vv.mask.nxv4f64.i64(
1715   <vscale x 4 x double>,
1716   <vscale x 4 x double>,
1717   <vscale x 4 x i64>,
1718   <vscale x 4 x i1>,
1719   i64,
1720   i64);
1722 define <vscale x 4 x double> @intrinsic_vrgather_mask_vv_nxv4f64_nxv4f64_nxv4i64(<vscale x 4 x double> %0, <vscale x 4 x double> %1, <vscale x 4 x i64> %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
1723 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv4f64_nxv4f64_nxv4i64:
1724 ; CHECK:       # %bb.0: # %entry
1725 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
1726 ; CHECK-NEXT:    vrgather.vv v8, v12, v16, v0.t
1727 ; CHECK-NEXT:    ret
1728 entry:
1729   %a = call <vscale x 4 x double> @llvm.riscv.vrgather.vv.mask.nxv4f64.i64(
1730     <vscale x 4 x double> %0,
1731     <vscale x 4 x double> %1,
1732     <vscale x 4 x i64> %2,
1733     <vscale x 4 x i1> %3,
1734     i64 %4, i64 1)
1736   ret <vscale x 4 x double> %a
1739 declare <vscale x 8 x double> @llvm.riscv.vrgather.vv.nxv8f64.i64(
1740   <vscale x 8 x double>,
1741   <vscale x 8 x double>,
1742   <vscale x 8 x i64>,
1743   i64);
1745 define <vscale x 8 x double> @intrinsic_vrgather_vv_nxv8f64_nxv8f64_nxv8i64(<vscale x 8 x double> %0, <vscale x 8 x i64> %1, i64 %2) nounwind {
1746 ; CHECK-LABEL: intrinsic_vrgather_vv_nxv8f64_nxv8f64_nxv8i64:
1747 ; CHECK:       # %bb.0: # %entry
1748 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1749 ; CHECK-NEXT:    vrgather.vv v24, v8, v16
1750 ; CHECK-NEXT:    vmv.v.v v8, v24
1751 ; CHECK-NEXT:    ret
1752 entry:
1753   %a = call <vscale x 8 x double> @llvm.riscv.vrgather.vv.nxv8f64.i64(
1754     <vscale x 8 x double> undef,
1755     <vscale x 8 x double> %0,
1756     <vscale x 8 x i64> %1,
1757     i64 %2)
1759   ret <vscale x 8 x double> %a
1762 declare <vscale x 8 x double> @llvm.riscv.vrgather.vv.mask.nxv8f64.i64(
1763   <vscale x 8 x double>,
1764   <vscale x 8 x double>,
1765   <vscale x 8 x i64>,
1766   <vscale x 8 x i1>,
1767   i64,
1768   i64);
1770 define <vscale x 8 x double> @intrinsic_vrgather_mask_vv_nxv8f64_nxv8f64_nxv8i64(<vscale x 8 x double> %0, <vscale x 8 x double> %1, <vscale x 8 x i64> %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
1771 ; CHECK-LABEL: intrinsic_vrgather_mask_vv_nxv8f64_nxv8f64_nxv8i64:
1772 ; CHECK:       # %bb.0: # %entry
1773 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1774 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
1775 ; CHECK-NEXT:    vrgather.vv v8, v16, v24, v0.t
1776 ; CHECK-NEXT:    ret
1777 entry:
1778   %a = call <vscale x 8 x double> @llvm.riscv.vrgather.vv.mask.nxv8f64.i64(
1779     <vscale x 8 x double> %0,
1780     <vscale x 8 x double> %1,
1781     <vscale x 8 x i64> %2,
1782     <vscale x 8 x i1> %3,
1783     i64 %4, i64 1)
1785   ret <vscale x 8 x double> %a
1788 declare <vscale x 1 x i8> @llvm.riscv.vrgather.vx.nxv1i8.i64(
1789   <vscale x 1 x i8>,
1790   <vscale x 1 x i8>,
1791   i64,
1792   i64);
1794 define <vscale x 1 x i8> @intrinsic_vrgather_vx_nxv1i8_nxv1i8_i64(<vscale x 1 x i8> %0, i64 %1, i64 %2) nounwind {
1795 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1i8_nxv1i8_i64:
1796 ; CHECK:       # %bb.0: # %entry
1797 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
1798 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
1799 ; CHECK-NEXT:    vmv1r.v v8, v9
1800 ; CHECK-NEXT:    ret
1801 entry:
1802   %a = call <vscale x 1 x i8> @llvm.riscv.vrgather.vx.nxv1i8.i64(
1803     <vscale x 1 x i8> undef,
1804     <vscale x 1 x i8> %0,
1805     i64 %1,
1806     i64 %2)
1808   ret <vscale x 1 x i8> %a
1811 declare <vscale x 1 x i8> @llvm.riscv.vrgather.vx.mask.nxv1i8.i64(
1812   <vscale x 1 x i8>,
1813   <vscale x 1 x i8>,
1814   i64,
1815   <vscale x 1 x i1>,
1816   i64,
1817   i64);
1819 define <vscale x 1 x i8> @intrinsic_vrgather_mask_vx_nxv1i8_nxv1i8_i64(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
1820 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1i8_nxv1i8_i64:
1821 ; CHECK:       # %bb.0: # %entry
1822 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, mu
1823 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
1824 ; CHECK-NEXT:    ret
1825 entry:
1826   %a = call <vscale x 1 x i8> @llvm.riscv.vrgather.vx.mask.nxv1i8.i64(
1827     <vscale x 1 x i8> %0,
1828     <vscale x 1 x i8> %1,
1829     i64 %2,
1830     <vscale x 1 x i1> %3,
1831     i64 %4, i64 1)
1833   ret <vscale x 1 x i8> %a
1836 declare <vscale x 2 x i8> @llvm.riscv.vrgather.vx.nxv2i8.i64(
1837   <vscale x 2 x i8>,
1838   <vscale x 2 x i8>,
1839   i64,
1840   i64);
1842 define <vscale x 2 x i8> @intrinsic_vrgather_vx_nxv2i8_nxv2i8_i64(<vscale x 2 x i8> %0, i64 %1, i64 %2) nounwind {
1843 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2i8_nxv2i8_i64:
1844 ; CHECK:       # %bb.0: # %entry
1845 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
1846 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
1847 ; CHECK-NEXT:    vmv1r.v v8, v9
1848 ; CHECK-NEXT:    ret
1849 entry:
1850   %a = call <vscale x 2 x i8> @llvm.riscv.vrgather.vx.nxv2i8.i64(
1851     <vscale x 2 x i8> undef,
1852     <vscale x 2 x i8> %0,
1853     i64 %1,
1854     i64 %2)
1856   ret <vscale x 2 x i8> %a
1859 declare <vscale x 2 x i8> @llvm.riscv.vrgather.vx.mask.nxv2i8.i64(
1860   <vscale x 2 x i8>,
1861   <vscale x 2 x i8>,
1862   i64,
1863   <vscale x 2 x i1>,
1864   i64,
1865   i64);
1867 define <vscale x 2 x i8> @intrinsic_vrgather_mask_vx_nxv2i8_nxv2i8_i64(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
1868 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2i8_nxv2i8_i64:
1869 ; CHECK:       # %bb.0: # %entry
1870 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, mu
1871 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
1872 ; CHECK-NEXT:    ret
1873 entry:
1874   %a = call <vscale x 2 x i8> @llvm.riscv.vrgather.vx.mask.nxv2i8.i64(
1875     <vscale x 2 x i8> %0,
1876     <vscale x 2 x i8> %1,
1877     i64 %2,
1878     <vscale x 2 x i1> %3,
1879     i64 %4, i64 1)
1881   ret <vscale x 2 x i8> %a
1884 declare <vscale x 4 x i8> @llvm.riscv.vrgather.vx.nxv4i8.i64(
1885   <vscale x 4 x i8>,
1886   <vscale x 4 x i8>,
1887   i64,
1888   i64);
1890 define <vscale x 4 x i8> @intrinsic_vrgather_vx_nxv4i8_nxv4i8_i64(<vscale x 4 x i8> %0, i64 %1, i64 %2) nounwind {
1891 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4i8_nxv4i8_i64:
1892 ; CHECK:       # %bb.0: # %entry
1893 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
1894 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
1895 ; CHECK-NEXT:    vmv1r.v v8, v9
1896 ; CHECK-NEXT:    ret
1897 entry:
1898   %a = call <vscale x 4 x i8> @llvm.riscv.vrgather.vx.nxv4i8.i64(
1899     <vscale x 4 x i8> undef,
1900     <vscale x 4 x i8> %0,
1901     i64 %1,
1902     i64 %2)
1904   ret <vscale x 4 x i8> %a
1907 declare <vscale x 4 x i8> @llvm.riscv.vrgather.vx.mask.nxv4i8.i64(
1908   <vscale x 4 x i8>,
1909   <vscale x 4 x i8>,
1910   i64,
1911   <vscale x 4 x i1>,
1912   i64,
1913   i64);
1915 define <vscale x 4 x i8> @intrinsic_vrgather_mask_vx_nxv4i8_nxv4i8_i64(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
1916 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4i8_nxv4i8_i64:
1917 ; CHECK:       # %bb.0: # %entry
1918 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, mu
1919 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
1920 ; CHECK-NEXT:    ret
1921 entry:
1922   %a = call <vscale x 4 x i8> @llvm.riscv.vrgather.vx.mask.nxv4i8.i64(
1923     <vscale x 4 x i8> %0,
1924     <vscale x 4 x i8> %1,
1925     i64 %2,
1926     <vscale x 4 x i1> %3,
1927     i64 %4, i64 1)
1929   ret <vscale x 4 x i8> %a
1932 declare <vscale x 8 x i8> @llvm.riscv.vrgather.vx.nxv8i8.i64(
1933   <vscale x 8 x i8>,
1934   <vscale x 8 x i8>,
1935   i64,
1936   i64);
1938 define <vscale x 8 x i8> @intrinsic_vrgather_vx_nxv8i8_nxv8i8_i64(<vscale x 8 x i8> %0, i64 %1, i64 %2) nounwind {
1939 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8i8_nxv8i8_i64:
1940 ; CHECK:       # %bb.0: # %entry
1941 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
1942 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
1943 ; CHECK-NEXT:    vmv.v.v v8, v9
1944 ; CHECK-NEXT:    ret
1945 entry:
1946   %a = call <vscale x 8 x i8> @llvm.riscv.vrgather.vx.nxv8i8.i64(
1947     <vscale x 8 x i8> undef,
1948     <vscale x 8 x i8> %0,
1949     i64 %1,
1950     i64 %2)
1952   ret <vscale x 8 x i8> %a
1955 declare <vscale x 8 x i8> @llvm.riscv.vrgather.vx.mask.nxv8i8.i64(
1956   <vscale x 8 x i8>,
1957   <vscale x 8 x i8>,
1958   i64,
1959   <vscale x 8 x i1>,
1960   i64,
1961   i64);
1963 define <vscale x 8 x i8> @intrinsic_vrgather_mask_vx_nxv8i8_nxv8i8_i64(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
1964 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8i8_nxv8i8_i64:
1965 ; CHECK:       # %bb.0: # %entry
1966 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, mu
1967 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
1968 ; CHECK-NEXT:    ret
1969 entry:
1970   %a = call <vscale x 8 x i8> @llvm.riscv.vrgather.vx.mask.nxv8i8.i64(
1971     <vscale x 8 x i8> %0,
1972     <vscale x 8 x i8> %1,
1973     i64 %2,
1974     <vscale x 8 x i1> %3,
1975     i64 %4, i64 1)
1977   ret <vscale x 8 x i8> %a
1980 declare <vscale x 16 x i8> @llvm.riscv.vrgather.vx.nxv16i8.i64(
1981   <vscale x 16 x i8>,
1982   <vscale x 16 x i8>,
1983   i64,
1984   i64);
1986 define <vscale x 16 x i8> @intrinsic_vrgather_vx_nxv16i8_nxv16i8_i64(<vscale x 16 x i8> %0, i64 %1, i64 %2) nounwind {
1987 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv16i8_nxv16i8_i64:
1988 ; CHECK:       # %bb.0: # %entry
1989 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
1990 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
1991 ; CHECK-NEXT:    vmv.v.v v8, v10
1992 ; CHECK-NEXT:    ret
1993 entry:
1994   %a = call <vscale x 16 x i8> @llvm.riscv.vrgather.vx.nxv16i8.i64(
1995     <vscale x 16 x i8> undef,
1996     <vscale x 16 x i8> %0,
1997     i64 %1,
1998     i64 %2)
2000   ret <vscale x 16 x i8> %a
2003 declare <vscale x 16 x i8> @llvm.riscv.vrgather.vx.mask.nxv16i8.i64(
2004   <vscale x 16 x i8>,
2005   <vscale x 16 x i8>,
2006   i64,
2007   <vscale x 16 x i1>,
2008   i64,
2009   i64);
2011 define <vscale x 16 x i8> @intrinsic_vrgather_mask_vx_nxv16i8_nxv16i8_i64(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, i64 %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
2012 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv16i8_nxv16i8_i64:
2013 ; CHECK:       # %bb.0: # %entry
2014 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, mu
2015 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
2016 ; CHECK-NEXT:    ret
2017 entry:
2018   %a = call <vscale x 16 x i8> @llvm.riscv.vrgather.vx.mask.nxv16i8.i64(
2019     <vscale x 16 x i8> %0,
2020     <vscale x 16 x i8> %1,
2021     i64 %2,
2022     <vscale x 16 x i1> %3,
2023     i64 %4, i64 1)
2025   ret <vscale x 16 x i8> %a
2028 declare <vscale x 32 x i8> @llvm.riscv.vrgather.vx.nxv32i8.i64(
2029   <vscale x 32 x i8>,
2030   <vscale x 32 x i8>,
2031   i64,
2032   i64);
2034 define <vscale x 32 x i8> @intrinsic_vrgather_vx_nxv32i8_nxv32i8_i64(<vscale x 32 x i8> %0, i64 %1, i64 %2) nounwind {
2035 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv32i8_nxv32i8_i64:
2036 ; CHECK:       # %bb.0: # %entry
2037 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
2038 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
2039 ; CHECK-NEXT:    vmv.v.v v8, v12
2040 ; CHECK-NEXT:    ret
2041 entry:
2042   %a = call <vscale x 32 x i8> @llvm.riscv.vrgather.vx.nxv32i8.i64(
2043     <vscale x 32 x i8> undef,
2044     <vscale x 32 x i8> %0,
2045     i64 %1,
2046     i64 %2)
2048   ret <vscale x 32 x i8> %a
2051 declare <vscale x 32 x i8> @llvm.riscv.vrgather.vx.mask.nxv32i8.i64(
2052   <vscale x 32 x i8>,
2053   <vscale x 32 x i8>,
2054   i64,
2055   <vscale x 32 x i1>,
2056   i64,
2057   i64);
2059 define <vscale x 32 x i8> @intrinsic_vrgather_mask_vx_nxv32i8_nxv32i8_i64(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, i64 %2, <vscale x 32 x i1> %3, i64 %4) nounwind {
2060 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv32i8_nxv32i8_i64:
2061 ; CHECK:       # %bb.0: # %entry
2062 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
2063 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
2064 ; CHECK-NEXT:    ret
2065 entry:
2066   %a = call <vscale x 32 x i8> @llvm.riscv.vrgather.vx.mask.nxv32i8.i64(
2067     <vscale x 32 x i8> %0,
2068     <vscale x 32 x i8> %1,
2069     i64 %2,
2070     <vscale x 32 x i1> %3,
2071     i64 %4, i64 1)
2073   ret <vscale x 32 x i8> %a
2076 declare <vscale x 64 x i8> @llvm.riscv.vrgather.vx.nxv64i8.i64(
2077   <vscale x 64 x i8>,
2078   <vscale x 64 x i8>,
2079   i64,
2080   i64);
2082 define <vscale x 64 x i8> @intrinsic_vrgather_vx_nxv64i8_nxv64i8_i64(<vscale x 64 x i8> %0, i64 %1, i64 %2) nounwind {
2083 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv64i8_nxv64i8_i64:
2084 ; CHECK:       # %bb.0: # %entry
2085 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
2086 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
2087 ; CHECK-NEXT:    vmv.v.v v8, v16
2088 ; CHECK-NEXT:    ret
2089 entry:
2090   %a = call <vscale x 64 x i8> @llvm.riscv.vrgather.vx.nxv64i8.i64(
2091     <vscale x 64 x i8> undef,
2092     <vscale x 64 x i8> %0,
2093     i64 %1,
2094     i64 %2)
2096   ret <vscale x 64 x i8> %a
2099 declare <vscale x 64 x i8> @llvm.riscv.vrgather.vx.mask.nxv64i8.i64(
2100   <vscale x 64 x i8>,
2101   <vscale x 64 x i8>,
2102   i64,
2103   <vscale x 64 x i1>,
2104   i64,
2105   i64);
2107 define <vscale x 64 x i8> @intrinsic_vrgather_mask_vx_nxv64i8_nxv64i8_i64(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, i64 %2, <vscale x 64 x i1> %3, i64 %4) nounwind {
2108 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv64i8_nxv64i8_i64:
2109 ; CHECK:       # %bb.0: # %entry
2110 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
2111 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
2112 ; CHECK-NEXT:    ret
2113 entry:
2114   %a = call <vscale x 64 x i8> @llvm.riscv.vrgather.vx.mask.nxv64i8.i64(
2115     <vscale x 64 x i8> %0,
2116     <vscale x 64 x i8> %1,
2117     i64 %2,
2118     <vscale x 64 x i1> %3,
2119     i64 %4, i64 1)
2121   ret <vscale x 64 x i8> %a
2124 declare <vscale x 1 x i16> @llvm.riscv.vrgather.vx.nxv1i16.i64(
2125   <vscale x 1 x i16>,
2126   <vscale x 1 x i16>,
2127   i64,
2128   i64);
2130 define <vscale x 1 x i16> @intrinsic_vrgather_vx_nxv1i16_nxv1i16_i64(<vscale x 1 x i16> %0, i64 %1, i64 %2) nounwind {
2131 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1i16_nxv1i16_i64:
2132 ; CHECK:       # %bb.0: # %entry
2133 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
2134 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2135 ; CHECK-NEXT:    vmv1r.v v8, v9
2136 ; CHECK-NEXT:    ret
2137 entry:
2138   %a = call <vscale x 1 x i16> @llvm.riscv.vrgather.vx.nxv1i16.i64(
2139     <vscale x 1 x i16> undef,
2140     <vscale x 1 x i16> %0,
2141     i64 %1,
2142     i64 %2)
2144   ret <vscale x 1 x i16> %a
2147 declare <vscale x 1 x i16> @llvm.riscv.vrgather.vx.mask.nxv1i16.i64(
2148   <vscale x 1 x i16>,
2149   <vscale x 1 x i16>,
2150   i64,
2151   <vscale x 1 x i1>,
2152   i64,
2153   i64);
2155 define <vscale x 1 x i16> @intrinsic_vrgather_mask_vx_nxv1i16_nxv1i16_i64(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
2156 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1i16_nxv1i16_i64:
2157 ; CHECK:       # %bb.0: # %entry
2158 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
2159 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2160 ; CHECK-NEXT:    ret
2161 entry:
2162   %a = call <vscale x 1 x i16> @llvm.riscv.vrgather.vx.mask.nxv1i16.i64(
2163     <vscale x 1 x i16> %0,
2164     <vscale x 1 x i16> %1,
2165     i64 %2,
2166     <vscale x 1 x i1> %3,
2167     i64 %4, i64 1)
2169   ret <vscale x 1 x i16> %a
2172 declare <vscale x 2 x i16> @llvm.riscv.vrgather.vx.nxv2i16.i64(
2173   <vscale x 2 x i16>,
2174   <vscale x 2 x i16>,
2175   i64,
2176   i64);
2178 define <vscale x 2 x i16> @intrinsic_vrgather_vx_nxv2i16_nxv2i16_i64(<vscale x 2 x i16> %0, i64 %1, i64 %2) nounwind {
2179 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2i16_nxv2i16_i64:
2180 ; CHECK:       # %bb.0: # %entry
2181 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
2182 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2183 ; CHECK-NEXT:    vmv1r.v v8, v9
2184 ; CHECK-NEXT:    ret
2185 entry:
2186   %a = call <vscale x 2 x i16> @llvm.riscv.vrgather.vx.nxv2i16.i64(
2187     <vscale x 2 x i16> undef,
2188     <vscale x 2 x i16> %0,
2189     i64 %1,
2190     i64 %2)
2192   ret <vscale x 2 x i16> %a
2195 declare <vscale x 2 x i16> @llvm.riscv.vrgather.vx.mask.nxv2i16.i64(
2196   <vscale x 2 x i16>,
2197   <vscale x 2 x i16>,
2198   i64,
2199   <vscale x 2 x i1>,
2200   i64,
2201   i64);
2203 define <vscale x 2 x i16> @intrinsic_vrgather_mask_vx_nxv2i16_nxv2i16_i64(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
2204 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2i16_nxv2i16_i64:
2205 ; CHECK:       # %bb.0: # %entry
2206 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
2207 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2208 ; CHECK-NEXT:    ret
2209 entry:
2210   %a = call <vscale x 2 x i16> @llvm.riscv.vrgather.vx.mask.nxv2i16.i64(
2211     <vscale x 2 x i16> %0,
2212     <vscale x 2 x i16> %1,
2213     i64 %2,
2214     <vscale x 2 x i1> %3,
2215     i64 %4, i64 1)
2217   ret <vscale x 2 x i16> %a
2220 declare <vscale x 4 x i16> @llvm.riscv.vrgather.vx.nxv4i16.i64(
2221   <vscale x 4 x i16>,
2222   <vscale x 4 x i16>,
2223   i64,
2224   i64);
2226 define <vscale x 4 x i16> @intrinsic_vrgather_vx_nxv4i16_nxv4i16_i64(<vscale x 4 x i16> %0, i64 %1, i64 %2) nounwind {
2227 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4i16_nxv4i16_i64:
2228 ; CHECK:       # %bb.0: # %entry
2229 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
2230 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2231 ; CHECK-NEXT:    vmv.v.v v8, v9
2232 ; CHECK-NEXT:    ret
2233 entry:
2234   %a = call <vscale x 4 x i16> @llvm.riscv.vrgather.vx.nxv4i16.i64(
2235     <vscale x 4 x i16> undef,
2236     <vscale x 4 x i16> %0,
2237     i64 %1,
2238     i64 %2)
2240   ret <vscale x 4 x i16> %a
2243 declare <vscale x 4 x i16> @llvm.riscv.vrgather.vx.mask.nxv4i16.i64(
2244   <vscale x 4 x i16>,
2245   <vscale x 4 x i16>,
2246   i64,
2247   <vscale x 4 x i1>,
2248   i64,
2249   i64);
2251 define <vscale x 4 x i16> @intrinsic_vrgather_mask_vx_nxv4i16_nxv4i16_i64(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
2252 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4i16_nxv4i16_i64:
2253 ; CHECK:       # %bb.0: # %entry
2254 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
2255 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2256 ; CHECK-NEXT:    ret
2257 entry:
2258   %a = call <vscale x 4 x i16> @llvm.riscv.vrgather.vx.mask.nxv4i16.i64(
2259     <vscale x 4 x i16> %0,
2260     <vscale x 4 x i16> %1,
2261     i64 %2,
2262     <vscale x 4 x i1> %3,
2263     i64 %4, i64 1)
2265   ret <vscale x 4 x i16> %a
2268 declare <vscale x 8 x i16> @llvm.riscv.vrgather.vx.nxv8i16.i64(
2269   <vscale x 8 x i16>,
2270   <vscale x 8 x i16>,
2271   i64,
2272   i64);
2274 define <vscale x 8 x i16> @intrinsic_vrgather_vx_nxv8i16_nxv8i16_i64(<vscale x 8 x i16> %0, i64 %1, i64 %2) nounwind {
2275 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8i16_nxv8i16_i64:
2276 ; CHECK:       # %bb.0: # %entry
2277 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
2278 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
2279 ; CHECK-NEXT:    vmv.v.v v8, v10
2280 ; CHECK-NEXT:    ret
2281 entry:
2282   %a = call <vscale x 8 x i16> @llvm.riscv.vrgather.vx.nxv8i16.i64(
2283     <vscale x 8 x i16> undef,
2284     <vscale x 8 x i16> %0,
2285     i64 %1,
2286     i64 %2)
2288   ret <vscale x 8 x i16> %a
2291 declare <vscale x 8 x i16> @llvm.riscv.vrgather.vx.mask.nxv8i16.i64(
2292   <vscale x 8 x i16>,
2293   <vscale x 8 x i16>,
2294   i64,
2295   <vscale x 8 x i1>,
2296   i64,
2297   i64);
2299 define <vscale x 8 x i16> @intrinsic_vrgather_mask_vx_nxv8i16_nxv8i16_i64(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
2300 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8i16_nxv8i16_i64:
2301 ; CHECK:       # %bb.0: # %entry
2302 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
2303 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
2304 ; CHECK-NEXT:    ret
2305 entry:
2306   %a = call <vscale x 8 x i16> @llvm.riscv.vrgather.vx.mask.nxv8i16.i64(
2307     <vscale x 8 x i16> %0,
2308     <vscale x 8 x i16> %1,
2309     i64 %2,
2310     <vscale x 8 x i1> %3,
2311     i64 %4, i64 1)
2313   ret <vscale x 8 x i16> %a
2316 declare <vscale x 16 x i16> @llvm.riscv.vrgather.vx.nxv16i16.i64(
2317   <vscale x 16 x i16>,
2318   <vscale x 16 x i16>,
2319   i64,
2320   i64);
2322 define <vscale x 16 x i16> @intrinsic_vrgather_vx_nxv16i16_nxv16i16_i64(<vscale x 16 x i16> %0, i64 %1, i64 %2) nounwind {
2323 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv16i16_nxv16i16_i64:
2324 ; CHECK:       # %bb.0: # %entry
2325 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
2326 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
2327 ; CHECK-NEXT:    vmv.v.v v8, v12
2328 ; CHECK-NEXT:    ret
2329 entry:
2330   %a = call <vscale x 16 x i16> @llvm.riscv.vrgather.vx.nxv16i16.i64(
2331     <vscale x 16 x i16> undef,
2332     <vscale x 16 x i16> %0,
2333     i64 %1,
2334     i64 %2)
2336   ret <vscale x 16 x i16> %a
2339 declare <vscale x 16 x i16> @llvm.riscv.vrgather.vx.mask.nxv16i16.i64(
2340   <vscale x 16 x i16>,
2341   <vscale x 16 x i16>,
2342   i64,
2343   <vscale x 16 x i1>,
2344   i64,
2345   i64);
2347 define <vscale x 16 x i16> @intrinsic_vrgather_mask_vx_nxv16i16_nxv16i16_i64(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i64 %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
2348 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv16i16_nxv16i16_i64:
2349 ; CHECK:       # %bb.0: # %entry
2350 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
2351 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
2352 ; CHECK-NEXT:    ret
2353 entry:
2354   %a = call <vscale x 16 x i16> @llvm.riscv.vrgather.vx.mask.nxv16i16.i64(
2355     <vscale x 16 x i16> %0,
2356     <vscale x 16 x i16> %1,
2357     i64 %2,
2358     <vscale x 16 x i1> %3,
2359     i64 %4, i64 1)
2361   ret <vscale x 16 x i16> %a
2364 declare <vscale x 32 x i16> @llvm.riscv.vrgather.vx.nxv32i16.i64(
2365   <vscale x 32 x i16>,
2366   <vscale x 32 x i16>,
2367   i64,
2368   i64);
2370 define <vscale x 32 x i16> @intrinsic_vrgather_vx_nxv32i16_nxv32i16_i64(<vscale x 32 x i16> %0, i64 %1, i64 %2) nounwind {
2371 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv32i16_nxv32i16_i64:
2372 ; CHECK:       # %bb.0: # %entry
2373 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
2374 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
2375 ; CHECK-NEXT:    vmv.v.v v8, v16
2376 ; CHECK-NEXT:    ret
2377 entry:
2378   %a = call <vscale x 32 x i16> @llvm.riscv.vrgather.vx.nxv32i16.i64(
2379     <vscale x 32 x i16> undef,
2380     <vscale x 32 x i16> %0,
2381     i64 %1,
2382     i64 %2)
2384   ret <vscale x 32 x i16> %a
2387 declare <vscale x 32 x i16> @llvm.riscv.vrgather.vx.mask.nxv32i16.i64(
2388   <vscale x 32 x i16>,
2389   <vscale x 32 x i16>,
2390   i64,
2391   <vscale x 32 x i1>,
2392   i64,
2393   i64);
2395 define <vscale x 32 x i16> @intrinsic_vrgather_mask_vx_nxv32i16_nxv32i16_i64(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i64 %2, <vscale x 32 x i1> %3, i64 %4) nounwind {
2396 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv32i16_nxv32i16_i64:
2397 ; CHECK:       # %bb.0: # %entry
2398 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
2399 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
2400 ; CHECK-NEXT:    ret
2401 entry:
2402   %a = call <vscale x 32 x i16> @llvm.riscv.vrgather.vx.mask.nxv32i16.i64(
2403     <vscale x 32 x i16> %0,
2404     <vscale x 32 x i16> %1,
2405     i64 %2,
2406     <vscale x 32 x i1> %3,
2407     i64 %4, i64 1)
2409   ret <vscale x 32 x i16> %a
2412 declare <vscale x 1 x i32> @llvm.riscv.vrgather.vx.nxv1i32.i64(
2413   <vscale x 1 x i32>,
2414   <vscale x 1 x i32>,
2415   i64,
2416   i64);
2418 define <vscale x 1 x i32> @intrinsic_vrgather_vx_nxv1i32_nxv1i32_i64(<vscale x 1 x i32> %0, i64 %1, i64 %2) nounwind {
2419 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1i32_nxv1i32_i64:
2420 ; CHECK:       # %bb.0: # %entry
2421 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
2422 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2423 ; CHECK-NEXT:    vmv1r.v v8, v9
2424 ; CHECK-NEXT:    ret
2425 entry:
2426   %a = call <vscale x 1 x i32> @llvm.riscv.vrgather.vx.nxv1i32.i64(
2427     <vscale x 1 x i32> undef,
2428     <vscale x 1 x i32> %0,
2429     i64 %1,
2430     i64 %2)
2432   ret <vscale x 1 x i32> %a
2435 declare <vscale x 1 x i32> @llvm.riscv.vrgather.vx.mask.nxv1i32.i64(
2436   <vscale x 1 x i32>,
2437   <vscale x 1 x i32>,
2438   i64,
2439   <vscale x 1 x i1>,
2440   i64,
2441   i64);
2443 define <vscale x 1 x i32> @intrinsic_vrgather_mask_vx_nxv1i32_nxv1i32_i64(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
2444 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1i32_nxv1i32_i64:
2445 ; CHECK:       # %bb.0: # %entry
2446 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
2447 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2448 ; CHECK-NEXT:    ret
2449 entry:
2450   %a = call <vscale x 1 x i32> @llvm.riscv.vrgather.vx.mask.nxv1i32.i64(
2451     <vscale x 1 x i32> %0,
2452     <vscale x 1 x i32> %1,
2453     i64 %2,
2454     <vscale x 1 x i1> %3,
2455     i64 %4, i64 1)
2457   ret <vscale x 1 x i32> %a
2460 declare <vscale x 2 x i32> @llvm.riscv.vrgather.vx.nxv2i32.i64(
2461   <vscale x 2 x i32>,
2462   <vscale x 2 x i32>,
2463   i64,
2464   i64);
2466 define <vscale x 2 x i32> @intrinsic_vrgather_vx_nxv2i32_nxv2i32_i64(<vscale x 2 x i32> %0, i64 %1, i64 %2) nounwind {
2467 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2i32_nxv2i32_i64:
2468 ; CHECK:       # %bb.0: # %entry
2469 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
2470 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2471 ; CHECK-NEXT:    vmv.v.v v8, v9
2472 ; CHECK-NEXT:    ret
2473 entry:
2474   %a = call <vscale x 2 x i32> @llvm.riscv.vrgather.vx.nxv2i32.i64(
2475     <vscale x 2 x i32> undef,
2476     <vscale x 2 x i32> %0,
2477     i64 %1,
2478     i64 %2)
2480   ret <vscale x 2 x i32> %a
2483 declare <vscale x 2 x i32> @llvm.riscv.vrgather.vx.mask.nxv2i32.i64(
2484   <vscale x 2 x i32>,
2485   <vscale x 2 x i32>,
2486   i64,
2487   <vscale x 2 x i1>,
2488   i64,
2489   i64);
2491 define <vscale x 2 x i32> @intrinsic_vrgather_mask_vx_nxv2i32_nxv2i32_i64(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
2492 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2i32_nxv2i32_i64:
2493 ; CHECK:       # %bb.0: # %entry
2494 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
2495 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2496 ; CHECK-NEXT:    ret
2497 entry:
2498   %a = call <vscale x 2 x i32> @llvm.riscv.vrgather.vx.mask.nxv2i32.i64(
2499     <vscale x 2 x i32> %0,
2500     <vscale x 2 x i32> %1,
2501     i64 %2,
2502     <vscale x 2 x i1> %3,
2503     i64 %4, i64 1)
2505   ret <vscale x 2 x i32> %a
2508 declare <vscale x 4 x i32> @llvm.riscv.vrgather.vx.nxv4i32.i64(
2509   <vscale x 4 x i32>,
2510   <vscale x 4 x i32>,
2511   i64,
2512   i64);
2514 define <vscale x 4 x i32> @intrinsic_vrgather_vx_nxv4i32_nxv4i32_i64(<vscale x 4 x i32> %0, i64 %1, i64 %2) nounwind {
2515 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4i32_nxv4i32_i64:
2516 ; CHECK:       # %bb.0: # %entry
2517 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
2518 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
2519 ; CHECK-NEXT:    vmv.v.v v8, v10
2520 ; CHECK-NEXT:    ret
2521 entry:
2522   %a = call <vscale x 4 x i32> @llvm.riscv.vrgather.vx.nxv4i32.i64(
2523     <vscale x 4 x i32> undef,
2524     <vscale x 4 x i32> %0,
2525     i64 %1,
2526     i64 %2)
2528   ret <vscale x 4 x i32> %a
2531 declare <vscale x 4 x i32> @llvm.riscv.vrgather.vx.mask.nxv4i32.i64(
2532   <vscale x 4 x i32>,
2533   <vscale x 4 x i32>,
2534   i64,
2535   <vscale x 4 x i1>,
2536   i64,
2537   i64);
2539 define <vscale x 4 x i32> @intrinsic_vrgather_mask_vx_nxv4i32_nxv4i32_i64(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
2540 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4i32_nxv4i32_i64:
2541 ; CHECK:       # %bb.0: # %entry
2542 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
2543 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
2544 ; CHECK-NEXT:    ret
2545 entry:
2546   %a = call <vscale x 4 x i32> @llvm.riscv.vrgather.vx.mask.nxv4i32.i64(
2547     <vscale x 4 x i32> %0,
2548     <vscale x 4 x i32> %1,
2549     i64 %2,
2550     <vscale x 4 x i1> %3,
2551     i64 %4, i64 1)
2553   ret <vscale x 4 x i32> %a
2556 declare <vscale x 8 x i32> @llvm.riscv.vrgather.vx.nxv8i32.i64(
2557   <vscale x 8 x i32>,
2558   <vscale x 8 x i32>,
2559   i64,
2560   i64);
2562 define <vscale x 8 x i32> @intrinsic_vrgather_vx_nxv8i32_nxv8i32_i64(<vscale x 8 x i32> %0, i64 %1, i64 %2) nounwind {
2563 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8i32_nxv8i32_i64:
2564 ; CHECK:       # %bb.0: # %entry
2565 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
2566 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
2567 ; CHECK-NEXT:    vmv.v.v v8, v12
2568 ; CHECK-NEXT:    ret
2569 entry:
2570   %a = call <vscale x 8 x i32> @llvm.riscv.vrgather.vx.nxv8i32.i64(
2571     <vscale x 8 x i32> undef,
2572     <vscale x 8 x i32> %0,
2573     i64 %1,
2574     i64 %2)
2576   ret <vscale x 8 x i32> %a
2579 declare <vscale x 8 x i32> @llvm.riscv.vrgather.vx.mask.nxv8i32.i64(
2580   <vscale x 8 x i32>,
2581   <vscale x 8 x i32>,
2582   i64,
2583   <vscale x 8 x i1>,
2584   i64,
2585   i64);
2587 define <vscale x 8 x i32> @intrinsic_vrgather_mask_vx_nxv8i32_nxv8i32_i64(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
2588 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8i32_nxv8i32_i64:
2589 ; CHECK:       # %bb.0: # %entry
2590 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
2591 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
2592 ; CHECK-NEXT:    ret
2593 entry:
2594   %a = call <vscale x 8 x i32> @llvm.riscv.vrgather.vx.mask.nxv8i32.i64(
2595     <vscale x 8 x i32> %0,
2596     <vscale x 8 x i32> %1,
2597     i64 %2,
2598     <vscale x 8 x i1> %3,
2599     i64 %4, i64 1)
2601   ret <vscale x 8 x i32> %a
2604 declare <vscale x 16 x i32> @llvm.riscv.vrgather.vx.nxv16i32.i64(
2605   <vscale x 16 x i32>,
2606   <vscale x 16 x i32>,
2607   i64,
2608   i64);
2610 define <vscale x 16 x i32> @intrinsic_vrgather_vx_nxv16i32_nxv16i32_i64(<vscale x 16 x i32> %0, i64 %1, i64 %2) nounwind {
2611 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv16i32_nxv16i32_i64:
2612 ; CHECK:       # %bb.0: # %entry
2613 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
2614 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
2615 ; CHECK-NEXT:    vmv.v.v v8, v16
2616 ; CHECK-NEXT:    ret
2617 entry:
2618   %a = call <vscale x 16 x i32> @llvm.riscv.vrgather.vx.nxv16i32.i64(
2619     <vscale x 16 x i32> undef,
2620     <vscale x 16 x i32> %0,
2621     i64 %1,
2622     i64 %2)
2624   ret <vscale x 16 x i32> %a
2627 declare <vscale x 16 x i32> @llvm.riscv.vrgather.vx.mask.nxv16i32.i64(
2628   <vscale x 16 x i32>,
2629   <vscale x 16 x i32>,
2630   i64,
2631   <vscale x 16 x i1>,
2632   i64,
2633   i64);
2635 define <vscale x 16 x i32> @intrinsic_vrgather_mask_vx_nxv16i32_nxv16i32_i64(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, i64 %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
2636 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv16i32_nxv16i32_i64:
2637 ; CHECK:       # %bb.0: # %entry
2638 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
2639 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
2640 ; CHECK-NEXT:    ret
2641 entry:
2642   %a = call <vscale x 16 x i32> @llvm.riscv.vrgather.vx.mask.nxv16i32.i64(
2643     <vscale x 16 x i32> %0,
2644     <vscale x 16 x i32> %1,
2645     i64 %2,
2646     <vscale x 16 x i1> %3,
2647     i64 %4, i64 1)
2649   ret <vscale x 16 x i32> %a
2652 declare <vscale x 1 x i64> @llvm.riscv.vrgather.vx.nxv1i64.i64(
2653   <vscale x 1 x i64>,
2654   <vscale x 1 x i64>,
2655   i64,
2656   i64);
2658 define <vscale x 1 x i64> @intrinsic_vrgather_vx_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, i64 %1, i64 %2) nounwind {
2659 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1i64_nxv1i64_i64:
2660 ; CHECK:       # %bb.0: # %entry
2661 ; CHECK-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
2662 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2663 ; CHECK-NEXT:    vmv.v.v v8, v9
2664 ; CHECK-NEXT:    ret
2665 entry:
2666   %a = call <vscale x 1 x i64> @llvm.riscv.vrgather.vx.nxv1i64.i64(
2667     <vscale x 1 x i64> undef,
2668     <vscale x 1 x i64> %0,
2669     i64 %1,
2670     i64 %2)
2672   ret <vscale x 1 x i64> %a
2675 declare <vscale x 1 x i64> @llvm.riscv.vrgather.vx.mask.nxv1i64.i64(
2676   <vscale x 1 x i64>,
2677   <vscale x 1 x i64>,
2678   i64,
2679   <vscale x 1 x i1>,
2680   i64,
2681   i64);
2683 define <vscale x 1 x i64> @intrinsic_vrgather_mask_vx_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
2684 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1i64_nxv1i64_i64:
2685 ; CHECK:       # %bb.0: # %entry
2686 ; CHECK-NEXT:    vsetvli zero, a1, e64, m1, ta, mu
2687 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2688 ; CHECK-NEXT:    ret
2689 entry:
2690   %a = call <vscale x 1 x i64> @llvm.riscv.vrgather.vx.mask.nxv1i64.i64(
2691     <vscale x 1 x i64> %0,
2692     <vscale x 1 x i64> %1,
2693     i64 %2,
2694     <vscale x 1 x i1> %3,
2695     i64 %4, i64 1)
2697   ret <vscale x 1 x i64> %a
2700 declare <vscale x 2 x i64> @llvm.riscv.vrgather.vx.nxv2i64.i64(
2701   <vscale x 2 x i64>,
2702   <vscale x 2 x i64>,
2703   i64,
2704   i64);
2706 define <vscale x 2 x i64> @intrinsic_vrgather_vx_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, i64 %1, i64 %2) nounwind {
2707 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2i64_nxv2i64_i64:
2708 ; CHECK:       # %bb.0: # %entry
2709 ; CHECK-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
2710 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
2711 ; CHECK-NEXT:    vmv.v.v v8, v10
2712 ; CHECK-NEXT:    ret
2713 entry:
2714   %a = call <vscale x 2 x i64> @llvm.riscv.vrgather.vx.nxv2i64.i64(
2715     <vscale x 2 x i64> undef,
2716     <vscale x 2 x i64> %0,
2717     i64 %1,
2718     i64 %2)
2720   ret <vscale x 2 x i64> %a
2723 declare <vscale x 2 x i64> @llvm.riscv.vrgather.vx.mask.nxv2i64.i64(
2724   <vscale x 2 x i64>,
2725   <vscale x 2 x i64>,
2726   i64,
2727   <vscale x 2 x i1>,
2728   i64,
2729   i64);
2731 define <vscale x 2 x i64> @intrinsic_vrgather_mask_vx_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
2732 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2i64_nxv2i64_i64:
2733 ; CHECK:       # %bb.0: # %entry
2734 ; CHECK-NEXT:    vsetvli zero, a1, e64, m2, ta, mu
2735 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
2736 ; CHECK-NEXT:    ret
2737 entry:
2738   %a = call <vscale x 2 x i64> @llvm.riscv.vrgather.vx.mask.nxv2i64.i64(
2739     <vscale x 2 x i64> %0,
2740     <vscale x 2 x i64> %1,
2741     i64 %2,
2742     <vscale x 2 x i1> %3,
2743     i64 %4, i64 1)
2745   ret <vscale x 2 x i64> %a
2748 declare <vscale x 4 x i64> @llvm.riscv.vrgather.vx.nxv4i64.i64(
2749   <vscale x 4 x i64>,
2750   <vscale x 4 x i64>,
2751   i64,
2752   i64);
2754 define <vscale x 4 x i64> @intrinsic_vrgather_vx_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, i64 %1, i64 %2) nounwind {
2755 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4i64_nxv4i64_i64:
2756 ; CHECK:       # %bb.0: # %entry
2757 ; CHECK-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
2758 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
2759 ; CHECK-NEXT:    vmv.v.v v8, v12
2760 ; CHECK-NEXT:    ret
2761 entry:
2762   %a = call <vscale x 4 x i64> @llvm.riscv.vrgather.vx.nxv4i64.i64(
2763     <vscale x 4 x i64> undef,
2764     <vscale x 4 x i64> %0,
2765     i64 %1,
2766     i64 %2)
2768   ret <vscale x 4 x i64> %a
2771 declare <vscale x 4 x i64> @llvm.riscv.vrgather.vx.mask.nxv4i64.i64(
2772   <vscale x 4 x i64>,
2773   <vscale x 4 x i64>,
2774   i64,
2775   <vscale x 4 x i1>,
2776   i64,
2777   i64);
2779 define <vscale x 4 x i64> @intrinsic_vrgather_mask_vx_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
2780 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4i64_nxv4i64_i64:
2781 ; CHECK:       # %bb.0: # %entry
2782 ; CHECK-NEXT:    vsetvli zero, a1, e64, m4, ta, mu
2783 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
2784 ; CHECK-NEXT:    ret
2785 entry:
2786   %a = call <vscale x 4 x i64> @llvm.riscv.vrgather.vx.mask.nxv4i64.i64(
2787     <vscale x 4 x i64> %0,
2788     <vscale x 4 x i64> %1,
2789     i64 %2,
2790     <vscale x 4 x i1> %3,
2791     i64 %4, i64 1)
2793   ret <vscale x 4 x i64> %a
2796 declare <vscale x 8 x i64> @llvm.riscv.vrgather.vx.nxv8i64.i64(
2797   <vscale x 8 x i64>,
2798   <vscale x 8 x i64>,
2799   i64,
2800   i64);
2802 define <vscale x 8 x i64> @intrinsic_vrgather_vx_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, i64 %1, i64 %2) nounwind {
2803 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8i64_nxv8i64_i64:
2804 ; CHECK:       # %bb.0: # %entry
2805 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
2806 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
2807 ; CHECK-NEXT:    vmv.v.v v8, v16
2808 ; CHECK-NEXT:    ret
2809 entry:
2810   %a = call <vscale x 8 x i64> @llvm.riscv.vrgather.vx.nxv8i64.i64(
2811     <vscale x 8 x i64> undef,
2812     <vscale x 8 x i64> %0,
2813     i64 %1,
2814     i64 %2)
2816   ret <vscale x 8 x i64> %a
2819 declare <vscale x 8 x i64> @llvm.riscv.vrgather.vx.mask.nxv8i64.i64(
2820   <vscale x 8 x i64>,
2821   <vscale x 8 x i64>,
2822   i64,
2823   <vscale x 8 x i1>,
2824   i64,
2825   i64);
2827 define <vscale x 8 x i64> @intrinsic_vrgather_mask_vx_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
2828 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8i64_nxv8i64_i64:
2829 ; CHECK:       # %bb.0: # %entry
2830 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
2831 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
2832 ; CHECK-NEXT:    ret
2833 entry:
2834   %a = call <vscale x 8 x i64> @llvm.riscv.vrgather.vx.mask.nxv8i64.i64(
2835     <vscale x 8 x i64> %0,
2836     <vscale x 8 x i64> %1,
2837     i64 %2,
2838     <vscale x 8 x i1> %3,
2839     i64 %4, i64 1)
2841   ret <vscale x 8 x i64> %a
2844 declare <vscale x 1 x half> @llvm.riscv.vrgather.vx.nxv1f16.i64(
2845   <vscale x 1 x half>,
2846   <vscale x 1 x half>,
2847   i64,
2848   i64);
2850 define <vscale x 1 x half> @intrinsic_vrgather_vx_nxv1f16_nxv1f16_i64(<vscale x 1 x half> %0, i64 %1, i64 %2) nounwind {
2851 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1f16_nxv1f16_i64:
2852 ; CHECK:       # %bb.0: # %entry
2853 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
2854 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2855 ; CHECK-NEXT:    vmv1r.v v8, v9
2856 ; CHECK-NEXT:    ret
2857 entry:
2858   %a = call <vscale x 1 x half> @llvm.riscv.vrgather.vx.nxv1f16.i64(
2859     <vscale x 1 x half> undef,
2860     <vscale x 1 x half> %0,
2861     i64 %1,
2862     i64 %2)
2864   ret <vscale x 1 x half> %a
2867 declare <vscale x 1 x half> @llvm.riscv.vrgather.vx.mask.nxv1f16.i64(
2868   <vscale x 1 x half>,
2869   <vscale x 1 x half>,
2870   i64,
2871   <vscale x 1 x i1>,
2872   i64,
2873   i64);
2875 define <vscale x 1 x half> @intrinsic_vrgather_mask_vx_nxv1f16_nxv1f16_i64(<vscale x 1 x half> %0, <vscale x 1 x half> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
2876 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1f16_nxv1f16_i64:
2877 ; CHECK:       # %bb.0: # %entry
2878 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
2879 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2880 ; CHECK-NEXT:    ret
2881 entry:
2882   %a = call <vscale x 1 x half> @llvm.riscv.vrgather.vx.mask.nxv1f16.i64(
2883     <vscale x 1 x half> %0,
2884     <vscale x 1 x half> %1,
2885     i64 %2,
2886     <vscale x 1 x i1> %3,
2887     i64 %4, i64 1)
2889   ret <vscale x 1 x half> %a
2892 declare <vscale x 2 x half> @llvm.riscv.vrgather.vx.nxv2f16.i64(
2893   <vscale x 2 x half>,
2894   <vscale x 2 x half>,
2895   i64,
2896   i64);
2898 define <vscale x 2 x half> @intrinsic_vrgather_vx_nxv2f16_nxv2f16_i64(<vscale x 2 x half> %0, i64 %1, i64 %2) nounwind {
2899 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2f16_nxv2f16_i64:
2900 ; CHECK:       # %bb.0: # %entry
2901 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
2902 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2903 ; CHECK-NEXT:    vmv1r.v v8, v9
2904 ; CHECK-NEXT:    ret
2905 entry:
2906   %a = call <vscale x 2 x half> @llvm.riscv.vrgather.vx.nxv2f16.i64(
2907     <vscale x 2 x half> undef,
2908     <vscale x 2 x half> %0,
2909     i64 %1,
2910     i64 %2)
2912   ret <vscale x 2 x half> %a
2915 declare <vscale x 2 x half> @llvm.riscv.vrgather.vx.mask.nxv2f16.i64(
2916   <vscale x 2 x half>,
2917   <vscale x 2 x half>,
2918   i64,
2919   <vscale x 2 x i1>,
2920   i64,
2921   i64);
2923 define <vscale x 2 x half> @intrinsic_vrgather_mask_vx_nxv2f16_nxv2f16_i64(<vscale x 2 x half> %0, <vscale x 2 x half> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
2924 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2f16_nxv2f16_i64:
2925 ; CHECK:       # %bb.0: # %entry
2926 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
2927 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2928 ; CHECK-NEXT:    ret
2929 entry:
2930   %a = call <vscale x 2 x half> @llvm.riscv.vrgather.vx.mask.nxv2f16.i64(
2931     <vscale x 2 x half> %0,
2932     <vscale x 2 x half> %1,
2933     i64 %2,
2934     <vscale x 2 x i1> %3,
2935     i64 %4, i64 1)
2937   ret <vscale x 2 x half> %a
2940 declare <vscale x 4 x half> @llvm.riscv.vrgather.vx.nxv4f16.i64(
2941   <vscale x 4 x half>,
2942   <vscale x 4 x half>,
2943   i64,
2944   i64);
2946 define <vscale x 4 x half> @intrinsic_vrgather_vx_nxv4f16_nxv4f16_i64(<vscale x 4 x half> %0, i64 %1, i64 %2) nounwind {
2947 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4f16_nxv4f16_i64:
2948 ; CHECK:       # %bb.0: # %entry
2949 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
2950 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
2951 ; CHECK-NEXT:    vmv.v.v v8, v9
2952 ; CHECK-NEXT:    ret
2953 entry:
2954   %a = call <vscale x 4 x half> @llvm.riscv.vrgather.vx.nxv4f16.i64(
2955     <vscale x 4 x half> undef,
2956     <vscale x 4 x half> %0,
2957     i64 %1,
2958     i64 %2)
2960   ret <vscale x 4 x half> %a
2963 declare <vscale x 4 x half> @llvm.riscv.vrgather.vx.mask.nxv4f16.i64(
2964   <vscale x 4 x half>,
2965   <vscale x 4 x half>,
2966   i64,
2967   <vscale x 4 x i1>,
2968   i64,
2969   i64);
2971 define <vscale x 4 x half> @intrinsic_vrgather_mask_vx_nxv4f16_nxv4f16_i64(<vscale x 4 x half> %0, <vscale x 4 x half> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
2972 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4f16_nxv4f16_i64:
2973 ; CHECK:       # %bb.0: # %entry
2974 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
2975 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
2976 ; CHECK-NEXT:    ret
2977 entry:
2978   %a = call <vscale x 4 x half> @llvm.riscv.vrgather.vx.mask.nxv4f16.i64(
2979     <vscale x 4 x half> %0,
2980     <vscale x 4 x half> %1,
2981     i64 %2,
2982     <vscale x 4 x i1> %3,
2983     i64 %4, i64 1)
2985   ret <vscale x 4 x half> %a
2988 declare <vscale x 8 x half> @llvm.riscv.vrgather.vx.nxv8f16.i64(
2989   <vscale x 8 x half>,
2990   <vscale x 8 x half>,
2991   i64,
2992   i64);
2994 define <vscale x 8 x half> @intrinsic_vrgather_vx_nxv8f16_nxv8f16_i64(<vscale x 8 x half> %0, i64 %1, i64 %2) nounwind {
2995 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8f16_nxv8f16_i64:
2996 ; CHECK:       # %bb.0: # %entry
2997 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
2998 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
2999 ; CHECK-NEXT:    vmv.v.v v8, v10
3000 ; CHECK-NEXT:    ret
3001 entry:
3002   %a = call <vscale x 8 x half> @llvm.riscv.vrgather.vx.nxv8f16.i64(
3003     <vscale x 8 x half> undef,
3004     <vscale x 8 x half> %0,
3005     i64 %1,
3006     i64 %2)
3008   ret <vscale x 8 x half> %a
3011 declare <vscale x 8 x half> @llvm.riscv.vrgather.vx.mask.nxv8f16.i64(
3012   <vscale x 8 x half>,
3013   <vscale x 8 x half>,
3014   i64,
3015   <vscale x 8 x i1>,
3016   i64,
3017   i64);
3019 define <vscale x 8 x half> @intrinsic_vrgather_mask_vx_nxv8f16_nxv8f16_i64(<vscale x 8 x half> %0, <vscale x 8 x half> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
3020 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8f16_nxv8f16_i64:
3021 ; CHECK:       # %bb.0: # %entry
3022 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
3023 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
3024 ; CHECK-NEXT:    ret
3025 entry:
3026   %a = call <vscale x 8 x half> @llvm.riscv.vrgather.vx.mask.nxv8f16.i64(
3027     <vscale x 8 x half> %0,
3028     <vscale x 8 x half> %1,
3029     i64 %2,
3030     <vscale x 8 x i1> %3,
3031     i64 %4, i64 1)
3033   ret <vscale x 8 x half> %a
3036 declare <vscale x 16 x half> @llvm.riscv.vrgather.vx.nxv16f16.i64(
3037   <vscale x 16 x half>,
3038   <vscale x 16 x half>,
3039   i64,
3040   i64);
3042 define <vscale x 16 x half> @intrinsic_vrgather_vx_nxv16f16_nxv16f16_i64(<vscale x 16 x half> %0, i64 %1, i64 %2) nounwind {
3043 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv16f16_nxv16f16_i64:
3044 ; CHECK:       # %bb.0: # %entry
3045 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
3046 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
3047 ; CHECK-NEXT:    vmv.v.v v8, v12
3048 ; CHECK-NEXT:    ret
3049 entry:
3050   %a = call <vscale x 16 x half> @llvm.riscv.vrgather.vx.nxv16f16.i64(
3051     <vscale x 16 x half> undef,
3052     <vscale x 16 x half> %0,
3053     i64 %1,
3054     i64 %2)
3056   ret <vscale x 16 x half> %a
3059 declare <vscale x 16 x half> @llvm.riscv.vrgather.vx.mask.nxv16f16.i64(
3060   <vscale x 16 x half>,
3061   <vscale x 16 x half>,
3062   i64,
3063   <vscale x 16 x i1>,
3064   i64,
3065   i64);
3067 define <vscale x 16 x half> @intrinsic_vrgather_mask_vx_nxv16f16_nxv16f16_i64(<vscale x 16 x half> %0, <vscale x 16 x half> %1, i64 %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
3068 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv16f16_nxv16f16_i64:
3069 ; CHECK:       # %bb.0: # %entry
3070 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
3071 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
3072 ; CHECK-NEXT:    ret
3073 entry:
3074   %a = call <vscale x 16 x half> @llvm.riscv.vrgather.vx.mask.nxv16f16.i64(
3075     <vscale x 16 x half> %0,
3076     <vscale x 16 x half> %1,
3077     i64 %2,
3078     <vscale x 16 x i1> %3,
3079     i64 %4, i64 1)
3081   ret <vscale x 16 x half> %a
3084 declare <vscale x 32 x half> @llvm.riscv.vrgather.vx.nxv32f16.i64(
3085   <vscale x 32 x half>,
3086   <vscale x 32 x half>,
3087   i64,
3088   i64);
3090 define <vscale x 32 x half> @intrinsic_vrgather_vx_nxv32f16_nxv32f16_i64(<vscale x 32 x half> %0, i64 %1, i64 %2) nounwind {
3091 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv32f16_nxv32f16_i64:
3092 ; CHECK:       # %bb.0: # %entry
3093 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
3094 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
3095 ; CHECK-NEXT:    vmv.v.v v8, v16
3096 ; CHECK-NEXT:    ret
3097 entry:
3098   %a = call <vscale x 32 x half> @llvm.riscv.vrgather.vx.nxv32f16.i64(
3099     <vscale x 32 x half> undef,
3100     <vscale x 32 x half> %0,
3101     i64 %1,
3102     i64 %2)
3104   ret <vscale x 32 x half> %a
3107 declare <vscale x 32 x half> @llvm.riscv.vrgather.vx.mask.nxv32f16.i64(
3108   <vscale x 32 x half>,
3109   <vscale x 32 x half>,
3110   i64,
3111   <vscale x 32 x i1>,
3112   i64,
3113   i64);
3115 define <vscale x 32 x half> @intrinsic_vrgather_mask_vx_nxv32f16_nxv32f16_i64(<vscale x 32 x half> %0, <vscale x 32 x half> %1, i64 %2, <vscale x 32 x i1> %3, i64 %4) nounwind {
3116 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv32f16_nxv32f16_i64:
3117 ; CHECK:       # %bb.0: # %entry
3118 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
3119 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
3120 ; CHECK-NEXT:    ret
3121 entry:
3122   %a = call <vscale x 32 x half> @llvm.riscv.vrgather.vx.mask.nxv32f16.i64(
3123     <vscale x 32 x half> %0,
3124     <vscale x 32 x half> %1,
3125     i64 %2,
3126     <vscale x 32 x i1> %3,
3127     i64 %4, i64 1)
3129   ret <vscale x 32 x half> %a
3132 declare <vscale x 1 x float> @llvm.riscv.vrgather.vx.nxv1f32.i64(
3133   <vscale x 1 x float>,
3134   <vscale x 1 x float>,
3135   i64,
3136   i64);
3138 define <vscale x 1 x float> @intrinsic_vrgather_vx_nxv1f32_nxv1f32_i64(<vscale x 1 x float> %0, i64 %1, i64 %2) nounwind {
3139 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1f32_nxv1f32_i64:
3140 ; CHECK:       # %bb.0: # %entry
3141 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
3142 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
3143 ; CHECK-NEXT:    vmv1r.v v8, v9
3144 ; CHECK-NEXT:    ret
3145 entry:
3146   %a = call <vscale x 1 x float> @llvm.riscv.vrgather.vx.nxv1f32.i64(
3147     <vscale x 1 x float> undef,
3148     <vscale x 1 x float> %0,
3149     i64 %1,
3150     i64 %2)
3152   ret <vscale x 1 x float> %a
3155 declare <vscale x 1 x float> @llvm.riscv.vrgather.vx.mask.nxv1f32.i64(
3156   <vscale x 1 x float>,
3157   <vscale x 1 x float>,
3158   i64,
3159   <vscale x 1 x i1>,
3160   i64,
3161   i64);
3163 define <vscale x 1 x float> @intrinsic_vrgather_mask_vx_nxv1f32_nxv1f32_i64(<vscale x 1 x float> %0, <vscale x 1 x float> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
3164 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1f32_nxv1f32_i64:
3165 ; CHECK:       # %bb.0: # %entry
3166 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
3167 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
3168 ; CHECK-NEXT:    ret
3169 entry:
3170   %a = call <vscale x 1 x float> @llvm.riscv.vrgather.vx.mask.nxv1f32.i64(
3171     <vscale x 1 x float> %0,
3172     <vscale x 1 x float> %1,
3173     i64 %2,
3174     <vscale x 1 x i1> %3,
3175     i64 %4, i64 1)
3177   ret <vscale x 1 x float> %a
3180 declare <vscale x 2 x float> @llvm.riscv.vrgather.vx.nxv2f32.i64(
3181   <vscale x 2 x float>,
3182   <vscale x 2 x float>,
3183   i64,
3184   i64);
3186 define <vscale x 2 x float> @intrinsic_vrgather_vx_nxv2f32_nxv2f32_i64(<vscale x 2 x float> %0, i64 %1, i64 %2) nounwind {
3187 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2f32_nxv2f32_i64:
3188 ; CHECK:       # %bb.0: # %entry
3189 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
3190 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
3191 ; CHECK-NEXT:    vmv.v.v v8, v9
3192 ; CHECK-NEXT:    ret
3193 entry:
3194   %a = call <vscale x 2 x float> @llvm.riscv.vrgather.vx.nxv2f32.i64(
3195     <vscale x 2 x float> undef,
3196     <vscale x 2 x float> %0,
3197     i64 %1,
3198     i64 %2)
3200   ret <vscale x 2 x float> %a
3203 declare <vscale x 2 x float> @llvm.riscv.vrgather.vx.mask.nxv2f32.i64(
3204   <vscale x 2 x float>,
3205   <vscale x 2 x float>,
3206   i64,
3207   <vscale x 2 x i1>,
3208   i64,
3209   i64);
3211 define <vscale x 2 x float> @intrinsic_vrgather_mask_vx_nxv2f32_nxv2f32_i64(<vscale x 2 x float> %0, <vscale x 2 x float> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
3212 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2f32_nxv2f32_i64:
3213 ; CHECK:       # %bb.0: # %entry
3214 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
3215 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
3216 ; CHECK-NEXT:    ret
3217 entry:
3218   %a = call <vscale x 2 x float> @llvm.riscv.vrgather.vx.mask.nxv2f32.i64(
3219     <vscale x 2 x float> %0,
3220     <vscale x 2 x float> %1,
3221     i64 %2,
3222     <vscale x 2 x i1> %3,
3223     i64 %4, i64 1)
3225   ret <vscale x 2 x float> %a
3228 declare <vscale x 4 x float> @llvm.riscv.vrgather.vx.nxv4f32.i64(
3229   <vscale x 4 x float>,
3230   <vscale x 4 x float>,
3231   i64,
3232   i64);
3234 define <vscale x 4 x float> @intrinsic_vrgather_vx_nxv4f32_nxv4f32_i64(<vscale x 4 x float> %0, i64 %1, i64 %2) nounwind {
3235 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4f32_nxv4f32_i64:
3236 ; CHECK:       # %bb.0: # %entry
3237 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
3238 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
3239 ; CHECK-NEXT:    vmv.v.v v8, v10
3240 ; CHECK-NEXT:    ret
3241 entry:
3242   %a = call <vscale x 4 x float> @llvm.riscv.vrgather.vx.nxv4f32.i64(
3243     <vscale x 4 x float> undef,
3244     <vscale x 4 x float> %0,
3245     i64 %1,
3246     i64 %2)
3248   ret <vscale x 4 x float> %a
3251 declare <vscale x 4 x float> @llvm.riscv.vrgather.vx.mask.nxv4f32.i64(
3252   <vscale x 4 x float>,
3253   <vscale x 4 x float>,
3254   i64,
3255   <vscale x 4 x i1>,
3256   i64,
3257   i64);
3259 define <vscale x 4 x float> @intrinsic_vrgather_mask_vx_nxv4f32_nxv4f32_i64(<vscale x 4 x float> %0, <vscale x 4 x float> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
3260 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4f32_nxv4f32_i64:
3261 ; CHECK:       # %bb.0: # %entry
3262 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
3263 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
3264 ; CHECK-NEXT:    ret
3265 entry:
3266   %a = call <vscale x 4 x float> @llvm.riscv.vrgather.vx.mask.nxv4f32.i64(
3267     <vscale x 4 x float> %0,
3268     <vscale x 4 x float> %1,
3269     i64 %2,
3270     <vscale x 4 x i1> %3,
3271     i64 %4, i64 1)
3273   ret <vscale x 4 x float> %a
3276 declare <vscale x 8 x float> @llvm.riscv.vrgather.vx.nxv8f32.i64(
3277   <vscale x 8 x float>,
3278   <vscale x 8 x float>,
3279   i64,
3280   i64);
3282 define <vscale x 8 x float> @intrinsic_vrgather_vx_nxv8f32_nxv8f32_i64(<vscale x 8 x float> %0, i64 %1, i64 %2) nounwind {
3283 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8f32_nxv8f32_i64:
3284 ; CHECK:       # %bb.0: # %entry
3285 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
3286 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
3287 ; CHECK-NEXT:    vmv.v.v v8, v12
3288 ; CHECK-NEXT:    ret
3289 entry:
3290   %a = call <vscale x 8 x float> @llvm.riscv.vrgather.vx.nxv8f32.i64(
3291     <vscale x 8 x float> undef,
3292     <vscale x 8 x float> %0,
3293     i64 %1,
3294     i64 %2)
3296   ret <vscale x 8 x float> %a
3299 declare <vscale x 8 x float> @llvm.riscv.vrgather.vx.mask.nxv8f32.i64(
3300   <vscale x 8 x float>,
3301   <vscale x 8 x float>,
3302   i64,
3303   <vscale x 8 x i1>,
3304   i64,
3305   i64);
3307 define <vscale x 8 x float> @intrinsic_vrgather_mask_vx_nxv8f32_nxv8f32_i64(<vscale x 8 x float> %0, <vscale x 8 x float> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
3308 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8f32_nxv8f32_i64:
3309 ; CHECK:       # %bb.0: # %entry
3310 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
3311 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
3312 ; CHECK-NEXT:    ret
3313 entry:
3314   %a = call <vscale x 8 x float> @llvm.riscv.vrgather.vx.mask.nxv8f32.i64(
3315     <vscale x 8 x float> %0,
3316     <vscale x 8 x float> %1,
3317     i64 %2,
3318     <vscale x 8 x i1> %3,
3319     i64 %4, i64 1)
3321   ret <vscale x 8 x float> %a
3324 declare <vscale x 16 x float> @llvm.riscv.vrgather.vx.nxv16f32.i64(
3325   <vscale x 16 x float>,
3326   <vscale x 16 x float>,
3327   i64,
3328   i64);
3330 define <vscale x 16 x float> @intrinsic_vrgather_vx_nxv16f32_nxv16f32_i64(<vscale x 16 x float> %0, i64 %1, i64 %2) nounwind {
3331 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv16f32_nxv16f32_i64:
3332 ; CHECK:       # %bb.0: # %entry
3333 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
3334 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
3335 ; CHECK-NEXT:    vmv.v.v v8, v16
3336 ; CHECK-NEXT:    ret
3337 entry:
3338   %a = call <vscale x 16 x float> @llvm.riscv.vrgather.vx.nxv16f32.i64(
3339     <vscale x 16 x float> undef,
3340     <vscale x 16 x float> %0,
3341     i64 %1,
3342     i64 %2)
3344   ret <vscale x 16 x float> %a
3347 declare <vscale x 16 x float> @llvm.riscv.vrgather.vx.mask.nxv16f32.i64(
3348   <vscale x 16 x float>,
3349   <vscale x 16 x float>,
3350   i64,
3351   <vscale x 16 x i1>,
3352   i64,
3353   i64);
3355 define <vscale x 16 x float> @intrinsic_vrgather_mask_vx_nxv16f32_nxv16f32_i64(<vscale x 16 x float> %0, <vscale x 16 x float> %1, i64 %2, <vscale x 16 x i1> %3, i64 %4) nounwind {
3356 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv16f32_nxv16f32_i64:
3357 ; CHECK:       # %bb.0: # %entry
3358 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
3359 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
3360 ; CHECK-NEXT:    ret
3361 entry:
3362   %a = call <vscale x 16 x float> @llvm.riscv.vrgather.vx.mask.nxv16f32.i64(
3363     <vscale x 16 x float> %0,
3364     <vscale x 16 x float> %1,
3365     i64 %2,
3366     <vscale x 16 x i1> %3,
3367     i64 %4, i64 1)
3369   ret <vscale x 16 x float> %a
3372 declare <vscale x 1 x double> @llvm.riscv.vrgather.vx.nxv1f64.i64(
3373   <vscale x 1 x double>,
3374   <vscale x 1 x double>,
3375   i64,
3376   i64);
3378 define <vscale x 1 x double> @intrinsic_vrgather_vx_nxv1f64_nxv1f64_i64(<vscale x 1 x double> %0, i64 %1, i64 %2) nounwind {
3379 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv1f64_nxv1f64_i64:
3380 ; CHECK:       # %bb.0: # %entry
3381 ; CHECK-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
3382 ; CHECK-NEXT:    vrgather.vx v9, v8, a0
3383 ; CHECK-NEXT:    vmv.v.v v8, v9
3384 ; CHECK-NEXT:    ret
3385 entry:
3386   %a = call <vscale x 1 x double> @llvm.riscv.vrgather.vx.nxv1f64.i64(
3387     <vscale x 1 x double> undef,
3388     <vscale x 1 x double> %0,
3389     i64 %1,
3390     i64 %2)
3392   ret <vscale x 1 x double> %a
3395 declare <vscale x 1 x double> @llvm.riscv.vrgather.vx.mask.nxv1f64.i64(
3396   <vscale x 1 x double>,
3397   <vscale x 1 x double>,
3398   i64,
3399   <vscale x 1 x i1>,
3400   i64,
3401   i64);
3403 define <vscale x 1 x double> @intrinsic_vrgather_mask_vx_nxv1f64_nxv1f64_i64(<vscale x 1 x double> %0, <vscale x 1 x double> %1, i64 %2, <vscale x 1 x i1> %3, i64 %4) nounwind {
3404 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv1f64_nxv1f64_i64:
3405 ; CHECK:       # %bb.0: # %entry
3406 ; CHECK-NEXT:    vsetvli zero, a1, e64, m1, ta, mu
3407 ; CHECK-NEXT:    vrgather.vx v8, v9, a0, v0.t
3408 ; CHECK-NEXT:    ret
3409 entry:
3410   %a = call <vscale x 1 x double> @llvm.riscv.vrgather.vx.mask.nxv1f64.i64(
3411     <vscale x 1 x double> %0,
3412     <vscale x 1 x double> %1,
3413     i64 %2,
3414     <vscale x 1 x i1> %3,
3415     i64 %4, i64 1)
3417   ret <vscale x 1 x double> %a
3420 declare <vscale x 2 x double> @llvm.riscv.vrgather.vx.nxv2f64.i64(
3421   <vscale x 2 x double>,
3422   <vscale x 2 x double>,
3423   i64,
3424   i64);
3426 define <vscale x 2 x double> @intrinsic_vrgather_vx_nxv2f64_nxv2f64_i64(<vscale x 2 x double> %0, i64 %1, i64 %2) nounwind {
3427 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv2f64_nxv2f64_i64:
3428 ; CHECK:       # %bb.0: # %entry
3429 ; CHECK-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
3430 ; CHECK-NEXT:    vrgather.vx v10, v8, a0
3431 ; CHECK-NEXT:    vmv.v.v v8, v10
3432 ; CHECK-NEXT:    ret
3433 entry:
3434   %a = call <vscale x 2 x double> @llvm.riscv.vrgather.vx.nxv2f64.i64(
3435     <vscale x 2 x double> undef,
3436     <vscale x 2 x double> %0,
3437     i64 %1,
3438     i64 %2)
3440   ret <vscale x 2 x double> %a
3443 declare <vscale x 2 x double> @llvm.riscv.vrgather.vx.mask.nxv2f64.i64(
3444   <vscale x 2 x double>,
3445   <vscale x 2 x double>,
3446   i64,
3447   <vscale x 2 x i1>,
3448   i64,
3449   i64);
3451 define <vscale x 2 x double> @intrinsic_vrgather_mask_vx_nxv2f64_nxv2f64_i64(<vscale x 2 x double> %0, <vscale x 2 x double> %1, i64 %2, <vscale x 2 x i1> %3, i64 %4) nounwind {
3452 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv2f64_nxv2f64_i64:
3453 ; CHECK:       # %bb.0: # %entry
3454 ; CHECK-NEXT:    vsetvli zero, a1, e64, m2, ta, mu
3455 ; CHECK-NEXT:    vrgather.vx v8, v10, a0, v0.t
3456 ; CHECK-NEXT:    ret
3457 entry:
3458   %a = call <vscale x 2 x double> @llvm.riscv.vrgather.vx.mask.nxv2f64.i64(
3459     <vscale x 2 x double> %0,
3460     <vscale x 2 x double> %1,
3461     i64 %2,
3462     <vscale x 2 x i1> %3,
3463     i64 %4, i64 1)
3465   ret <vscale x 2 x double> %a
3468 declare <vscale x 4 x double> @llvm.riscv.vrgather.vx.nxv4f64.i64(
3469   <vscale x 4 x double>,
3470   <vscale x 4 x double>,
3471   i64,
3472   i64);
3474 define <vscale x 4 x double> @intrinsic_vrgather_vx_nxv4f64_nxv4f64_i64(<vscale x 4 x double> %0, i64 %1, i64 %2) nounwind {
3475 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv4f64_nxv4f64_i64:
3476 ; CHECK:       # %bb.0: # %entry
3477 ; CHECK-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
3478 ; CHECK-NEXT:    vrgather.vx v12, v8, a0
3479 ; CHECK-NEXT:    vmv.v.v v8, v12
3480 ; CHECK-NEXT:    ret
3481 entry:
3482   %a = call <vscale x 4 x double> @llvm.riscv.vrgather.vx.nxv4f64.i64(
3483     <vscale x 4 x double> undef,
3484     <vscale x 4 x double> %0,
3485     i64 %1,
3486     i64 %2)
3488   ret <vscale x 4 x double> %a
3491 declare <vscale x 4 x double> @llvm.riscv.vrgather.vx.mask.nxv4f64.i64(
3492   <vscale x 4 x double>,
3493   <vscale x 4 x double>,
3494   i64,
3495   <vscale x 4 x i1>,
3496   i64,
3497   i64);
3499 define <vscale x 4 x double> @intrinsic_vrgather_mask_vx_nxv4f64_nxv4f64_i64(<vscale x 4 x double> %0, <vscale x 4 x double> %1, i64 %2, <vscale x 4 x i1> %3, i64 %4) nounwind {
3500 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv4f64_nxv4f64_i64:
3501 ; CHECK:       # %bb.0: # %entry
3502 ; CHECK-NEXT:    vsetvli zero, a1, e64, m4, ta, mu
3503 ; CHECK-NEXT:    vrgather.vx v8, v12, a0, v0.t
3504 ; CHECK-NEXT:    ret
3505 entry:
3506   %a = call <vscale x 4 x double> @llvm.riscv.vrgather.vx.mask.nxv4f64.i64(
3507     <vscale x 4 x double> %0,
3508     <vscale x 4 x double> %1,
3509     i64 %2,
3510     <vscale x 4 x i1> %3,
3511     i64 %4, i64 1)
3513   ret <vscale x 4 x double> %a
3516 declare <vscale x 8 x double> @llvm.riscv.vrgather.vx.nxv8f64.i64(
3517   <vscale x 8 x double>,
3518   <vscale x 8 x double>,
3519   i64,
3520   i64);
3522 define <vscale x 8 x double> @intrinsic_vrgather_vx_nxv8f64_nxv8f64_i64(<vscale x 8 x double> %0, i64 %1, i64 %2) nounwind {
3523 ; CHECK-LABEL: intrinsic_vrgather_vx_nxv8f64_nxv8f64_i64:
3524 ; CHECK:       # %bb.0: # %entry
3525 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
3526 ; CHECK-NEXT:    vrgather.vx v16, v8, a0
3527 ; CHECK-NEXT:    vmv.v.v v8, v16
3528 ; CHECK-NEXT:    ret
3529 entry:
3530   %a = call <vscale x 8 x double> @llvm.riscv.vrgather.vx.nxv8f64.i64(
3531     <vscale x 8 x double> undef,
3532     <vscale x 8 x double> %0,
3533     i64 %1,
3534     i64 %2)
3536   ret <vscale x 8 x double> %a
3539 declare <vscale x 8 x double> @llvm.riscv.vrgather.vx.mask.nxv8f64.i64(
3540   <vscale x 8 x double>,
3541   <vscale x 8 x double>,
3542   i64,
3543   <vscale x 8 x i1>,
3544   i64,
3545   i64);
3547 define <vscale x 8 x double> @intrinsic_vrgather_mask_vx_nxv8f64_nxv8f64_i64(<vscale x 8 x double> %0, <vscale x 8 x double> %1, i64 %2, <vscale x 8 x i1> %3, i64 %4) nounwind {
3548 ; CHECK-LABEL: intrinsic_vrgather_mask_vx_nxv8f64_nxv8f64_i64:
3549 ; CHECK:       # %bb.0: # %entry
3550 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
3551 ; CHECK-NEXT:    vrgather.vx v8, v16, a0, v0.t
3552 ; CHECK-NEXT:    ret
3553 entry:
3554   %a = call <vscale x 8 x double> @llvm.riscv.vrgather.vx.mask.nxv8f64.i64(
3555     <vscale x 8 x double> %0,
3556     <vscale x 8 x double> %1,
3557     i64 %2,
3558     <vscale x 8 x i1> %3,
3559     i64 %4, i64 1)
3561   ret <vscale x 8 x double> %a
3564 define <vscale x 1 x i8> @intrinsic_vrgather_vi_nxv1i8_nxv1i8_i64(<vscale x 1 x i8> %0, i64 %1) nounwind {
3565 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1i8_nxv1i8_i64:
3566 ; CHECK:       # %bb.0: # %entry
3567 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
3568 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3569 ; CHECK-NEXT:    vmv1r.v v8, v9
3570 ; CHECK-NEXT:    ret
3571 entry:
3572   %a = call <vscale x 1 x i8> @llvm.riscv.vrgather.vx.nxv1i8.i64(
3573     <vscale x 1 x i8> undef,
3574     <vscale x 1 x i8> %0,
3575     i64 9,
3576     i64 %1)
3578   ret <vscale x 1 x i8> %a
3581 define <vscale x 1 x i8> @intrinsic_vrgather_mask_vi_nxv1i8_nxv1i8_i64(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
3582 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1i8_nxv1i8_i64:
3583 ; CHECK:       # %bb.0: # %entry
3584 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
3585 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3586 ; CHECK-NEXT:    ret
3587 entry:
3588   %a = call <vscale x 1 x i8> @llvm.riscv.vrgather.vx.mask.nxv1i8.i64(
3589     <vscale x 1 x i8> %0,
3590     <vscale x 1 x i8> %1,
3591     i64 9,
3592     <vscale x 1 x i1> %2,
3593     i64 %3, i64 1)
3595   ret <vscale x 1 x i8> %a
3598 define <vscale x 2 x i8> @intrinsic_vrgather_vi_nxv2i8_nxv2i8_i64(<vscale x 2 x i8> %0, i64 %1) nounwind {
3599 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2i8_nxv2i8_i64:
3600 ; CHECK:       # %bb.0: # %entry
3601 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
3602 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3603 ; CHECK-NEXT:    vmv1r.v v8, v9
3604 ; CHECK-NEXT:    ret
3605 entry:
3606   %a = call <vscale x 2 x i8> @llvm.riscv.vrgather.vx.nxv2i8.i64(
3607     <vscale x 2 x i8> undef,
3608     <vscale x 2 x i8> %0,
3609     i64 9,
3610     i64 %1)
3612   ret <vscale x 2 x i8> %a
3615 define <vscale x 2 x i8> @intrinsic_vrgather_mask_vi_nxv2i8_nxv2i8_i64(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
3616 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2i8_nxv2i8_i64:
3617 ; CHECK:       # %bb.0: # %entry
3618 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
3619 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3620 ; CHECK-NEXT:    ret
3621 entry:
3622   %a = call <vscale x 2 x i8> @llvm.riscv.vrgather.vx.mask.nxv2i8.i64(
3623     <vscale x 2 x i8> %0,
3624     <vscale x 2 x i8> %1,
3625     i64 9,
3626     <vscale x 2 x i1> %2,
3627     i64 %3, i64 1)
3629   ret <vscale x 2 x i8> %a
3632 define <vscale x 4 x i8> @intrinsic_vrgather_vi_nxv4i8_nxv4i8_i64(<vscale x 4 x i8> %0, i64 %1) nounwind {
3633 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4i8_nxv4i8_i64:
3634 ; CHECK:       # %bb.0: # %entry
3635 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
3636 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3637 ; CHECK-NEXT:    vmv1r.v v8, v9
3638 ; CHECK-NEXT:    ret
3639 entry:
3640   %a = call <vscale x 4 x i8> @llvm.riscv.vrgather.vx.nxv4i8.i64(
3641     <vscale x 4 x i8> undef,
3642     <vscale x 4 x i8> %0,
3643     i64 9,
3644     i64 %1)
3646   ret <vscale x 4 x i8> %a
3649 define <vscale x 4 x i8> @intrinsic_vrgather_mask_vi_nxv4i8_nxv4i8_i64(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
3650 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4i8_nxv4i8_i64:
3651 ; CHECK:       # %bb.0: # %entry
3652 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
3653 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3654 ; CHECK-NEXT:    ret
3655 entry:
3656   %a = call <vscale x 4 x i8> @llvm.riscv.vrgather.vx.mask.nxv4i8.i64(
3657     <vscale x 4 x i8> %0,
3658     <vscale x 4 x i8> %1,
3659     i64 9,
3660     <vscale x 4 x i1> %2,
3661     i64 %3, i64 1)
3663   ret <vscale x 4 x i8> %a
3666 define <vscale x 8 x i8> @intrinsic_vrgather_vi_nxv8i8_nxv8i8_i64(<vscale x 8 x i8> %0, i64 %1) nounwind {
3667 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8i8_nxv8i8_i64:
3668 ; CHECK:       # %bb.0: # %entry
3669 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
3670 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3671 ; CHECK-NEXT:    vmv.v.v v8, v9
3672 ; CHECK-NEXT:    ret
3673 entry:
3674   %a = call <vscale x 8 x i8> @llvm.riscv.vrgather.vx.nxv8i8.i64(
3675     <vscale x 8 x i8> undef,
3676     <vscale x 8 x i8> %0,
3677     i64 9,
3678     i64 %1)
3680   ret <vscale x 8 x i8> %a
3683 define <vscale x 8 x i8> @intrinsic_vrgather_mask_vi_nxv8i8_nxv8i8_i64(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
3684 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8i8_nxv8i8_i64:
3685 ; CHECK:       # %bb.0: # %entry
3686 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
3687 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3688 ; CHECK-NEXT:    ret
3689 entry:
3690   %a = call <vscale x 8 x i8> @llvm.riscv.vrgather.vx.mask.nxv8i8.i64(
3691     <vscale x 8 x i8> %0,
3692     <vscale x 8 x i8> %1,
3693     i64 9,
3694     <vscale x 8 x i1> %2,
3695     i64 %3, i64 1)
3697   ret <vscale x 8 x i8> %a
3700 define <vscale x 16 x i8> @intrinsic_vrgather_vi_nxv16i8_nxv16i8_i64(<vscale x 16 x i8> %0, i64 %1) nounwind {
3701 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv16i8_nxv16i8_i64:
3702 ; CHECK:       # %bb.0: # %entry
3703 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
3704 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
3705 ; CHECK-NEXT:    vmv.v.v v8, v10
3706 ; CHECK-NEXT:    ret
3707 entry:
3708   %a = call <vscale x 16 x i8> @llvm.riscv.vrgather.vx.nxv16i8.i64(
3709     <vscale x 16 x i8> undef,
3710     <vscale x 16 x i8> %0,
3711     i64 9,
3712     i64 %1)
3714   ret <vscale x 16 x i8> %a
3717 define <vscale x 16 x i8> @intrinsic_vrgather_mask_vi_nxv16i8_nxv16i8_i64(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i1> %2, i64 %3) nounwind {
3718 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv16i8_nxv16i8_i64:
3719 ; CHECK:       # %bb.0: # %entry
3720 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
3721 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
3722 ; CHECK-NEXT:    ret
3723 entry:
3724   %a = call <vscale x 16 x i8> @llvm.riscv.vrgather.vx.mask.nxv16i8.i64(
3725     <vscale x 16 x i8> %0,
3726     <vscale x 16 x i8> %1,
3727     i64 9,
3728     <vscale x 16 x i1> %2,
3729     i64 %3, i64 1)
3731   ret <vscale x 16 x i8> %a
3734 define <vscale x 32 x i8> @intrinsic_vrgather_vi_nxv32i8_nxv32i8_i64(<vscale x 32 x i8> %0, i64 %1) nounwind {
3735 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv32i8_nxv32i8_i64:
3736 ; CHECK:       # %bb.0: # %entry
3737 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
3738 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
3739 ; CHECK-NEXT:    vmv.v.v v8, v12
3740 ; CHECK-NEXT:    ret
3741 entry:
3742   %a = call <vscale x 32 x i8> @llvm.riscv.vrgather.vx.nxv32i8.i64(
3743     <vscale x 32 x i8> undef,
3744     <vscale x 32 x i8> %0,
3745     i64 9,
3746     i64 %1)
3748   ret <vscale x 32 x i8> %a
3751 define <vscale x 32 x i8> @intrinsic_vrgather_mask_vi_nxv32i8_nxv32i8_i64(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, <vscale x 32 x i1> %2, i64 %3) nounwind {
3752 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv32i8_nxv32i8_i64:
3753 ; CHECK:       # %bb.0: # %entry
3754 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
3755 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
3756 ; CHECK-NEXT:    ret
3757 entry:
3758   %a = call <vscale x 32 x i8> @llvm.riscv.vrgather.vx.mask.nxv32i8.i64(
3759     <vscale x 32 x i8> %0,
3760     <vscale x 32 x i8> %1,
3761     i64 9,
3762     <vscale x 32 x i1> %2,
3763     i64 %3, i64 1)
3765   ret <vscale x 32 x i8> %a
3768 define <vscale x 64 x i8> @intrinsic_vrgather_vi_nxv64i8_nxv64i8_i64(<vscale x 64 x i8> %0, i64 %1) nounwind {
3769 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv64i8_nxv64i8_i64:
3770 ; CHECK:       # %bb.0: # %entry
3771 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
3772 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
3773 ; CHECK-NEXT:    vmv.v.v v8, v16
3774 ; CHECK-NEXT:    ret
3775 entry:
3776   %a = call <vscale x 64 x i8> @llvm.riscv.vrgather.vx.nxv64i8.i64(
3777     <vscale x 64 x i8> undef,
3778     <vscale x 64 x i8> %0,
3779     i64 9,
3780     i64 %1)
3782   ret <vscale x 64 x i8> %a
3785 define <vscale x 64 x i8> @intrinsic_vrgather_mask_vi_nxv64i8_nxv64i8_i64(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, <vscale x 64 x i1> %2, i64 %3) nounwind {
3786 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv64i8_nxv64i8_i64:
3787 ; CHECK:       # %bb.0: # %entry
3788 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, mu
3789 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
3790 ; CHECK-NEXT:    ret
3791 entry:
3792   %a = call <vscale x 64 x i8> @llvm.riscv.vrgather.vx.mask.nxv64i8.i64(
3793     <vscale x 64 x i8> %0,
3794     <vscale x 64 x i8> %1,
3795     i64 9,
3796     <vscale x 64 x i1> %2,
3797     i64 %3, i64 1)
3799   ret <vscale x 64 x i8> %a
3802 define <vscale x 1 x i16> @intrinsic_vrgather_vi_nxv1i16_nxv1i16_i64(<vscale x 1 x i16> %0, i64 %1) nounwind {
3803 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1i16_nxv1i16_i64:
3804 ; CHECK:       # %bb.0: # %entry
3805 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
3806 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3807 ; CHECK-NEXT:    vmv1r.v v8, v9
3808 ; CHECK-NEXT:    ret
3809 entry:
3810   %a = call <vscale x 1 x i16> @llvm.riscv.vrgather.vx.nxv1i16.i64(
3811     <vscale x 1 x i16> undef,
3812     <vscale x 1 x i16> %0,
3813     i64 9,
3814     i64 %1)
3816   ret <vscale x 1 x i16> %a
3819 define <vscale x 1 x i16> @intrinsic_vrgather_mask_vi_nxv1i16_nxv1i16_i64(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
3820 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1i16_nxv1i16_i64:
3821 ; CHECK:       # %bb.0: # %entry
3822 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
3823 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3824 ; CHECK-NEXT:    ret
3825 entry:
3826   %a = call <vscale x 1 x i16> @llvm.riscv.vrgather.vx.mask.nxv1i16.i64(
3827     <vscale x 1 x i16> %0,
3828     <vscale x 1 x i16> %1,
3829     i64 9,
3830     <vscale x 1 x i1> %2,
3831     i64 %3, i64 1)
3833   ret <vscale x 1 x i16> %a
3836 define <vscale x 2 x i16> @intrinsic_vrgather_vi_nxv2i16_nxv2i16_i64(<vscale x 2 x i16> %0, i64 %1) nounwind {
3837 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2i16_nxv2i16_i64:
3838 ; CHECK:       # %bb.0: # %entry
3839 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
3840 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3841 ; CHECK-NEXT:    vmv1r.v v8, v9
3842 ; CHECK-NEXT:    ret
3843 entry:
3844   %a = call <vscale x 2 x i16> @llvm.riscv.vrgather.vx.nxv2i16.i64(
3845     <vscale x 2 x i16> undef,
3846     <vscale x 2 x i16> %0,
3847     i64 9,
3848     i64 %1)
3850   ret <vscale x 2 x i16> %a
3853 define <vscale x 2 x i16> @intrinsic_vrgather_mask_vi_nxv2i16_nxv2i16_i64(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
3854 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2i16_nxv2i16_i64:
3855 ; CHECK:       # %bb.0: # %entry
3856 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
3857 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3858 ; CHECK-NEXT:    ret
3859 entry:
3860   %a = call <vscale x 2 x i16> @llvm.riscv.vrgather.vx.mask.nxv2i16.i64(
3861     <vscale x 2 x i16> %0,
3862     <vscale x 2 x i16> %1,
3863     i64 9,
3864     <vscale x 2 x i1> %2,
3865     i64 %3, i64 1)
3867   ret <vscale x 2 x i16> %a
3870 define <vscale x 4 x i16> @intrinsic_vrgather_vi_nxv4i16_nxv4i16_i64(<vscale x 4 x i16> %0, i64 %1) nounwind {
3871 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4i16_nxv4i16_i64:
3872 ; CHECK:       # %bb.0: # %entry
3873 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
3874 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
3875 ; CHECK-NEXT:    vmv.v.v v8, v9
3876 ; CHECK-NEXT:    ret
3877 entry:
3878   %a = call <vscale x 4 x i16> @llvm.riscv.vrgather.vx.nxv4i16.i64(
3879     <vscale x 4 x i16> undef,
3880     <vscale x 4 x i16> %0,
3881     i64 9,
3882     i64 %1)
3884   ret <vscale x 4 x i16> %a
3887 define <vscale x 4 x i16> @intrinsic_vrgather_mask_vi_nxv4i16_nxv4i16_i64(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
3888 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4i16_nxv4i16_i64:
3889 ; CHECK:       # %bb.0: # %entry
3890 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
3891 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
3892 ; CHECK-NEXT:    ret
3893 entry:
3894   %a = call <vscale x 4 x i16> @llvm.riscv.vrgather.vx.mask.nxv4i16.i64(
3895     <vscale x 4 x i16> %0,
3896     <vscale x 4 x i16> %1,
3897     i64 9,
3898     <vscale x 4 x i1> %2,
3899     i64 %3, i64 1)
3901   ret <vscale x 4 x i16> %a
3904 define <vscale x 8 x i16> @intrinsic_vrgather_vi_nxv8i16_nxv8i16_i64(<vscale x 8 x i16> %0, i64 %1) nounwind {
3905 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8i16_nxv8i16_i64:
3906 ; CHECK:       # %bb.0: # %entry
3907 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
3908 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
3909 ; CHECK-NEXT:    vmv.v.v v8, v10
3910 ; CHECK-NEXT:    ret
3911 entry:
3912   %a = call <vscale x 8 x i16> @llvm.riscv.vrgather.vx.nxv8i16.i64(
3913     <vscale x 8 x i16> undef,
3914     <vscale x 8 x i16> %0,
3915     i64 9,
3916     i64 %1)
3918   ret <vscale x 8 x i16> %a
3921 define <vscale x 8 x i16> @intrinsic_vrgather_mask_vi_nxv8i16_nxv8i16_i64(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
3922 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8i16_nxv8i16_i64:
3923 ; CHECK:       # %bb.0: # %entry
3924 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
3925 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
3926 ; CHECK-NEXT:    ret
3927 entry:
3928   %a = call <vscale x 8 x i16> @llvm.riscv.vrgather.vx.mask.nxv8i16.i64(
3929     <vscale x 8 x i16> %0,
3930     <vscale x 8 x i16> %1,
3931     i64 9,
3932     <vscale x 8 x i1> %2,
3933     i64 %3, i64 1)
3935   ret <vscale x 8 x i16> %a
3938 define <vscale x 16 x i16> @intrinsic_vrgather_vi_nxv16i16_nxv16i16_i64(<vscale x 16 x i16> %0, i64 %1) nounwind {
3939 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv16i16_nxv16i16_i64:
3940 ; CHECK:       # %bb.0: # %entry
3941 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
3942 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
3943 ; CHECK-NEXT:    vmv.v.v v8, v12
3944 ; CHECK-NEXT:    ret
3945 entry:
3946   %a = call <vscale x 16 x i16> @llvm.riscv.vrgather.vx.nxv16i16.i64(
3947     <vscale x 16 x i16> undef,
3948     <vscale x 16 x i16> %0,
3949     i64 9,
3950     i64 %1)
3952   ret <vscale x 16 x i16> %a
3955 define <vscale x 16 x i16> @intrinsic_vrgather_mask_vi_nxv16i16_nxv16i16_i64(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, <vscale x 16 x i1> %2, i64 %3) nounwind {
3956 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv16i16_nxv16i16_i64:
3957 ; CHECK:       # %bb.0: # %entry
3958 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
3959 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
3960 ; CHECK-NEXT:    ret
3961 entry:
3962   %a = call <vscale x 16 x i16> @llvm.riscv.vrgather.vx.mask.nxv16i16.i64(
3963     <vscale x 16 x i16> %0,
3964     <vscale x 16 x i16> %1,
3965     i64 9,
3966     <vscale x 16 x i1> %2,
3967     i64 %3, i64 1)
3969   ret <vscale x 16 x i16> %a
3972 define <vscale x 32 x i16> @intrinsic_vrgather_vi_nxv32i16_nxv32i16_i64(<vscale x 32 x i16> %0, i64 %1) nounwind {
3973 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv32i16_nxv32i16_i64:
3974 ; CHECK:       # %bb.0: # %entry
3975 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
3976 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
3977 ; CHECK-NEXT:    vmv.v.v v8, v16
3978 ; CHECK-NEXT:    ret
3979 entry:
3980   %a = call <vscale x 32 x i16> @llvm.riscv.vrgather.vx.nxv32i16.i64(
3981     <vscale x 32 x i16> undef,
3982     <vscale x 32 x i16> %0,
3983     i64 9,
3984     i64 %1)
3986   ret <vscale x 32 x i16> %a
3989 define <vscale x 32 x i16> @intrinsic_vrgather_mask_vi_nxv32i16_nxv32i16_i64(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, <vscale x 32 x i1> %2, i64 %3) nounwind {
3990 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv32i16_nxv32i16_i64:
3991 ; CHECK:       # %bb.0: # %entry
3992 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu
3993 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
3994 ; CHECK-NEXT:    ret
3995 entry:
3996   %a = call <vscale x 32 x i16> @llvm.riscv.vrgather.vx.mask.nxv32i16.i64(
3997     <vscale x 32 x i16> %0,
3998     <vscale x 32 x i16> %1,
3999     i64 9,
4000     <vscale x 32 x i1> %2,
4001     i64 %3, i64 1)
4003   ret <vscale x 32 x i16> %a
4006 define <vscale x 1 x i32> @intrinsic_vrgather_vi_nxv1i32_nxv1i32_i64(<vscale x 1 x i32> %0, i64 %1) nounwind {
4007 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1i32_nxv1i32_i64:
4008 ; CHECK:       # %bb.0: # %entry
4009 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4010 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4011 ; CHECK-NEXT:    vmv1r.v v8, v9
4012 ; CHECK-NEXT:    ret
4013 entry:
4014   %a = call <vscale x 1 x i32> @llvm.riscv.vrgather.vx.nxv1i32.i64(
4015     <vscale x 1 x i32> undef,
4016     <vscale x 1 x i32> %0,
4017     i64 9,
4018     i64 %1)
4020   ret <vscale x 1 x i32> %a
4023 define <vscale x 1 x i32> @intrinsic_vrgather_mask_vi_nxv1i32_nxv1i32_i64(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
4024 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1i32_nxv1i32_i64:
4025 ; CHECK:       # %bb.0: # %entry
4026 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
4027 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4028 ; CHECK-NEXT:    ret
4029 entry:
4030   %a = call <vscale x 1 x i32> @llvm.riscv.vrgather.vx.mask.nxv1i32.i64(
4031     <vscale x 1 x i32> %0,
4032     <vscale x 1 x i32> %1,
4033     i64 9,
4034     <vscale x 1 x i1> %2,
4035     i64 %3, i64 1)
4037   ret <vscale x 1 x i32> %a
4040 define <vscale x 2 x i32> @intrinsic_vrgather_vi_nxv2i32_nxv2i32_i64(<vscale x 2 x i32> %0, i64 %1) nounwind {
4041 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2i32_nxv2i32_i64:
4042 ; CHECK:       # %bb.0: # %entry
4043 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4044 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4045 ; CHECK-NEXT:    vmv.v.v v8, v9
4046 ; CHECK-NEXT:    ret
4047 entry:
4048   %a = call <vscale x 2 x i32> @llvm.riscv.vrgather.vx.nxv2i32.i64(
4049     <vscale x 2 x i32> undef,
4050     <vscale x 2 x i32> %0,
4051     i64 9,
4052     i64 %1)
4054   ret <vscale x 2 x i32> %a
4057 define <vscale x 2 x i32> @intrinsic_vrgather_mask_vi_nxv2i32_nxv2i32_i64(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
4058 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2i32_nxv2i32_i64:
4059 ; CHECK:       # %bb.0: # %entry
4060 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
4061 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4062 ; CHECK-NEXT:    ret
4063 entry:
4064   %a = call <vscale x 2 x i32> @llvm.riscv.vrgather.vx.mask.nxv2i32.i64(
4065     <vscale x 2 x i32> %0,
4066     <vscale x 2 x i32> %1,
4067     i64 9,
4068     <vscale x 2 x i1> %2,
4069     i64 %3, i64 1)
4071   ret <vscale x 2 x i32> %a
4074 define <vscale x 4 x i32> @intrinsic_vrgather_vi_nxv4i32_nxv4i32_i64(<vscale x 4 x i32> %0, i64 %1) nounwind {
4075 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4i32_nxv4i32_i64:
4076 ; CHECK:       # %bb.0: # %entry
4077 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4078 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
4079 ; CHECK-NEXT:    vmv.v.v v8, v10
4080 ; CHECK-NEXT:    ret
4081 entry:
4082   %a = call <vscale x 4 x i32> @llvm.riscv.vrgather.vx.nxv4i32.i64(
4083     <vscale x 4 x i32> undef,
4084     <vscale x 4 x i32> %0,
4085     i64 9,
4086     i64 %1)
4088   ret <vscale x 4 x i32> %a
4091 define <vscale x 4 x i32> @intrinsic_vrgather_mask_vi_nxv4i32_nxv4i32_i64(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
4092 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4i32_nxv4i32_i64:
4093 ; CHECK:       # %bb.0: # %entry
4094 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
4095 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
4096 ; CHECK-NEXT:    ret
4097 entry:
4098   %a = call <vscale x 4 x i32> @llvm.riscv.vrgather.vx.mask.nxv4i32.i64(
4099     <vscale x 4 x i32> %0,
4100     <vscale x 4 x i32> %1,
4101     i64 9,
4102     <vscale x 4 x i1> %2,
4103     i64 %3, i64 1)
4105   ret <vscale x 4 x i32> %a
4108 define <vscale x 8 x i32> @intrinsic_vrgather_vi_nxv8i32_nxv8i32_i64(<vscale x 8 x i32> %0, i64 %1) nounwind {
4109 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8i32_nxv8i32_i64:
4110 ; CHECK:       # %bb.0: # %entry
4111 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4112 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
4113 ; CHECK-NEXT:    vmv.v.v v8, v12
4114 ; CHECK-NEXT:    ret
4115 entry:
4116   %a = call <vscale x 8 x i32> @llvm.riscv.vrgather.vx.nxv8i32.i64(
4117     <vscale x 8 x i32> undef,
4118     <vscale x 8 x i32> %0,
4119     i64 9,
4120     i64 %1)
4122   ret <vscale x 8 x i32> %a
4125 define <vscale x 8 x i32> @intrinsic_vrgather_mask_vi_nxv8i32_nxv8i32_i64(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
4126 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8i32_nxv8i32_i64:
4127 ; CHECK:       # %bb.0: # %entry
4128 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
4129 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
4130 ; CHECK-NEXT:    ret
4131 entry:
4132   %a = call <vscale x 8 x i32> @llvm.riscv.vrgather.vx.mask.nxv8i32.i64(
4133     <vscale x 8 x i32> %0,
4134     <vscale x 8 x i32> %1,
4135     i64 9,
4136     <vscale x 8 x i1> %2,
4137     i64 %3, i64 1)
4139   ret <vscale x 8 x i32> %a
4142 define <vscale x 16 x i32> @intrinsic_vrgather_vi_nxv16i32_nxv16i32_i64(<vscale x 16 x i32> %0, i64 %1) nounwind {
4143 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv16i32_nxv16i32_i64:
4144 ; CHECK:       # %bb.0: # %entry
4145 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
4146 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
4147 ; CHECK-NEXT:    vmv.v.v v8, v16
4148 ; CHECK-NEXT:    ret
4149 entry:
4150   %a = call <vscale x 16 x i32> @llvm.riscv.vrgather.vx.nxv16i32.i64(
4151     <vscale x 16 x i32> undef,
4152     <vscale x 16 x i32> %0,
4153     i64 9,
4154     i64 %1)
4156   ret <vscale x 16 x i32> %a
4159 define <vscale x 16 x i32> @intrinsic_vrgather_mask_vi_nxv16i32_nxv16i32_i64(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, <vscale x 16 x i1> %2, i64 %3) nounwind {
4160 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv16i32_nxv16i32_i64:
4161 ; CHECK:       # %bb.0: # %entry
4162 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu
4163 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
4164 ; CHECK-NEXT:    ret
4165 entry:
4166   %a = call <vscale x 16 x i32> @llvm.riscv.vrgather.vx.mask.nxv16i32.i64(
4167     <vscale x 16 x i32> %0,
4168     <vscale x 16 x i32> %1,
4169     i64 9,
4170     <vscale x 16 x i1> %2,
4171     i64 %3, i64 1)
4173   ret <vscale x 16 x i32> %a
4176 define <vscale x 1 x i64> @intrinsic_vrgather_vi_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, i64 %1) nounwind {
4177 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1i64_nxv1i64_i64:
4178 ; CHECK:       # %bb.0: # %entry
4179 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
4180 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4181 ; CHECK-NEXT:    vmv.v.v v8, v9
4182 ; CHECK-NEXT:    ret
4183 entry:
4184   %a = call <vscale x 1 x i64> @llvm.riscv.vrgather.vx.nxv1i64.i64(
4185     <vscale x 1 x i64> undef,
4186     <vscale x 1 x i64> %0,
4187     i64 9,
4188     i64 %1)
4190   ret <vscale x 1 x i64> %a
4193 define <vscale x 1 x i64> @intrinsic_vrgather_mask_vi_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
4194 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1i64_nxv1i64_i64:
4195 ; CHECK:       # %bb.0: # %entry
4196 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
4197 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4198 ; CHECK-NEXT:    ret
4199 entry:
4200   %a = call <vscale x 1 x i64> @llvm.riscv.vrgather.vx.mask.nxv1i64.i64(
4201     <vscale x 1 x i64> %0,
4202     <vscale x 1 x i64> %1,
4203     i64 9,
4204     <vscale x 1 x i1> %2,
4205     i64 %3, i64 1)
4207   ret <vscale x 1 x i64> %a
4210 define <vscale x 2 x i64> @intrinsic_vrgather_vi_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, i64 %1) nounwind {
4211 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2i64_nxv2i64_i64:
4212 ; CHECK:       # %bb.0: # %entry
4213 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
4214 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
4215 ; CHECK-NEXT:    vmv.v.v v8, v10
4216 ; CHECK-NEXT:    ret
4217 entry:
4218   %a = call <vscale x 2 x i64> @llvm.riscv.vrgather.vx.nxv2i64.i64(
4219     <vscale x 2 x i64> undef,
4220     <vscale x 2 x i64> %0,
4221     i64 9,
4222     i64 %1)
4224   ret <vscale x 2 x i64> %a
4227 define <vscale x 2 x i64> @intrinsic_vrgather_mask_vi_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
4228 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2i64_nxv2i64_i64:
4229 ; CHECK:       # %bb.0: # %entry
4230 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
4231 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
4232 ; CHECK-NEXT:    ret
4233 entry:
4234   %a = call <vscale x 2 x i64> @llvm.riscv.vrgather.vx.mask.nxv2i64.i64(
4235     <vscale x 2 x i64> %0,
4236     <vscale x 2 x i64> %1,
4237     i64 9,
4238     <vscale x 2 x i1> %2,
4239     i64 %3, i64 1)
4241   ret <vscale x 2 x i64> %a
4244 define <vscale x 4 x i64> @intrinsic_vrgather_vi_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, i64 %1) nounwind {
4245 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4i64_nxv4i64_i64:
4246 ; CHECK:       # %bb.0: # %entry
4247 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
4248 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
4249 ; CHECK-NEXT:    vmv.v.v v8, v12
4250 ; CHECK-NEXT:    ret
4251 entry:
4252   %a = call <vscale x 4 x i64> @llvm.riscv.vrgather.vx.nxv4i64.i64(
4253     <vscale x 4 x i64> undef,
4254     <vscale x 4 x i64> %0,
4255     i64 9,
4256     i64 %1)
4258   ret <vscale x 4 x i64> %a
4261 define <vscale x 4 x i64> @intrinsic_vrgather_mask_vi_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
4262 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4i64_nxv4i64_i64:
4263 ; CHECK:       # %bb.0: # %entry
4264 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
4265 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
4266 ; CHECK-NEXT:    ret
4267 entry:
4268   %a = call <vscale x 4 x i64> @llvm.riscv.vrgather.vx.mask.nxv4i64.i64(
4269     <vscale x 4 x i64> %0,
4270     <vscale x 4 x i64> %1,
4271     i64 9,
4272     <vscale x 4 x i1> %2,
4273     i64 %3, i64 1)
4275   ret <vscale x 4 x i64> %a
4278 define <vscale x 8 x i64> @intrinsic_vrgather_vi_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, i64 %1) nounwind {
4279 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8i64_nxv8i64_i64:
4280 ; CHECK:       # %bb.0: # %entry
4281 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
4282 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
4283 ; CHECK-NEXT:    vmv.v.v v8, v16
4284 ; CHECK-NEXT:    ret
4285 entry:
4286   %a = call <vscale x 8 x i64> @llvm.riscv.vrgather.vx.nxv8i64.i64(
4287     <vscale x 8 x i64> undef,
4288     <vscale x 8 x i64> %0,
4289     i64 9,
4290     i64 %1)
4292   ret <vscale x 8 x i64> %a
4295 define <vscale x 8 x i64> @intrinsic_vrgather_mask_vi_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
4296 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8i64_nxv8i64_i64:
4297 ; CHECK:       # %bb.0: # %entry
4298 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu
4299 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
4300 ; CHECK-NEXT:    ret
4301 entry:
4302   %a = call <vscale x 8 x i64> @llvm.riscv.vrgather.vx.mask.nxv8i64.i64(
4303     <vscale x 8 x i64> %0,
4304     <vscale x 8 x i64> %1,
4305     i64 9,
4306     <vscale x 8 x i1> %2,
4307     i64 %3, i64 1)
4309   ret <vscale x 8 x i64> %a
4312 define <vscale x 1 x half> @intrinsic_vrgather_vi_nxv1f16_nxv1f16_i64(<vscale x 1 x half> %0, i64 %1) nounwind {
4313 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1f16_nxv1f16_i64:
4314 ; CHECK:       # %bb.0: # %entry
4315 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
4316 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4317 ; CHECK-NEXT:    vmv1r.v v8, v9
4318 ; CHECK-NEXT:    ret
4319 entry:
4320   %a = call <vscale x 1 x half> @llvm.riscv.vrgather.vx.nxv1f16.i64(
4321     <vscale x 1 x half> undef,
4322     <vscale x 1 x half> %0,
4323     i64 9,
4324     i64 %1)
4326   ret <vscale x 1 x half> %a
4329 define <vscale x 1 x half> @intrinsic_vrgather_mask_vi_nxv1f16_nxv1f16_i64(<vscale x 1 x half> %0, <vscale x 1 x half> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
4330 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1f16_nxv1f16_i64:
4331 ; CHECK:       # %bb.0: # %entry
4332 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
4333 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4334 ; CHECK-NEXT:    ret
4335 entry:
4336   %a = call <vscale x 1 x half> @llvm.riscv.vrgather.vx.mask.nxv1f16.i64(
4337     <vscale x 1 x half> %0,
4338     <vscale x 1 x half> %1,
4339     i64 9,
4340     <vscale x 1 x i1> %2,
4341     i64 %3, i64 1)
4343   ret <vscale x 1 x half> %a
4346 define <vscale x 2 x half> @intrinsic_vrgather_vi_nxv2f16_nxv2f16_i64(<vscale x 2 x half> %0, i64 %1) nounwind {
4347 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2f16_nxv2f16_i64:
4348 ; CHECK:       # %bb.0: # %entry
4349 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
4350 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4351 ; CHECK-NEXT:    vmv1r.v v8, v9
4352 ; CHECK-NEXT:    ret
4353 entry:
4354   %a = call <vscale x 2 x half> @llvm.riscv.vrgather.vx.nxv2f16.i64(
4355     <vscale x 2 x half> undef,
4356     <vscale x 2 x half> %0,
4357     i64 9,
4358     i64 %1)
4360   ret <vscale x 2 x half> %a
4363 define <vscale x 2 x half> @intrinsic_vrgather_mask_vi_nxv2f16_nxv2f16_i64(<vscale x 2 x half> %0, <vscale x 2 x half> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
4364 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2f16_nxv2f16_i64:
4365 ; CHECK:       # %bb.0: # %entry
4366 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
4367 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4368 ; CHECK-NEXT:    ret
4369 entry:
4370   %a = call <vscale x 2 x half> @llvm.riscv.vrgather.vx.mask.nxv2f16.i64(
4371     <vscale x 2 x half> %0,
4372     <vscale x 2 x half> %1,
4373     i64 9,
4374     <vscale x 2 x i1> %2,
4375     i64 %3, i64 1)
4377   ret <vscale x 2 x half> %a
4380 define <vscale x 4 x half> @intrinsic_vrgather_vi_nxv4f16_nxv4f16_i64(<vscale x 4 x half> %0, i64 %1) nounwind {
4381 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4f16_nxv4f16_i64:
4382 ; CHECK:       # %bb.0: # %entry
4383 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
4384 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4385 ; CHECK-NEXT:    vmv.v.v v8, v9
4386 ; CHECK-NEXT:    ret
4387 entry:
4388   %a = call <vscale x 4 x half> @llvm.riscv.vrgather.vx.nxv4f16.i64(
4389     <vscale x 4 x half> undef,
4390     <vscale x 4 x half> %0,
4391     i64 9,
4392     i64 %1)
4394   ret <vscale x 4 x half> %a
4397 define <vscale x 4 x half> @intrinsic_vrgather_mask_vi_nxv4f16_nxv4f16_i64(<vscale x 4 x half> %0, <vscale x 4 x half> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
4398 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4f16_nxv4f16_i64:
4399 ; CHECK:       # %bb.0: # %entry
4400 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
4401 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4402 ; CHECK-NEXT:    ret
4403 entry:
4404   %a = call <vscale x 4 x half> @llvm.riscv.vrgather.vx.mask.nxv4f16.i64(
4405     <vscale x 4 x half> %0,
4406     <vscale x 4 x half> %1,
4407     i64 9,
4408     <vscale x 4 x i1> %2,
4409     i64 %3, i64 1)
4411   ret <vscale x 4 x half> %a
4414 define <vscale x 8 x half> @intrinsic_vrgather_vi_nxv8f16_nxv8f16_i64(<vscale x 8 x half> %0, i64 %1) nounwind {
4415 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8f16_nxv8f16_i64:
4416 ; CHECK:       # %bb.0: # %entry
4417 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
4418 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
4419 ; CHECK-NEXT:    vmv.v.v v8, v10
4420 ; CHECK-NEXT:    ret
4421 entry:
4422   %a = call <vscale x 8 x half> @llvm.riscv.vrgather.vx.nxv8f16.i64(
4423     <vscale x 8 x half> undef,
4424     <vscale x 8 x half> %0,
4425     i64 9,
4426     i64 %1)
4428   ret <vscale x 8 x half> %a
4431 define <vscale x 8 x half> @intrinsic_vrgather_mask_vi_nxv8f16_nxv8f16_i64(<vscale x 8 x half> %0, <vscale x 8 x half> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
4432 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8f16_nxv8f16_i64:
4433 ; CHECK:       # %bb.0: # %entry
4434 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
4435 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
4436 ; CHECK-NEXT:    ret
4437 entry:
4438   %a = call <vscale x 8 x half> @llvm.riscv.vrgather.vx.mask.nxv8f16.i64(
4439     <vscale x 8 x half> %0,
4440     <vscale x 8 x half> %1,
4441     i64 9,
4442     <vscale x 8 x i1> %2,
4443     i64 %3, i64 1)
4445   ret <vscale x 8 x half> %a
4448 define <vscale x 16 x half> @intrinsic_vrgather_vi_nxv16f16_nxv16f16_i64(<vscale x 16 x half> %0, i64 %1) nounwind {
4449 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv16f16_nxv16f16_i64:
4450 ; CHECK:       # %bb.0: # %entry
4451 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
4452 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
4453 ; CHECK-NEXT:    vmv.v.v v8, v12
4454 ; CHECK-NEXT:    ret
4455 entry:
4456   %a = call <vscale x 16 x half> @llvm.riscv.vrgather.vx.nxv16f16.i64(
4457     <vscale x 16 x half> undef,
4458     <vscale x 16 x half> %0,
4459     i64 9,
4460     i64 %1)
4462   ret <vscale x 16 x half> %a
4465 define <vscale x 16 x half> @intrinsic_vrgather_mask_vi_nxv16f16_nxv16f16_i64(<vscale x 16 x half> %0, <vscale x 16 x half> %1, <vscale x 16 x i1> %2, i64 %3) nounwind {
4466 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv16f16_nxv16f16_i64:
4467 ; CHECK:       # %bb.0: # %entry
4468 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
4469 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
4470 ; CHECK-NEXT:    ret
4471 entry:
4472   %a = call <vscale x 16 x half> @llvm.riscv.vrgather.vx.mask.nxv16f16.i64(
4473     <vscale x 16 x half> %0,
4474     <vscale x 16 x half> %1,
4475     i64 9,
4476     <vscale x 16 x i1> %2,
4477     i64 %3, i64 1)
4479   ret <vscale x 16 x half> %a
4482 define <vscale x 32 x half> @intrinsic_vrgather_vi_nxv32f16_nxv32f16_i64(<vscale x 32 x half> %0, i64 %1) nounwind {
4483 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv32f16_nxv32f16_i64:
4484 ; CHECK:       # %bb.0: # %entry
4485 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
4486 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
4487 ; CHECK-NEXT:    vmv.v.v v8, v16
4488 ; CHECK-NEXT:    ret
4489 entry:
4490   %a = call <vscale x 32 x half> @llvm.riscv.vrgather.vx.nxv32f16.i64(
4491     <vscale x 32 x half> undef,
4492     <vscale x 32 x half> %0,
4493     i64 9,
4494     i64 %1)
4496   ret <vscale x 32 x half> %a
4499 define <vscale x 32 x half> @intrinsic_vrgather_mask_vi_nxv32f16_nxv32f16_i64(<vscale x 32 x half> %0, <vscale x 32 x half> %1, <vscale x 32 x i1> %2, i64 %3) nounwind {
4500 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv32f16_nxv32f16_i64:
4501 ; CHECK:       # %bb.0: # %entry
4502 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, mu
4503 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
4504 ; CHECK-NEXT:    ret
4505 entry:
4506   %a = call <vscale x 32 x half> @llvm.riscv.vrgather.vx.mask.nxv32f16.i64(
4507     <vscale x 32 x half> %0,
4508     <vscale x 32 x half> %1,
4509     i64 9,
4510     <vscale x 32 x i1> %2,
4511     i64 %3, i64 1)
4513   ret <vscale x 32 x half> %a
4516 define <vscale x 1 x float> @intrinsic_vrgather_vi_nxv1f32_nxv1f32_i64(<vscale x 1 x float> %0, i64 %1) nounwind {
4517 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1f32_nxv1f32_i64:
4518 ; CHECK:       # %bb.0: # %entry
4519 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
4520 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4521 ; CHECK-NEXT:    vmv1r.v v8, v9
4522 ; CHECK-NEXT:    ret
4523 entry:
4524   %a = call <vscale x 1 x float> @llvm.riscv.vrgather.vx.nxv1f32.i64(
4525     <vscale x 1 x float> undef,
4526     <vscale x 1 x float> %0,
4527     i64 9,
4528     i64 %1)
4530   ret <vscale x 1 x float> %a
4533 define <vscale x 1 x float> @intrinsic_vrgather_mask_vi_nxv1f32_nxv1f32_i64(<vscale x 1 x float> %0, <vscale x 1 x float> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
4534 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1f32_nxv1f32_i64:
4535 ; CHECK:       # %bb.0: # %entry
4536 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
4537 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4538 ; CHECK-NEXT:    ret
4539 entry:
4540   %a = call <vscale x 1 x float> @llvm.riscv.vrgather.vx.mask.nxv1f32.i64(
4541     <vscale x 1 x float> %0,
4542     <vscale x 1 x float> %1,
4543     i64 9,
4544     <vscale x 1 x i1> %2,
4545     i64 %3, i64 1)
4547   ret <vscale x 1 x float> %a
4550 define <vscale x 2 x float> @intrinsic_vrgather_vi_nxv2f32_nxv2f32_i64(<vscale x 2 x float> %0, i64 %1) nounwind {
4551 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2f32_nxv2f32_i64:
4552 ; CHECK:       # %bb.0: # %entry
4553 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
4554 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4555 ; CHECK-NEXT:    vmv.v.v v8, v9
4556 ; CHECK-NEXT:    ret
4557 entry:
4558   %a = call <vscale x 2 x float> @llvm.riscv.vrgather.vx.nxv2f32.i64(
4559     <vscale x 2 x float> undef,
4560     <vscale x 2 x float> %0,
4561     i64 9,
4562     i64 %1)
4564   ret <vscale x 2 x float> %a
4567 define <vscale x 2 x float> @intrinsic_vrgather_mask_vi_nxv2f32_nxv2f32_i64(<vscale x 2 x float> %0, <vscale x 2 x float> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
4568 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2f32_nxv2f32_i64:
4569 ; CHECK:       # %bb.0: # %entry
4570 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
4571 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4572 ; CHECK-NEXT:    ret
4573 entry:
4574   %a = call <vscale x 2 x float> @llvm.riscv.vrgather.vx.mask.nxv2f32.i64(
4575     <vscale x 2 x float> %0,
4576     <vscale x 2 x float> %1,
4577     i64 9,
4578     <vscale x 2 x i1> %2,
4579     i64 %3, i64 1)
4581   ret <vscale x 2 x float> %a
4584 define <vscale x 4 x float> @intrinsic_vrgather_vi_nxv4f32_nxv4f32_i64(<vscale x 4 x float> %0, i64 %1) nounwind {
4585 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4f32_nxv4f32_i64:
4586 ; CHECK:       # %bb.0: # %entry
4587 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
4588 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
4589 ; CHECK-NEXT:    vmv.v.v v8, v10
4590 ; CHECK-NEXT:    ret
4591 entry:
4592   %a = call <vscale x 4 x float> @llvm.riscv.vrgather.vx.nxv4f32.i64(
4593     <vscale x 4 x float> undef,
4594     <vscale x 4 x float> %0,
4595     i64 9,
4596     i64 %1)
4598   ret <vscale x 4 x float> %a
4601 define <vscale x 4 x float> @intrinsic_vrgather_mask_vi_nxv4f32_nxv4f32_i64(<vscale x 4 x float> %0, <vscale x 4 x float> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
4602 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4f32_nxv4f32_i64:
4603 ; CHECK:       # %bb.0: # %entry
4604 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
4605 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
4606 ; CHECK-NEXT:    ret
4607 entry:
4608   %a = call <vscale x 4 x float> @llvm.riscv.vrgather.vx.mask.nxv4f32.i64(
4609     <vscale x 4 x float> %0,
4610     <vscale x 4 x float> %1,
4611     i64 9,
4612     <vscale x 4 x i1> %2,
4613     i64 %3, i64 1)
4615   ret <vscale x 4 x float> %a
4618 define <vscale x 8 x float> @intrinsic_vrgather_vi_nxv8f32_nxv8f32_i64(<vscale x 8 x float> %0, i64 %1) nounwind {
4619 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8f32_nxv8f32_i64:
4620 ; CHECK:       # %bb.0: # %entry
4621 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
4622 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
4623 ; CHECK-NEXT:    vmv.v.v v8, v12
4624 ; CHECK-NEXT:    ret
4625 entry:
4626   %a = call <vscale x 8 x float> @llvm.riscv.vrgather.vx.nxv8f32.i64(
4627     <vscale x 8 x float> undef,
4628     <vscale x 8 x float> %0,
4629     i64 9,
4630     i64 %1)
4632   ret <vscale x 8 x float> %a
4635 define <vscale x 8 x float> @intrinsic_vrgather_mask_vi_nxv8f32_nxv8f32_i64(<vscale x 8 x float> %0, <vscale x 8 x float> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
4636 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8f32_nxv8f32_i64:
4637 ; CHECK:       # %bb.0: # %entry
4638 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
4639 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
4640 ; CHECK-NEXT:    ret
4641 entry:
4642   %a = call <vscale x 8 x float> @llvm.riscv.vrgather.vx.mask.nxv8f32.i64(
4643     <vscale x 8 x float> %0,
4644     <vscale x 8 x float> %1,
4645     i64 9,
4646     <vscale x 8 x i1> %2,
4647     i64 %3, i64 1)
4649   ret <vscale x 8 x float> %a
4652 define <vscale x 16 x float> @intrinsic_vrgather_vi_nxv16f32_nxv16f32_i64(<vscale x 16 x float> %0, i64 %1) nounwind {
4653 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv16f32_nxv16f32_i64:
4654 ; CHECK:       # %bb.0: # %entry
4655 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
4656 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
4657 ; CHECK-NEXT:    vmv.v.v v8, v16
4658 ; CHECK-NEXT:    ret
4659 entry:
4660   %a = call <vscale x 16 x float> @llvm.riscv.vrgather.vx.nxv16f32.i64(
4661     <vscale x 16 x float> undef,
4662     <vscale x 16 x float> %0,
4663     i64 9,
4664     i64 %1)
4666   ret <vscale x 16 x float> %a
4669 define <vscale x 16 x float> @intrinsic_vrgather_mask_vi_nxv16f32_nxv16f32_i64(<vscale x 16 x float> %0, <vscale x 16 x float> %1, <vscale x 16 x i1> %2, i64 %3) nounwind {
4670 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv16f32_nxv16f32_i64:
4671 ; CHECK:       # %bb.0: # %entry
4672 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu
4673 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
4674 ; CHECK-NEXT:    ret
4675 entry:
4676   %a = call <vscale x 16 x float> @llvm.riscv.vrgather.vx.mask.nxv16f32.i64(
4677     <vscale x 16 x float> %0,
4678     <vscale x 16 x float> %1,
4679     i64 9,
4680     <vscale x 16 x i1> %2,
4681     i64 %3, i64 1)
4683   ret <vscale x 16 x float> %a
4686 define <vscale x 1 x double> @intrinsic_vrgather_vi_nxv1f64_nxv1f64_i64(<vscale x 1 x double> %0, i64 %1) nounwind {
4687 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv1f64_nxv1f64_i64:
4688 ; CHECK:       # %bb.0: # %entry
4689 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
4690 ; CHECK-NEXT:    vrgather.vi v9, v8, 9
4691 ; CHECK-NEXT:    vmv.v.v v8, v9
4692 ; CHECK-NEXT:    ret
4693 entry:
4694   %a = call <vscale x 1 x double> @llvm.riscv.vrgather.vx.nxv1f64.i64(
4695     <vscale x 1 x double> undef,
4696     <vscale x 1 x double> %0,
4697     i64 9,
4698     i64 %1)
4700   ret <vscale x 1 x double> %a
4703 define <vscale x 1 x double> @intrinsic_vrgather_mask_vi_nxv1f64_nxv1f64_i64(<vscale x 1 x double> %0, <vscale x 1 x double> %1, <vscale x 1 x i1> %2, i64 %3) nounwind {
4704 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv1f64_nxv1f64_i64:
4705 ; CHECK:       # %bb.0: # %entry
4706 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
4707 ; CHECK-NEXT:    vrgather.vi v8, v9, 9, v0.t
4708 ; CHECK-NEXT:    ret
4709 entry:
4710   %a = call <vscale x 1 x double> @llvm.riscv.vrgather.vx.mask.nxv1f64.i64(
4711     <vscale x 1 x double> %0,
4712     <vscale x 1 x double> %1,
4713     i64 9,
4714     <vscale x 1 x i1> %2,
4715     i64 %3, i64 1)
4717   ret <vscale x 1 x double> %a
4720 define <vscale x 2 x double> @intrinsic_vrgather_vi_nxv2f64_nxv2f64_i64(<vscale x 2 x double> %0, i64 %1) nounwind {
4721 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv2f64_nxv2f64_i64:
4722 ; CHECK:       # %bb.0: # %entry
4723 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
4724 ; CHECK-NEXT:    vrgather.vi v10, v8, 9
4725 ; CHECK-NEXT:    vmv.v.v v8, v10
4726 ; CHECK-NEXT:    ret
4727 entry:
4728   %a = call <vscale x 2 x double> @llvm.riscv.vrgather.vx.nxv2f64.i64(
4729     <vscale x 2 x double> undef,
4730     <vscale x 2 x double> %0,
4731     i64 9,
4732     i64 %1)
4734   ret <vscale x 2 x double> %a
4737 define <vscale x 2 x double> @intrinsic_vrgather_mask_vi_nxv2f64_nxv2f64_i64(<vscale x 2 x double> %0, <vscale x 2 x double> %1, <vscale x 2 x i1> %2, i64 %3) nounwind {
4738 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv2f64_nxv2f64_i64:
4739 ; CHECK:       # %bb.0: # %entry
4740 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
4741 ; CHECK-NEXT:    vrgather.vi v8, v10, 9, v0.t
4742 ; CHECK-NEXT:    ret
4743 entry:
4744   %a = call <vscale x 2 x double> @llvm.riscv.vrgather.vx.mask.nxv2f64.i64(
4745     <vscale x 2 x double> %0,
4746     <vscale x 2 x double> %1,
4747     i64 9,
4748     <vscale x 2 x i1> %2,
4749     i64 %3, i64 1)
4751   ret <vscale x 2 x double> %a
4754 define <vscale x 4 x double> @intrinsic_vrgather_vi_nxv4f64_nxv4f64_i64(<vscale x 4 x double> %0, i64 %1) nounwind {
4755 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv4f64_nxv4f64_i64:
4756 ; CHECK:       # %bb.0: # %entry
4757 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
4758 ; CHECK-NEXT:    vrgather.vi v12, v8, 9
4759 ; CHECK-NEXT:    vmv.v.v v8, v12
4760 ; CHECK-NEXT:    ret
4761 entry:
4762   %a = call <vscale x 4 x double> @llvm.riscv.vrgather.vx.nxv4f64.i64(
4763     <vscale x 4 x double> undef,
4764     <vscale x 4 x double> %0,
4765     i64 9,
4766     i64 %1)
4768   ret <vscale x 4 x double> %a
4771 define <vscale x 4 x double> @intrinsic_vrgather_mask_vi_nxv4f64_nxv4f64_i64(<vscale x 4 x double> %0, <vscale x 4 x double> %1, <vscale x 4 x i1> %2, i64 %3) nounwind {
4772 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv4f64_nxv4f64_i64:
4773 ; CHECK:       # %bb.0: # %entry
4774 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
4775 ; CHECK-NEXT:    vrgather.vi v8, v12, 9, v0.t
4776 ; CHECK-NEXT:    ret
4777 entry:
4778   %a = call <vscale x 4 x double> @llvm.riscv.vrgather.vx.mask.nxv4f64.i64(
4779     <vscale x 4 x double> %0,
4780     <vscale x 4 x double> %1,
4781     i64 9,
4782     <vscale x 4 x i1> %2,
4783     i64 %3, i64 1)
4785   ret <vscale x 4 x double> %a
4788 define <vscale x 8 x double> @intrinsic_vrgather_vi_nxv8f64_nxv8f64_i64(<vscale x 8 x double> %0, i64 %1) nounwind {
4789 ; CHECK-LABEL: intrinsic_vrgather_vi_nxv8f64_nxv8f64_i64:
4790 ; CHECK:       # %bb.0: # %entry
4791 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
4792 ; CHECK-NEXT:    vrgather.vi v16, v8, 9
4793 ; CHECK-NEXT:    vmv.v.v v8, v16
4794 ; CHECK-NEXT:    ret
4795 entry:
4796   %a = call <vscale x 8 x double> @llvm.riscv.vrgather.vx.nxv8f64.i64(
4797     <vscale x 8 x double> undef,
4798     <vscale x 8 x double> %0,
4799     i64 9,
4800     i64 %1)
4802   ret <vscale x 8 x double> %a
4805 define <vscale x 8 x double> @intrinsic_vrgather_mask_vi_nxv8f64_nxv8f64_i64(<vscale x 8 x double> %0, <vscale x 8 x double> %1, <vscale x 8 x i1> %2, i64 %3) nounwind {
4806 ; CHECK-LABEL: intrinsic_vrgather_mask_vi_nxv8f64_nxv8f64_i64:
4807 ; CHECK:       # %bb.0: # %entry
4808 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, mu
4809 ; CHECK-NEXT:    vrgather.vi v8, v16, 9, v0.t
4810 ; CHECK-NEXT:    ret
4811 entry:
4812   %a = call <vscale x 8 x double> @llvm.riscv.vrgather.vx.mask.nxv8f64.i64(
4813     <vscale x 8 x double> %0,
4814     <vscale x 8 x double> %1,
4815     i64 9,
4816     <vscale x 8 x i1> %2,
4817     i64 %3, i64 1)
4819   ret <vscale x 8 x double> %a