[RISCV] Merge rv32/rv64 vector narrowing integer right shift intrinsic tests that...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vnsrl.ll
blobf89b1292161c519410b6f3b82bc22b57dde2581f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v \
3 ; RUN:   -verify-machineinstrs | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v \
5 ; RUN:   -verify-machineinstrs | FileCheck %s
6 declare <vscale x 1 x i8> @llvm.riscv.vnsrl.nxv1i8.nxv1i16.nxv1i8(
7   <vscale x 1 x i8>,
8   <vscale x 1 x i16>,
9   <vscale x 1 x i8>,
10   iXLen);
12 define <vscale x 1 x i8> @intrinsic_vnsrl_wv_nxv1i8_nxv1i16_nxv1i8(<vscale x 1 x i16> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind {
13 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv1i8_nxv1i16_nxv1i8:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
16 ; CHECK-NEXT:    vnsrl.wv v8, v8, v9
17 ; CHECK-NEXT:    ret
18 entry:
19   %a = call <vscale x 1 x i8> @llvm.riscv.vnsrl.nxv1i8.nxv1i16.nxv1i8(
20     <vscale x 1 x i8> undef,
21     <vscale x 1 x i16> %0,
22     <vscale x 1 x i8> %1,
23     iXLen %2)
25   ret <vscale x 1 x i8> %a
28 declare <vscale x 1 x i8> @llvm.riscv.vnsrl.mask.nxv1i8.nxv1i16.nxv1i8(
29   <vscale x 1 x i8>,
30   <vscale x 1 x i16>,
31   <vscale x 1 x i8>,
32   <vscale x 1 x i1>,
33   iXLen,
34   iXLen);
36 define <vscale x 1 x i8> @intrinsic_vnsrl_mask_wv_nxv1i8_nxv1i16_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i16> %1, <vscale x 1 x i8> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
37 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv1i8_nxv1i16_nxv1i8:
38 ; CHECK:       # %bb.0: # %entry
39 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
40 ; CHECK-NEXT:    vnsrl.wv v8, v9, v10, v0.t
41 ; CHECK-NEXT:    ret
42 entry:
43   %a = call <vscale x 1 x i8> @llvm.riscv.vnsrl.mask.nxv1i8.nxv1i16.nxv1i8(
44     <vscale x 1 x i8> %0,
45     <vscale x 1 x i16> %1,
46     <vscale x 1 x i8> %2,
47     <vscale x 1 x i1> %3,
48     iXLen %4, iXLen 1)
50   ret <vscale x 1 x i8> %a
53 declare <vscale x 2 x i8> @llvm.riscv.vnsrl.nxv2i8.nxv2i16.nxv2i8(
54   <vscale x 2 x i8>,
55   <vscale x 2 x i16>,
56   <vscale x 2 x i8>,
57   iXLen);
59 define <vscale x 2 x i8> @intrinsic_vnsrl_wv_nxv2i8_nxv2i16_nxv2i8(<vscale x 2 x i16> %0, <vscale x 2 x i8> %1, iXLen %2) nounwind {
60 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv2i8_nxv2i16_nxv2i8:
61 ; CHECK:       # %bb.0: # %entry
62 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
63 ; CHECK-NEXT:    vnsrl.wv v8, v8, v9
64 ; CHECK-NEXT:    ret
65 entry:
66   %a = call <vscale x 2 x i8> @llvm.riscv.vnsrl.nxv2i8.nxv2i16.nxv2i8(
67     <vscale x 2 x i8> undef,
68     <vscale x 2 x i16> %0,
69     <vscale x 2 x i8> %1,
70     iXLen %2)
72   ret <vscale x 2 x i8> %a
75 declare <vscale x 2 x i8> @llvm.riscv.vnsrl.mask.nxv2i8.nxv2i16.nxv2i8(
76   <vscale x 2 x i8>,
77   <vscale x 2 x i16>,
78   <vscale x 2 x i8>,
79   <vscale x 2 x i1>,
80   iXLen,
81   iXLen);
83 define <vscale x 2 x i8> @intrinsic_vnsrl_mask_wv_nxv2i8_nxv2i16_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i16> %1, <vscale x 2 x i8> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
84 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv2i8_nxv2i16_nxv2i8:
85 ; CHECK:       # %bb.0: # %entry
86 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
87 ; CHECK-NEXT:    vnsrl.wv v8, v9, v10, v0.t
88 ; CHECK-NEXT:    ret
89 entry:
90   %a = call <vscale x 2 x i8> @llvm.riscv.vnsrl.mask.nxv2i8.nxv2i16.nxv2i8(
91     <vscale x 2 x i8> %0,
92     <vscale x 2 x i16> %1,
93     <vscale x 2 x i8> %2,
94     <vscale x 2 x i1> %3,
95     iXLen %4, iXLen 1)
97   ret <vscale x 2 x i8> %a
100 declare <vscale x 4 x i8> @llvm.riscv.vnsrl.nxv4i8.nxv4i16.nxv4i8(
101   <vscale x 4 x i8>,
102   <vscale x 4 x i16>,
103   <vscale x 4 x i8>,
104   iXLen);
106 define <vscale x 4 x i8> @intrinsic_vnsrl_wv_nxv4i8_nxv4i16_nxv4i8(<vscale x 4 x i16> %0, <vscale x 4 x i8> %1, iXLen %2) nounwind {
107 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv4i8_nxv4i16_nxv4i8:
108 ; CHECK:       # %bb.0: # %entry
109 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
110 ; CHECK-NEXT:    vnsrl.wv v8, v8, v9
111 ; CHECK-NEXT:    ret
112 entry:
113   %a = call <vscale x 4 x i8> @llvm.riscv.vnsrl.nxv4i8.nxv4i16.nxv4i8(
114     <vscale x 4 x i8> undef,
115     <vscale x 4 x i16> %0,
116     <vscale x 4 x i8> %1,
117     iXLen %2)
119   ret <vscale x 4 x i8> %a
122 declare <vscale x 4 x i8> @llvm.riscv.vnsrl.mask.nxv4i8.nxv4i16.nxv4i8(
123   <vscale x 4 x i8>,
124   <vscale x 4 x i16>,
125   <vscale x 4 x i8>,
126   <vscale x 4 x i1>,
127   iXLen,
128   iXLen);
130 define <vscale x 4 x i8> @intrinsic_vnsrl_mask_wv_nxv4i8_nxv4i16_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i16> %1, <vscale x 4 x i8> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
131 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv4i8_nxv4i16_nxv4i8:
132 ; CHECK:       # %bb.0: # %entry
133 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
134 ; CHECK-NEXT:    vnsrl.wv v8, v9, v10, v0.t
135 ; CHECK-NEXT:    ret
136 entry:
137   %a = call <vscale x 4 x i8> @llvm.riscv.vnsrl.mask.nxv4i8.nxv4i16.nxv4i8(
138     <vscale x 4 x i8> %0,
139     <vscale x 4 x i16> %1,
140     <vscale x 4 x i8> %2,
141     <vscale x 4 x i1> %3,
142     iXLen %4, iXLen 1)
144   ret <vscale x 4 x i8> %a
147 declare <vscale x 8 x i8> @llvm.riscv.vnsrl.nxv8i8.nxv8i16.nxv8i8(
148   <vscale x 8 x i8>,
149   <vscale x 8 x i16>,
150   <vscale x 8 x i8>,
151   iXLen);
153 define <vscale x 8 x i8> @intrinsic_vnsrl_wv_nxv8i8_nxv8i16_nxv8i8(<vscale x 8 x i16> %0, <vscale x 8 x i8> %1, iXLen %2) nounwind {
154 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv8i8_nxv8i16_nxv8i8:
155 ; CHECK:       # %bb.0: # %entry
156 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
157 ; CHECK-NEXT:    vnsrl.wv v11, v8, v10
158 ; CHECK-NEXT:    vmv.v.v v8, v11
159 ; CHECK-NEXT:    ret
160 entry:
161   %a = call <vscale x 8 x i8> @llvm.riscv.vnsrl.nxv8i8.nxv8i16.nxv8i8(
162     <vscale x 8 x i8> undef,
163     <vscale x 8 x i16> %0,
164     <vscale x 8 x i8> %1,
165     iXLen %2)
167   ret <vscale x 8 x i8> %a
170 declare <vscale x 8 x i8> @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16.nxv8i8(
171   <vscale x 8 x i8>,
172   <vscale x 8 x i16>,
173   <vscale x 8 x i8>,
174   <vscale x 8 x i1>,
175   iXLen,
176   iXLen);
178 define <vscale x 8 x i8> @intrinsic_vnsrl_mask_wv_nxv8i8_nxv8i16_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i16> %1, <vscale x 8 x i8> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
179 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv8i8_nxv8i16_nxv8i8:
180 ; CHECK:       # %bb.0: # %entry
181 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
182 ; CHECK-NEXT:    vnsrl.wv v8, v10, v9, v0.t
183 ; CHECK-NEXT:    ret
184 entry:
185   %a = call <vscale x 8 x i8> @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16.nxv8i8(
186     <vscale x 8 x i8> %0,
187     <vscale x 8 x i16> %1,
188     <vscale x 8 x i8> %2,
189     <vscale x 8 x i1> %3,
190     iXLen %4, iXLen 1)
192   ret <vscale x 8 x i8> %a
195 declare <vscale x 16 x i8> @llvm.riscv.vnsrl.nxv16i8.nxv16i16.nxv16i8(
196   <vscale x 16 x i8>,
197   <vscale x 16 x i16>,
198   <vscale x 16 x i8>,
199   iXLen);
201 define <vscale x 16 x i8> @intrinsic_vnsrl_wv_nxv16i8_nxv16i16_nxv16i8(<vscale x 16 x i16> %0, <vscale x 16 x i8> %1, iXLen %2) nounwind {
202 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv16i8_nxv16i16_nxv16i8:
203 ; CHECK:       # %bb.0: # %entry
204 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
205 ; CHECK-NEXT:    vnsrl.wv v14, v8, v12
206 ; CHECK-NEXT:    vmv.v.v v8, v14
207 ; CHECK-NEXT:    ret
208 entry:
209   %a = call <vscale x 16 x i8> @llvm.riscv.vnsrl.nxv16i8.nxv16i16.nxv16i8(
210     <vscale x 16 x i8> undef,
211     <vscale x 16 x i16> %0,
212     <vscale x 16 x i8> %1,
213     iXLen %2)
215   ret <vscale x 16 x i8> %a
218 declare <vscale x 16 x i8> @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16.nxv16i8(
219   <vscale x 16 x i8>,
220   <vscale x 16 x i16>,
221   <vscale x 16 x i8>,
222   <vscale x 16 x i1>,
223   iXLen,
224   iXLen);
226 define <vscale x 16 x i8> @intrinsic_vnsrl_mask_wv_nxv16i8_nxv16i16_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i16> %1, <vscale x 16 x i8> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
227 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv16i8_nxv16i16_nxv16i8:
228 ; CHECK:       # %bb.0: # %entry
229 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
230 ; CHECK-NEXT:    vnsrl.wv v8, v12, v10, v0.t
231 ; CHECK-NEXT:    ret
232 entry:
233   %a = call <vscale x 16 x i8> @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16.nxv16i8(
234     <vscale x 16 x i8> %0,
235     <vscale x 16 x i16> %1,
236     <vscale x 16 x i8> %2,
237     <vscale x 16 x i1> %3,
238     iXLen %4, iXLen 1)
240   ret <vscale x 16 x i8> %a
243 declare <vscale x 32 x i8> @llvm.riscv.vnsrl.nxv32i8.nxv32i16.nxv32i8(
244   <vscale x 32 x i8>,
245   <vscale x 32 x i16>,
246   <vscale x 32 x i8>,
247   iXLen);
249 define <vscale x 32 x i8> @intrinsic_vnsrl_wv_nxv32i8_nxv32i16_nxv32i8(<vscale x 32 x i16> %0, <vscale x 32 x i8> %1, iXLen %2) nounwind {
250 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv32i8_nxv32i16_nxv32i8:
251 ; CHECK:       # %bb.0: # %entry
252 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
253 ; CHECK-NEXT:    vnsrl.wv v20, v8, v16
254 ; CHECK-NEXT:    vmv.v.v v8, v20
255 ; CHECK-NEXT:    ret
256 entry:
257   %a = call <vscale x 32 x i8> @llvm.riscv.vnsrl.nxv32i8.nxv32i16.nxv32i8(
258     <vscale x 32 x i8> undef,
259     <vscale x 32 x i16> %0,
260     <vscale x 32 x i8> %1,
261     iXLen %2)
263   ret <vscale x 32 x i8> %a
266 declare <vscale x 32 x i8> @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16.nxv32i8(
267   <vscale x 32 x i8>,
268   <vscale x 32 x i16>,
269   <vscale x 32 x i8>,
270   <vscale x 32 x i1>,
271   iXLen,
272   iXLen);
274 define <vscale x 32 x i8> @intrinsic_vnsrl_mask_wv_nxv32i8_nxv32i16_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i16> %1, <vscale x 32 x i8> %2, <vscale x 32 x i1> %3, iXLen %4) nounwind {
275 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv32i8_nxv32i16_nxv32i8:
276 ; CHECK:       # %bb.0: # %entry
277 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
278 ; CHECK-NEXT:    vnsrl.wv v8, v16, v12, v0.t
279 ; CHECK-NEXT:    ret
280 entry:
281   %a = call <vscale x 32 x i8> @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16.nxv32i8(
282     <vscale x 32 x i8> %0,
283     <vscale x 32 x i16> %1,
284     <vscale x 32 x i8> %2,
285     <vscale x 32 x i1> %3,
286     iXLen %4, iXLen 1)
288   ret <vscale x 32 x i8> %a
291 declare <vscale x 1 x i16> @llvm.riscv.vnsrl.nxv1i16.nxv1i32.nxv1i16(
292   <vscale x 1 x i16>,
293   <vscale x 1 x i32>,
294   <vscale x 1 x i16>,
295   iXLen);
297 define <vscale x 1 x i16> @intrinsic_vnsrl_wv_nxv1i16_nxv1i32_nxv1i16(<vscale x 1 x i32> %0, <vscale x 1 x i16> %1, iXLen %2) nounwind {
298 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv1i16_nxv1i32_nxv1i16:
299 ; CHECK:       # %bb.0: # %entry
300 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
301 ; CHECK-NEXT:    vnsrl.wv v8, v8, v9
302 ; CHECK-NEXT:    ret
303 entry:
304   %a = call <vscale x 1 x i16> @llvm.riscv.vnsrl.nxv1i16.nxv1i32.nxv1i16(
305     <vscale x 1 x i16> undef,
306     <vscale x 1 x i32> %0,
307     <vscale x 1 x i16> %1,
308     iXLen %2)
310   ret <vscale x 1 x i16> %a
313 declare <vscale x 1 x i16> @llvm.riscv.vnsrl.mask.nxv1i16.nxv1i32.nxv1i16(
314   <vscale x 1 x i16>,
315   <vscale x 1 x i32>,
316   <vscale x 1 x i16>,
317   <vscale x 1 x i1>,
318   iXLen,
319   iXLen);
321 define <vscale x 1 x i16> @intrinsic_vnsrl_mask_wv_nxv1i16_nxv1i32_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i32> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
322 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv1i16_nxv1i32_nxv1i16:
323 ; CHECK:       # %bb.0: # %entry
324 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
325 ; CHECK-NEXT:    vnsrl.wv v8, v9, v10, v0.t
326 ; CHECK-NEXT:    ret
327 entry:
328   %a = call <vscale x 1 x i16> @llvm.riscv.vnsrl.mask.nxv1i16.nxv1i32.nxv1i16(
329     <vscale x 1 x i16> %0,
330     <vscale x 1 x i32> %1,
331     <vscale x 1 x i16> %2,
332     <vscale x 1 x i1> %3,
333     iXLen %4, iXLen 1)
335   ret <vscale x 1 x i16> %a
338 declare <vscale x 2 x i16> @llvm.riscv.vnsrl.nxv2i16.nxv2i32.nxv2i16(
339   <vscale x 2 x i16>,
340   <vscale x 2 x i32>,
341   <vscale x 2 x i16>,
342   iXLen);
344 define <vscale x 2 x i16> @intrinsic_vnsrl_wv_nxv2i16_nxv2i32_nxv2i16(<vscale x 2 x i32> %0, <vscale x 2 x i16> %1, iXLen %2) nounwind {
345 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv2i16_nxv2i32_nxv2i16:
346 ; CHECK:       # %bb.0: # %entry
347 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
348 ; CHECK-NEXT:    vnsrl.wv v8, v8, v9
349 ; CHECK-NEXT:    ret
350 entry:
351   %a = call <vscale x 2 x i16> @llvm.riscv.vnsrl.nxv2i16.nxv2i32.nxv2i16(
352     <vscale x 2 x i16> undef,
353     <vscale x 2 x i32> %0,
354     <vscale x 2 x i16> %1,
355     iXLen %2)
357   ret <vscale x 2 x i16> %a
360 declare <vscale x 2 x i16> @llvm.riscv.vnsrl.mask.nxv2i16.nxv2i32.nxv2i16(
361   <vscale x 2 x i16>,
362   <vscale x 2 x i32>,
363   <vscale x 2 x i16>,
364   <vscale x 2 x i1>,
365   iXLen,
366   iXLen);
368 define <vscale x 2 x i16> @intrinsic_vnsrl_mask_wv_nxv2i16_nxv2i32_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i32> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
369 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv2i16_nxv2i32_nxv2i16:
370 ; CHECK:       # %bb.0: # %entry
371 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
372 ; CHECK-NEXT:    vnsrl.wv v8, v9, v10, v0.t
373 ; CHECK-NEXT:    ret
374 entry:
375   %a = call <vscale x 2 x i16> @llvm.riscv.vnsrl.mask.nxv2i16.nxv2i32.nxv2i16(
376     <vscale x 2 x i16> %0,
377     <vscale x 2 x i32> %1,
378     <vscale x 2 x i16> %2,
379     <vscale x 2 x i1> %3,
380     iXLen %4, iXLen 1)
382   ret <vscale x 2 x i16> %a
385 declare <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32.nxv4i16(
386   <vscale x 4 x i16>,
387   <vscale x 4 x i32>,
388   <vscale x 4 x i16>,
389   iXLen);
391 define <vscale x 4 x i16> @intrinsic_vnsrl_wv_nxv4i16_nxv4i32_nxv4i16(<vscale x 4 x i32> %0, <vscale x 4 x i16> %1, iXLen %2) nounwind {
392 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv4i16_nxv4i32_nxv4i16:
393 ; CHECK:       # %bb.0: # %entry
394 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
395 ; CHECK-NEXT:    vnsrl.wv v11, v8, v10
396 ; CHECK-NEXT:    vmv.v.v v8, v11
397 ; CHECK-NEXT:    ret
398 entry:
399   %a = call <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32.nxv4i16(
400     <vscale x 4 x i16> undef,
401     <vscale x 4 x i32> %0,
402     <vscale x 4 x i16> %1,
403     iXLen %2)
405   ret <vscale x 4 x i16> %a
408 declare <vscale x 4 x i16> @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32.nxv4i16(
409   <vscale x 4 x i16>,
410   <vscale x 4 x i32>,
411   <vscale x 4 x i16>,
412   <vscale x 4 x i1>,
413   iXLen,
414   iXLen);
416 define <vscale x 4 x i16> @intrinsic_vnsrl_mask_wv_nxv4i16_nxv4i32_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i32> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
417 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv4i16_nxv4i32_nxv4i16:
418 ; CHECK:       # %bb.0: # %entry
419 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
420 ; CHECK-NEXT:    vnsrl.wv v8, v10, v9, v0.t
421 ; CHECK-NEXT:    ret
422 entry:
423   %a = call <vscale x 4 x i16> @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32.nxv4i16(
424     <vscale x 4 x i16> %0,
425     <vscale x 4 x i32> %1,
426     <vscale x 4 x i16> %2,
427     <vscale x 4 x i1> %3,
428     iXLen %4, iXLen 1)
430   ret <vscale x 4 x i16> %a
433 declare <vscale x 8 x i16> @llvm.riscv.vnsrl.nxv8i16.nxv8i32.nxv8i16(
434   <vscale x 8 x i16>,
435   <vscale x 8 x i32>,
436   <vscale x 8 x i16>,
437   iXLen);
439 define <vscale x 8 x i16> @intrinsic_vnsrl_wv_nxv8i16_nxv8i32_nxv8i16(<vscale x 8 x i32> %0, <vscale x 8 x i16> %1, iXLen %2) nounwind {
440 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv8i16_nxv8i32_nxv8i16:
441 ; CHECK:       # %bb.0: # %entry
442 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
443 ; CHECK-NEXT:    vnsrl.wv v14, v8, v12
444 ; CHECK-NEXT:    vmv.v.v v8, v14
445 ; CHECK-NEXT:    ret
446 entry:
447   %a = call <vscale x 8 x i16> @llvm.riscv.vnsrl.nxv8i16.nxv8i32.nxv8i16(
448     <vscale x 8 x i16> undef,
449     <vscale x 8 x i32> %0,
450     <vscale x 8 x i16> %1,
451     iXLen %2)
453   ret <vscale x 8 x i16> %a
456 declare <vscale x 8 x i16> @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32.nxv8i16(
457   <vscale x 8 x i16>,
458   <vscale x 8 x i32>,
459   <vscale x 8 x i16>,
460   <vscale x 8 x i1>,
461   iXLen,
462   iXLen);
464 define <vscale x 8 x i16> @intrinsic_vnsrl_mask_wv_nxv8i16_nxv8i32_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i32> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
465 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv8i16_nxv8i32_nxv8i16:
466 ; CHECK:       # %bb.0: # %entry
467 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
468 ; CHECK-NEXT:    vnsrl.wv v8, v12, v10, v0.t
469 ; CHECK-NEXT:    ret
470 entry:
471   %a = call <vscale x 8 x i16> @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32.nxv8i16(
472     <vscale x 8 x i16> %0,
473     <vscale x 8 x i32> %1,
474     <vscale x 8 x i16> %2,
475     <vscale x 8 x i1> %3,
476     iXLen %4, iXLen 1)
478   ret <vscale x 8 x i16> %a
481 declare <vscale x 16 x i16> @llvm.riscv.vnsrl.nxv16i16.nxv16i32.nxv16i16(
482   <vscale x 16 x i16>,
483   <vscale x 16 x i32>,
484   <vscale x 16 x i16>,
485   iXLen);
487 define <vscale x 16 x i16> @intrinsic_vnsrl_wv_nxv16i16_nxv16i32_nxv16i16(<vscale x 16 x i32> %0, <vscale x 16 x i16> %1, iXLen %2) nounwind {
488 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv16i16_nxv16i32_nxv16i16:
489 ; CHECK:       # %bb.0: # %entry
490 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
491 ; CHECK-NEXT:    vnsrl.wv v20, v8, v16
492 ; CHECK-NEXT:    vmv.v.v v8, v20
493 ; CHECK-NEXT:    ret
494 entry:
495   %a = call <vscale x 16 x i16> @llvm.riscv.vnsrl.nxv16i16.nxv16i32.nxv16i16(
496     <vscale x 16 x i16> undef,
497     <vscale x 16 x i32> %0,
498     <vscale x 16 x i16> %1,
499     iXLen %2)
501   ret <vscale x 16 x i16> %a
504 declare <vscale x 16 x i16> @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32.nxv16i16(
505   <vscale x 16 x i16>,
506   <vscale x 16 x i32>,
507   <vscale x 16 x i16>,
508   <vscale x 16 x i1>,
509   iXLen,
510   iXLen);
512 define <vscale x 16 x i16> @intrinsic_vnsrl_mask_wv_nxv16i16_nxv16i32_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i32> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
513 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv16i16_nxv16i32_nxv16i16:
514 ; CHECK:       # %bb.0: # %entry
515 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
516 ; CHECK-NEXT:    vnsrl.wv v8, v16, v12, v0.t
517 ; CHECK-NEXT:    ret
518 entry:
519   %a = call <vscale x 16 x i16> @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32.nxv16i16(
520     <vscale x 16 x i16> %0,
521     <vscale x 16 x i32> %1,
522     <vscale x 16 x i16> %2,
523     <vscale x 16 x i1> %3,
524     iXLen %4, iXLen 1)
526   ret <vscale x 16 x i16> %a
529 declare <vscale x 1 x i32> @llvm.riscv.vnsrl.nxv1i32.nxv1i64.nxv1i32(
530   <vscale x 1 x i32>,
531   <vscale x 1 x i64>,
532   <vscale x 1 x i32>,
533   iXLen);
535 define <vscale x 1 x i32> @intrinsic_vnsrl_wv_nxv1i32_nxv1i64_nxv1i32(<vscale x 1 x i64> %0, <vscale x 1 x i32> %1, iXLen %2) nounwind {
536 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv1i32_nxv1i64_nxv1i32:
537 ; CHECK:       # %bb.0: # %entry
538 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
539 ; CHECK-NEXT:    vnsrl.wv v8, v8, v9
540 ; CHECK-NEXT:    ret
541 entry:
542   %a = call <vscale x 1 x i32> @llvm.riscv.vnsrl.nxv1i32.nxv1i64.nxv1i32(
543     <vscale x 1 x i32> undef,
544     <vscale x 1 x i64> %0,
545     <vscale x 1 x i32> %1,
546     iXLen %2)
548   ret <vscale x 1 x i32> %a
551 declare <vscale x 1 x i32> @llvm.riscv.vnsrl.mask.nxv1i32.nxv1i64.nxv1i32(
552   <vscale x 1 x i32>,
553   <vscale x 1 x i64>,
554   <vscale x 1 x i32>,
555   <vscale x 1 x i1>,
556   iXLen,
557   iXLen);
559 define <vscale x 1 x i32> @intrinsic_vnsrl_mask_wv_nxv1i32_nxv1i64_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i64> %1, <vscale x 1 x i32> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
560 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv1i32_nxv1i64_nxv1i32:
561 ; CHECK:       # %bb.0: # %entry
562 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
563 ; CHECK-NEXT:    vnsrl.wv v8, v9, v10, v0.t
564 ; CHECK-NEXT:    ret
565 entry:
566   %a = call <vscale x 1 x i32> @llvm.riscv.vnsrl.mask.nxv1i32.nxv1i64.nxv1i32(
567     <vscale x 1 x i32> %0,
568     <vscale x 1 x i64> %1,
569     <vscale x 1 x i32> %2,
570     <vscale x 1 x i1> %3,
571     iXLen %4, iXLen 1)
573   ret <vscale x 1 x i32> %a
576 declare <vscale x 2 x i32> @llvm.riscv.vnsrl.nxv2i32.nxv2i64.nxv2i32(
577   <vscale x 2 x i32>,
578   <vscale x 2 x i64>,
579   <vscale x 2 x i32>,
580   iXLen);
582 define <vscale x 2 x i32> @intrinsic_vnsrl_wv_nxv2i32_nxv2i64_nxv2i32(<vscale x 2 x i64> %0, <vscale x 2 x i32> %1, iXLen %2) nounwind {
583 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv2i32_nxv2i64_nxv2i32:
584 ; CHECK:       # %bb.0: # %entry
585 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
586 ; CHECK-NEXT:    vnsrl.wv v11, v8, v10
587 ; CHECK-NEXT:    vmv.v.v v8, v11
588 ; CHECK-NEXT:    ret
589 entry:
590   %a = call <vscale x 2 x i32> @llvm.riscv.vnsrl.nxv2i32.nxv2i64.nxv2i32(
591     <vscale x 2 x i32> undef,
592     <vscale x 2 x i64> %0,
593     <vscale x 2 x i32> %1,
594     iXLen %2)
596   ret <vscale x 2 x i32> %a
599 declare <vscale x 2 x i32> @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64.nxv2i32(
600   <vscale x 2 x i32>,
601   <vscale x 2 x i64>,
602   <vscale x 2 x i32>,
603   <vscale x 2 x i1>,
604   iXLen,
605   iXLen);
607 define <vscale x 2 x i32> @intrinsic_vnsrl_mask_wv_nxv2i32_nxv2i64_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i64> %1, <vscale x 2 x i32> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
608 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv2i32_nxv2i64_nxv2i32:
609 ; CHECK:       # %bb.0: # %entry
610 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
611 ; CHECK-NEXT:    vnsrl.wv v8, v10, v9, v0.t
612 ; CHECK-NEXT:    ret
613 entry:
614   %a = call <vscale x 2 x i32> @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64.nxv2i32(
615     <vscale x 2 x i32> %0,
616     <vscale x 2 x i64> %1,
617     <vscale x 2 x i32> %2,
618     <vscale x 2 x i1> %3,
619     iXLen %4, iXLen 1)
621   ret <vscale x 2 x i32> %a
624 declare <vscale x 4 x i32> @llvm.riscv.vnsrl.nxv4i32.nxv4i64.nxv4i32(
625   <vscale x 4 x i32>,
626   <vscale x 4 x i64>,
627   <vscale x 4 x i32>,
628   iXLen);
630 define <vscale x 4 x i32> @intrinsic_vnsrl_wv_nxv4i32_nxv4i64_nxv4i32(<vscale x 4 x i64> %0, <vscale x 4 x i32> %1, iXLen %2) nounwind {
631 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv4i32_nxv4i64_nxv4i32:
632 ; CHECK:       # %bb.0: # %entry
633 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
634 ; CHECK-NEXT:    vnsrl.wv v14, v8, v12
635 ; CHECK-NEXT:    vmv.v.v v8, v14
636 ; CHECK-NEXT:    ret
637 entry:
638   %a = call <vscale x 4 x i32> @llvm.riscv.vnsrl.nxv4i32.nxv4i64.nxv4i32(
639     <vscale x 4 x i32> undef,
640     <vscale x 4 x i64> %0,
641     <vscale x 4 x i32> %1,
642     iXLen %2)
644   ret <vscale x 4 x i32> %a
647 declare <vscale x 4 x i32> @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64.nxv4i32(
648   <vscale x 4 x i32>,
649   <vscale x 4 x i64>,
650   <vscale x 4 x i32>,
651   <vscale x 4 x i1>,
652   iXLen,
653   iXLen);
655 define <vscale x 4 x i32> @intrinsic_vnsrl_mask_wv_nxv4i32_nxv4i64_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i64> %1, <vscale x 4 x i32> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
656 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv4i32_nxv4i64_nxv4i32:
657 ; CHECK:       # %bb.0: # %entry
658 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
659 ; CHECK-NEXT:    vnsrl.wv v8, v12, v10, v0.t
660 ; CHECK-NEXT:    ret
661 entry:
662   %a = call <vscale x 4 x i32> @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64.nxv4i32(
663     <vscale x 4 x i32> %0,
664     <vscale x 4 x i64> %1,
665     <vscale x 4 x i32> %2,
666     <vscale x 4 x i1> %3,
667     iXLen %4, iXLen 1)
669   ret <vscale x 4 x i32> %a
672 declare <vscale x 8 x i32> @llvm.riscv.vnsrl.nxv8i32.nxv8i64.nxv8i32(
673   <vscale x 8 x i32>,
674   <vscale x 8 x i64>,
675   <vscale x 8 x i32>,
676   iXLen);
678 define <vscale x 8 x i32> @intrinsic_vnsrl_wv_nxv8i32_nxv8i64_nxv8i32(<vscale x 8 x i64> %0, <vscale x 8 x i32> %1, iXLen %2) nounwind {
679 ; CHECK-LABEL: intrinsic_vnsrl_wv_nxv8i32_nxv8i64_nxv8i32:
680 ; CHECK:       # %bb.0: # %entry
681 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
682 ; CHECK-NEXT:    vnsrl.wv v20, v8, v16
683 ; CHECK-NEXT:    vmv.v.v v8, v20
684 ; CHECK-NEXT:    ret
685 entry:
686   %a = call <vscale x 8 x i32> @llvm.riscv.vnsrl.nxv8i32.nxv8i64.nxv8i32(
687     <vscale x 8 x i32> undef,
688     <vscale x 8 x i64> %0,
689     <vscale x 8 x i32> %1,
690     iXLen %2)
692   ret <vscale x 8 x i32> %a
695 declare <vscale x 8 x i32> @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64.nxv8i32(
696   <vscale x 8 x i32>,
697   <vscale x 8 x i64>,
698   <vscale x 8 x i32>,
699   <vscale x 8 x i1>,
700   iXLen,
701   iXLen);
703 define <vscale x 8 x i32> @intrinsic_vnsrl_mask_wv_nxv8i32_nxv8i64_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i64> %1, <vscale x 8 x i32> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
704 ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv8i32_nxv8i64_nxv8i32:
705 ; CHECK:       # %bb.0: # %entry
706 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
707 ; CHECK-NEXT:    vnsrl.wv v8, v16, v12, v0.t
708 ; CHECK-NEXT:    ret
709 entry:
710   %a = call <vscale x 8 x i32> @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64.nxv8i32(
711     <vscale x 8 x i32> %0,
712     <vscale x 8 x i64> %1,
713     <vscale x 8 x i32> %2,
714     <vscale x 8 x i1> %3,
715     iXLen %4, iXLen 1)
717   ret <vscale x 8 x i32> %a
720 declare <vscale x 1 x i8> @llvm.riscv.vnsrl.nxv1i8.nxv1i16(
721   <vscale x 1 x i8>,
722   <vscale x 1 x i16>,
723   iXLen,
724   iXLen);
726 define <vscale x 1 x i8> @intrinsic_vnsrl_vx_nxv1i8_nxv1i16(<vscale x 1 x i16> %0, iXLen %1, iXLen %2) nounwind {
727 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv1i8_nxv1i16:
728 ; CHECK:       # %bb.0: # %entry
729 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
730 ; CHECK-NEXT:    vnsrl.wx v8, v8, a0
731 ; CHECK-NEXT:    ret
732 entry:
733   %a = call <vscale x 1 x i8> @llvm.riscv.vnsrl.nxv1i8.nxv1i16(
734     <vscale x 1 x i8> undef,
735     <vscale x 1 x i16> %0,
736     iXLen %1,
737     iXLen %2)
739   ret <vscale x 1 x i8> %a
742 declare <vscale x 1 x i8> @llvm.riscv.vnsrl.mask.nxv1i8.nxv1i16(
743   <vscale x 1 x i8>,
744   <vscale x 1 x i16>,
745   iXLen,
746   <vscale x 1 x i1>,
747   iXLen,
748   iXLen);
750 define <vscale x 1 x i8> @intrinsic_vnsrl_mask_vx_nxv1i8_nxv1i16(<vscale x 1 x i8> %0, <vscale x 1 x i16> %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
751 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv1i8_nxv1i16:
752 ; CHECK:       # %bb.0: # %entry
753 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, mu
754 ; CHECK-NEXT:    vnsrl.wx v8, v9, a0, v0.t
755 ; CHECK-NEXT:    ret
756 entry:
757   %a = call <vscale x 1 x i8> @llvm.riscv.vnsrl.mask.nxv1i8.nxv1i16(
758     <vscale x 1 x i8> %0,
759     <vscale x 1 x i16> %1,
760     iXLen %2,
761     <vscale x 1 x i1> %3,
762     iXLen %4, iXLen 1)
764   ret <vscale x 1 x i8> %a
767 declare <vscale x 2 x i8> @llvm.riscv.vnsrl.nxv2i8.nxv2i16(
768   <vscale x 2 x i8>,
769   <vscale x 2 x i16>,
770   iXLen,
771   iXLen);
773 define <vscale x 2 x i8> @intrinsic_vnsrl_vx_nxv2i8_nxv2i16(<vscale x 2 x i16> %0, iXLen %1, iXLen %2) nounwind {
774 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv2i8_nxv2i16:
775 ; CHECK:       # %bb.0: # %entry
776 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
777 ; CHECK-NEXT:    vnsrl.wx v8, v8, a0
778 ; CHECK-NEXT:    ret
779 entry:
780   %a = call <vscale x 2 x i8> @llvm.riscv.vnsrl.nxv2i8.nxv2i16(
781     <vscale x 2 x i8> undef,
782     <vscale x 2 x i16> %0,
783     iXLen %1,
784     iXLen %2)
786   ret <vscale x 2 x i8> %a
789 declare <vscale x 2 x i8> @llvm.riscv.vnsrl.mask.nxv2i8.nxv2i16(
790   <vscale x 2 x i8>,
791   <vscale x 2 x i16>,
792   iXLen,
793   <vscale x 2 x i1>,
794   iXLen,
795   iXLen);
797 define <vscale x 2 x i8> @intrinsic_vnsrl_mask_vx_nxv2i8_nxv2i16(<vscale x 2 x i8> %0, <vscale x 2 x i16> %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
798 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv2i8_nxv2i16:
799 ; CHECK:       # %bb.0: # %entry
800 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, mu
801 ; CHECK-NEXT:    vnsrl.wx v8, v9, a0, v0.t
802 ; CHECK-NEXT:    ret
803 entry:
804   %a = call <vscale x 2 x i8> @llvm.riscv.vnsrl.mask.nxv2i8.nxv2i16(
805     <vscale x 2 x i8> %0,
806     <vscale x 2 x i16> %1,
807     iXLen %2,
808     <vscale x 2 x i1> %3,
809     iXLen %4, iXLen 1)
811   ret <vscale x 2 x i8> %a
814 declare <vscale x 4 x i8> @llvm.riscv.vnsrl.nxv4i8.nxv4i16(
815   <vscale x 4 x i8>,
816   <vscale x 4 x i16>,
817   iXLen,
818   iXLen);
820 define <vscale x 4 x i8> @intrinsic_vnsrl_vx_nxv4i8_nxv4i16(<vscale x 4 x i16> %0, iXLen %1, iXLen %2) nounwind {
821 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv4i8_nxv4i16:
822 ; CHECK:       # %bb.0: # %entry
823 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
824 ; CHECK-NEXT:    vnsrl.wx v8, v8, a0
825 ; CHECK-NEXT:    ret
826 entry:
827   %a = call <vscale x 4 x i8> @llvm.riscv.vnsrl.nxv4i8.nxv4i16(
828     <vscale x 4 x i8> undef,
829     <vscale x 4 x i16> %0,
830     iXLen %1,
831     iXLen %2)
833   ret <vscale x 4 x i8> %a
836 declare <vscale x 4 x i8> @llvm.riscv.vnsrl.mask.nxv4i8.nxv4i16(
837   <vscale x 4 x i8>,
838   <vscale x 4 x i16>,
839   iXLen,
840   <vscale x 4 x i1>,
841   iXLen,
842   iXLen);
844 define <vscale x 4 x i8> @intrinsic_vnsrl_mask_vx_nxv4i8_nxv4i16(<vscale x 4 x i8> %0, <vscale x 4 x i16> %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
845 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv4i8_nxv4i16:
846 ; CHECK:       # %bb.0: # %entry
847 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, mu
848 ; CHECK-NEXT:    vnsrl.wx v8, v9, a0, v0.t
849 ; CHECK-NEXT:    ret
850 entry:
851   %a = call <vscale x 4 x i8> @llvm.riscv.vnsrl.mask.nxv4i8.nxv4i16(
852     <vscale x 4 x i8> %0,
853     <vscale x 4 x i16> %1,
854     iXLen %2,
855     <vscale x 4 x i1> %3,
856     iXLen %4, iXLen 1)
858   ret <vscale x 4 x i8> %a
861 declare <vscale x 8 x i8> @llvm.riscv.vnsrl.nxv8i8.nxv8i16(
862   <vscale x 8 x i8>,
863   <vscale x 8 x i16>,
864   iXLen,
865   iXLen);
867 define <vscale x 8 x i8> @intrinsic_vnsrl_vx_nxv8i8_nxv8i16(<vscale x 8 x i16> %0, iXLen %1, iXLen %2) nounwind {
868 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv8i8_nxv8i16:
869 ; CHECK:       # %bb.0: # %entry
870 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
871 ; CHECK-NEXT:    vnsrl.wx v10, v8, a0
872 ; CHECK-NEXT:    vmv.v.v v8, v10
873 ; CHECK-NEXT:    ret
874 entry:
875   %a = call <vscale x 8 x i8> @llvm.riscv.vnsrl.nxv8i8.nxv8i16(
876     <vscale x 8 x i8> undef,
877     <vscale x 8 x i16> %0,
878     iXLen %1,
879     iXLen %2)
881   ret <vscale x 8 x i8> %a
884 declare <vscale x 8 x i8> @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16(
885   <vscale x 8 x i8>,
886   <vscale x 8 x i16>,
887   iXLen,
888   <vscale x 8 x i1>,
889   iXLen,
890   iXLen);
892 define <vscale x 8 x i8> @intrinsic_vnsrl_mask_vx_nxv8i8_nxv8i16(<vscale x 8 x i8> %0, <vscale x 8 x i16> %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
893 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv8i8_nxv8i16:
894 ; CHECK:       # %bb.0: # %entry
895 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, mu
896 ; CHECK-NEXT:    vnsrl.wx v8, v10, a0, v0.t
897 ; CHECK-NEXT:    ret
898 entry:
899   %a = call <vscale x 8 x i8> @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16(
900     <vscale x 8 x i8> %0,
901     <vscale x 8 x i16> %1,
902     iXLen %2,
903     <vscale x 8 x i1> %3,
904     iXLen %4, iXLen 1)
906   ret <vscale x 8 x i8> %a
909 declare <vscale x 16 x i8> @llvm.riscv.vnsrl.nxv16i8.nxv16i16(
910   <vscale x 16 x i8>,
911   <vscale x 16 x i16>,
912   iXLen,
913   iXLen);
915 define <vscale x 16 x i8> @intrinsic_vnsrl_vx_nxv16i8_nxv16i16(<vscale x 16 x i16> %0, iXLen %1, iXLen %2) nounwind {
916 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv16i8_nxv16i16:
917 ; CHECK:       # %bb.0: # %entry
918 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
919 ; CHECK-NEXT:    vnsrl.wx v12, v8, a0
920 ; CHECK-NEXT:    vmv.v.v v8, v12
921 ; CHECK-NEXT:    ret
922 entry:
923   %a = call <vscale x 16 x i8> @llvm.riscv.vnsrl.nxv16i8.nxv16i16(
924     <vscale x 16 x i8> undef,
925     <vscale x 16 x i16> %0,
926     iXLen %1,
927     iXLen %2)
929   ret <vscale x 16 x i8> %a
932 declare <vscale x 16 x i8> @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16(
933   <vscale x 16 x i8>,
934   <vscale x 16 x i16>,
935   iXLen,
936   <vscale x 16 x i1>,
937   iXLen,
938   iXLen);
940 define <vscale x 16 x i8> @intrinsic_vnsrl_mask_vx_nxv16i8_nxv16i16(<vscale x 16 x i8> %0, <vscale x 16 x i16> %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
941 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv16i8_nxv16i16:
942 ; CHECK:       # %bb.0: # %entry
943 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, mu
944 ; CHECK-NEXT:    vnsrl.wx v8, v12, a0, v0.t
945 ; CHECK-NEXT:    ret
946 entry:
947   %a = call <vscale x 16 x i8> @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16(
948     <vscale x 16 x i8> %0,
949     <vscale x 16 x i16> %1,
950     iXLen %2,
951     <vscale x 16 x i1> %3,
952     iXLen %4, iXLen 1)
954   ret <vscale x 16 x i8> %a
957 declare <vscale x 32 x i8> @llvm.riscv.vnsrl.nxv32i8.nxv32i16(
958   <vscale x 32 x i8>,
959   <vscale x 32 x i16>,
960   iXLen,
961   iXLen);
963 define <vscale x 32 x i8> @intrinsic_vnsrl_vx_nxv32i8_nxv32i16(<vscale x 32 x i16> %0, iXLen %1, iXLen %2) nounwind {
964 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv32i8_nxv32i16:
965 ; CHECK:       # %bb.0: # %entry
966 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
967 ; CHECK-NEXT:    vnsrl.wx v16, v8, a0
968 ; CHECK-NEXT:    vmv.v.v v8, v16
969 ; CHECK-NEXT:    ret
970 entry:
971   %a = call <vscale x 32 x i8> @llvm.riscv.vnsrl.nxv32i8.nxv32i16(
972     <vscale x 32 x i8> undef,
973     <vscale x 32 x i16> %0,
974     iXLen %1,
975     iXLen %2)
977   ret <vscale x 32 x i8> %a
980 declare <vscale x 32 x i8> @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16(
981   <vscale x 32 x i8>,
982   <vscale x 32 x i16>,
983   iXLen,
984   <vscale x 32 x i1>,
985   iXLen,
986   iXLen);
988 define <vscale x 32 x i8> @intrinsic_vnsrl_mask_vx_nxv32i8_nxv32i16(<vscale x 32 x i8> %0, <vscale x 32 x i16> %1, iXLen %2, <vscale x 32 x i1> %3, iXLen %4) nounwind {
989 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv32i8_nxv32i16:
990 ; CHECK:       # %bb.0: # %entry
991 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
992 ; CHECK-NEXT:    vnsrl.wx v8, v16, a0, v0.t
993 ; CHECK-NEXT:    ret
994 entry:
995   %a = call <vscale x 32 x i8> @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16(
996     <vscale x 32 x i8> %0,
997     <vscale x 32 x i16> %1,
998     iXLen %2,
999     <vscale x 32 x i1> %3,
1000     iXLen %4, iXLen 1)
1002   ret <vscale x 32 x i8> %a
1005 declare <vscale x 1 x i16> @llvm.riscv.vnsrl.nxv1i16.nxv1i32(
1006   <vscale x 1 x i16>,
1007   <vscale x 1 x i32>,
1008   iXLen,
1009   iXLen);
1011 define <vscale x 1 x i16> @intrinsic_vnsrl_vx_nxv1i16_nxv1i32(<vscale x 1 x i32> %0, iXLen %1, iXLen %2) nounwind {
1012 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv1i16_nxv1i32:
1013 ; CHECK:       # %bb.0: # %entry
1014 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
1015 ; CHECK-NEXT:    vnsrl.wx v8, v8, a0
1016 ; CHECK-NEXT:    ret
1017 entry:
1018   %a = call <vscale x 1 x i16> @llvm.riscv.vnsrl.nxv1i16.nxv1i32(
1019     <vscale x 1 x i16> undef,
1020     <vscale x 1 x i32> %0,
1021     iXLen %1,
1022     iXLen %2)
1024   ret <vscale x 1 x i16> %a
1027 declare <vscale x 1 x i16> @llvm.riscv.vnsrl.mask.nxv1i16.nxv1i32(
1028   <vscale x 1 x i16>,
1029   <vscale x 1 x i32>,
1030   iXLen,
1031   <vscale x 1 x i1>,
1032   iXLen,
1033   iXLen);
1035 define <vscale x 1 x i16> @intrinsic_vnsrl_mask_vx_nxv1i16_nxv1i32(<vscale x 1 x i16> %0, <vscale x 1 x i32> %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
1036 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv1i16_nxv1i32:
1037 ; CHECK:       # %bb.0: # %entry
1038 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
1039 ; CHECK-NEXT:    vnsrl.wx v8, v9, a0, v0.t
1040 ; CHECK-NEXT:    ret
1041 entry:
1042   %a = call <vscale x 1 x i16> @llvm.riscv.vnsrl.mask.nxv1i16.nxv1i32(
1043     <vscale x 1 x i16> %0,
1044     <vscale x 1 x i32> %1,
1045     iXLen %2,
1046     <vscale x 1 x i1> %3,
1047     iXLen %4, iXLen 1)
1049   ret <vscale x 1 x i16> %a
1052 declare <vscale x 2 x i16> @llvm.riscv.vnsrl.nxv2i16.nxv2i32(
1053   <vscale x 2 x i16>,
1054   <vscale x 2 x i32>,
1055   iXLen,
1056   iXLen);
1058 define <vscale x 2 x i16> @intrinsic_vnsrl_vx_nxv2i16_nxv2i32(<vscale x 2 x i32> %0, iXLen %1, iXLen %2) nounwind {
1059 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv2i16_nxv2i32:
1060 ; CHECK:       # %bb.0: # %entry
1061 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
1062 ; CHECK-NEXT:    vnsrl.wx v8, v8, a0
1063 ; CHECK-NEXT:    ret
1064 entry:
1065   %a = call <vscale x 2 x i16> @llvm.riscv.vnsrl.nxv2i16.nxv2i32(
1066     <vscale x 2 x i16> undef,
1067     <vscale x 2 x i32> %0,
1068     iXLen %1,
1069     iXLen %2)
1071   ret <vscale x 2 x i16> %a
1074 declare <vscale x 2 x i16> @llvm.riscv.vnsrl.mask.nxv2i16.nxv2i32(
1075   <vscale x 2 x i16>,
1076   <vscale x 2 x i32>,
1077   iXLen,
1078   <vscale x 2 x i1>,
1079   iXLen,
1080   iXLen);
1082 define <vscale x 2 x i16> @intrinsic_vnsrl_mask_vx_nxv2i16_nxv2i32(<vscale x 2 x i16> %0, <vscale x 2 x i32> %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
1083 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv2i16_nxv2i32:
1084 ; CHECK:       # %bb.0: # %entry
1085 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
1086 ; CHECK-NEXT:    vnsrl.wx v8, v9, a0, v0.t
1087 ; CHECK-NEXT:    ret
1088 entry:
1089   %a = call <vscale x 2 x i16> @llvm.riscv.vnsrl.mask.nxv2i16.nxv2i32(
1090     <vscale x 2 x i16> %0,
1091     <vscale x 2 x i32> %1,
1092     iXLen %2,
1093     <vscale x 2 x i1> %3,
1094     iXLen %4, iXLen 1)
1096   ret <vscale x 2 x i16> %a
1099 declare <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32(
1100   <vscale x 4 x i16>,
1101   <vscale x 4 x i32>,
1102   iXLen,
1103   iXLen);
1105 define <vscale x 4 x i16> @intrinsic_vnsrl_vx_nxv4i16_nxv4i32(<vscale x 4 x i32> %0, iXLen %1, iXLen %2) nounwind {
1106 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv4i16_nxv4i32:
1107 ; CHECK:       # %bb.0: # %entry
1108 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
1109 ; CHECK-NEXT:    vnsrl.wx v10, v8, a0
1110 ; CHECK-NEXT:    vmv.v.v v8, v10
1111 ; CHECK-NEXT:    ret
1112 entry:
1113   %a = call <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32(
1114     <vscale x 4 x i16> undef,
1115     <vscale x 4 x i32> %0,
1116     iXLen %1,
1117     iXLen %2)
1119   ret <vscale x 4 x i16> %a
1122 declare <vscale x 4 x i16> @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32(
1123   <vscale x 4 x i16>,
1124   <vscale x 4 x i32>,
1125   iXLen,
1126   <vscale x 4 x i1>,
1127   iXLen,
1128   iXLen);
1130 define <vscale x 4 x i16> @intrinsic_vnsrl_mask_vx_nxv4i16_nxv4i32(<vscale x 4 x i16> %0, <vscale x 4 x i32> %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
1131 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv4i16_nxv4i32:
1132 ; CHECK:       # %bb.0: # %entry
1133 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
1134 ; CHECK-NEXT:    vnsrl.wx v8, v10, a0, v0.t
1135 ; CHECK-NEXT:    ret
1136 entry:
1137   %a = call <vscale x 4 x i16> @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32(
1138     <vscale x 4 x i16> %0,
1139     <vscale x 4 x i32> %1,
1140     iXLen %2,
1141     <vscale x 4 x i1> %3,
1142     iXLen %4, iXLen 1)
1144   ret <vscale x 4 x i16> %a
1147 declare <vscale x 8 x i16> @llvm.riscv.vnsrl.nxv8i16.nxv8i32(
1148   <vscale x 8 x i16>,
1149   <vscale x 8 x i32>,
1150   iXLen,
1151   iXLen);
1153 define <vscale x 8 x i16> @intrinsic_vnsrl_vx_nxv8i16_nxv8i32(<vscale x 8 x i32> %0, iXLen %1, iXLen %2) nounwind {
1154 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv8i16_nxv8i32:
1155 ; CHECK:       # %bb.0: # %entry
1156 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
1157 ; CHECK-NEXT:    vnsrl.wx v12, v8, a0
1158 ; CHECK-NEXT:    vmv.v.v v8, v12
1159 ; CHECK-NEXT:    ret
1160 entry:
1161   %a = call <vscale x 8 x i16> @llvm.riscv.vnsrl.nxv8i16.nxv8i32(
1162     <vscale x 8 x i16> undef,
1163     <vscale x 8 x i32> %0,
1164     iXLen %1,
1165     iXLen %2)
1167   ret <vscale x 8 x i16> %a
1170 declare <vscale x 8 x i16> @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32(
1171   <vscale x 8 x i16>,
1172   <vscale x 8 x i32>,
1173   iXLen,
1174   <vscale x 8 x i1>,
1175   iXLen,
1176   iXLen);
1178 define <vscale x 8 x i16> @intrinsic_vnsrl_mask_vx_nxv8i16_nxv8i32(<vscale x 8 x i16> %0, <vscale x 8 x i32> %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
1179 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv8i16_nxv8i32:
1180 ; CHECK:       # %bb.0: # %entry
1181 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
1182 ; CHECK-NEXT:    vnsrl.wx v8, v12, a0, v0.t
1183 ; CHECK-NEXT:    ret
1184 entry:
1185   %a = call <vscale x 8 x i16> @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32(
1186     <vscale x 8 x i16> %0,
1187     <vscale x 8 x i32> %1,
1188     iXLen %2,
1189     <vscale x 8 x i1> %3,
1190     iXLen %4, iXLen 1)
1192   ret <vscale x 8 x i16> %a
1195 declare <vscale x 16 x i16> @llvm.riscv.vnsrl.nxv16i16.nxv16i32(
1196   <vscale x 16 x i16>,
1197   <vscale x 16 x i32>,
1198   iXLen,
1199   iXLen);
1201 define <vscale x 16 x i16> @intrinsic_vnsrl_vx_nxv16i16_nxv16i32(<vscale x 16 x i32> %0, iXLen %1, iXLen %2) nounwind {
1202 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv16i16_nxv16i32:
1203 ; CHECK:       # %bb.0: # %entry
1204 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
1205 ; CHECK-NEXT:    vnsrl.wx v16, v8, a0
1206 ; CHECK-NEXT:    vmv.v.v v8, v16
1207 ; CHECK-NEXT:    ret
1208 entry:
1209   %a = call <vscale x 16 x i16> @llvm.riscv.vnsrl.nxv16i16.nxv16i32(
1210     <vscale x 16 x i16> undef,
1211     <vscale x 16 x i32> %0,
1212     iXLen %1,
1213     iXLen %2)
1215   ret <vscale x 16 x i16> %a
1218 declare <vscale x 16 x i16> @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32(
1219   <vscale x 16 x i16>,
1220   <vscale x 16 x i32>,
1221   iXLen,
1222   <vscale x 16 x i1>,
1223   iXLen,
1224   iXLen);
1226 define <vscale x 16 x i16> @intrinsic_vnsrl_mask_vx_nxv16i16_nxv16i32(<vscale x 16 x i16> %0, <vscale x 16 x i32> %1, iXLen %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
1227 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv16i16_nxv16i32:
1228 ; CHECK:       # %bb.0: # %entry
1229 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
1230 ; CHECK-NEXT:    vnsrl.wx v8, v16, a0, v0.t
1231 ; CHECK-NEXT:    ret
1232 entry:
1233   %a = call <vscale x 16 x i16> @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32(
1234     <vscale x 16 x i16> %0,
1235     <vscale x 16 x i32> %1,
1236     iXLen %2,
1237     <vscale x 16 x i1> %3,
1238     iXLen %4, iXLen 1)
1240   ret <vscale x 16 x i16> %a
1243 declare <vscale x 1 x i32> @llvm.riscv.vnsrl.nxv1i32.nxv1i64(
1244   <vscale x 1 x i32>,
1245   <vscale x 1 x i64>,
1246   iXLen,
1247   iXLen);
1249 define <vscale x 1 x i32> @intrinsic_vnsrl_vx_nxv1i32_nxv1i64(<vscale x 1 x i64> %0, iXLen %1, iXLen %2) nounwind {
1250 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv1i32_nxv1i64:
1251 ; CHECK:       # %bb.0: # %entry
1252 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1253 ; CHECK-NEXT:    vnsrl.wx v8, v8, a0
1254 ; CHECK-NEXT:    ret
1255 entry:
1256   %a = call <vscale x 1 x i32> @llvm.riscv.vnsrl.nxv1i32.nxv1i64(
1257     <vscale x 1 x i32> undef,
1258     <vscale x 1 x i64> %0,
1259     iXLen %1,
1260     iXLen %2)
1262   ret <vscale x 1 x i32> %a
1265 declare <vscale x 1 x i32> @llvm.riscv.vnsrl.mask.nxv1i32.nxv1i64(
1266   <vscale x 1 x i32>,
1267   <vscale x 1 x i64>,
1268   iXLen,
1269   <vscale x 1 x i1>,
1270   iXLen,
1271   iXLen);
1273 define <vscale x 1 x i32> @intrinsic_vnsrl_mask_vx_nxv1i32_nxv1i64(<vscale x 1 x i32> %0, <vscale x 1 x i64> %1, iXLen %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
1274 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv1i32_nxv1i64:
1275 ; CHECK:       # %bb.0: # %entry
1276 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
1277 ; CHECK-NEXT:    vnsrl.wx v8, v9, a0, v0.t
1278 ; CHECK-NEXT:    ret
1279 entry:
1280   %a = call <vscale x 1 x i32> @llvm.riscv.vnsrl.mask.nxv1i32.nxv1i64(
1281     <vscale x 1 x i32> %0,
1282     <vscale x 1 x i64> %1,
1283     iXLen %2,
1284     <vscale x 1 x i1> %3,
1285     iXLen %4, iXLen 1)
1287   ret <vscale x 1 x i32> %a
1290 declare <vscale x 2 x i32> @llvm.riscv.vnsrl.nxv2i32.nxv2i64(
1291   <vscale x 2 x i32>,
1292   <vscale x 2 x i64>,
1293   iXLen,
1294   iXLen);
1296 define <vscale x 2 x i32> @intrinsic_vnsrl_vx_nxv2i32_nxv2i64(<vscale x 2 x i64> %0, iXLen %1, iXLen %2) nounwind {
1297 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv2i32_nxv2i64:
1298 ; CHECK:       # %bb.0: # %entry
1299 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1300 ; CHECK-NEXT:    vnsrl.wx v10, v8, a0
1301 ; CHECK-NEXT:    vmv.v.v v8, v10
1302 ; CHECK-NEXT:    ret
1303 entry:
1304   %a = call <vscale x 2 x i32> @llvm.riscv.vnsrl.nxv2i32.nxv2i64(
1305     <vscale x 2 x i32> undef,
1306     <vscale x 2 x i64> %0,
1307     iXLen %1,
1308     iXLen %2)
1310   ret <vscale x 2 x i32> %a
1313 declare <vscale x 2 x i32> @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64(
1314   <vscale x 2 x i32>,
1315   <vscale x 2 x i64>,
1316   iXLen,
1317   <vscale x 2 x i1>,
1318   iXLen,
1319   iXLen);
1321 define <vscale x 2 x i32> @intrinsic_vnsrl_mask_vx_nxv2i32_nxv2i64(<vscale x 2 x i32> %0, <vscale x 2 x i64> %1, iXLen %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
1322 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv2i32_nxv2i64:
1323 ; CHECK:       # %bb.0: # %entry
1324 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
1325 ; CHECK-NEXT:    vnsrl.wx v8, v10, a0, v0.t
1326 ; CHECK-NEXT:    ret
1327 entry:
1328   %a = call <vscale x 2 x i32> @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64(
1329     <vscale x 2 x i32> %0,
1330     <vscale x 2 x i64> %1,
1331     iXLen %2,
1332     <vscale x 2 x i1> %3,
1333     iXLen %4, iXLen 1)
1335   ret <vscale x 2 x i32> %a
1338 declare <vscale x 4 x i32> @llvm.riscv.vnsrl.nxv4i32.nxv4i64(
1339   <vscale x 4 x i32>,
1340   <vscale x 4 x i64>,
1341   iXLen,
1342   iXLen);
1344 define <vscale x 4 x i32> @intrinsic_vnsrl_vx_nxv4i32_nxv4i64(<vscale x 4 x i64> %0, iXLen %1, iXLen %2) nounwind {
1345 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv4i32_nxv4i64:
1346 ; CHECK:       # %bb.0: # %entry
1347 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1348 ; CHECK-NEXT:    vnsrl.wx v12, v8, a0
1349 ; CHECK-NEXT:    vmv.v.v v8, v12
1350 ; CHECK-NEXT:    ret
1351 entry:
1352   %a = call <vscale x 4 x i32> @llvm.riscv.vnsrl.nxv4i32.nxv4i64(
1353     <vscale x 4 x i32> undef,
1354     <vscale x 4 x i64> %0,
1355     iXLen %1,
1356     iXLen %2)
1358   ret <vscale x 4 x i32> %a
1361 declare <vscale x 4 x i32> @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64(
1362   <vscale x 4 x i32>,
1363   <vscale x 4 x i64>,
1364   iXLen,
1365   <vscale x 4 x i1>,
1366   iXLen,
1367   iXLen);
1369 define <vscale x 4 x i32> @intrinsic_vnsrl_mask_vx_nxv4i32_nxv4i64(<vscale x 4 x i32> %0, <vscale x 4 x i64> %1, iXLen %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
1370 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv4i32_nxv4i64:
1371 ; CHECK:       # %bb.0: # %entry
1372 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
1373 ; CHECK-NEXT:    vnsrl.wx v8, v12, a0, v0.t
1374 ; CHECK-NEXT:    ret
1375 entry:
1376   %a = call <vscale x 4 x i32> @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64(
1377     <vscale x 4 x i32> %0,
1378     <vscale x 4 x i64> %1,
1379     iXLen %2,
1380     <vscale x 4 x i1> %3,
1381     iXLen %4, iXLen 1)
1383   ret <vscale x 4 x i32> %a
1386 declare <vscale x 8 x i32> @llvm.riscv.vnsrl.nxv8i32.nxv8i64(
1387   <vscale x 8 x i32>,
1388   <vscale x 8 x i64>,
1389   iXLen,
1390   iXLen);
1392 define <vscale x 8 x i32> @intrinsic_vnsrl_vx_nxv8i32_nxv8i64(<vscale x 8 x i64> %0, iXLen %1, iXLen %2) nounwind {
1393 ; CHECK-LABEL: intrinsic_vnsrl_vx_nxv8i32_nxv8i64:
1394 ; CHECK:       # %bb.0: # %entry
1395 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1396 ; CHECK-NEXT:    vnsrl.wx v16, v8, a0
1397 ; CHECK-NEXT:    vmv.v.v v8, v16
1398 ; CHECK-NEXT:    ret
1399 entry:
1400   %a = call <vscale x 8 x i32> @llvm.riscv.vnsrl.nxv8i32.nxv8i64(
1401     <vscale x 8 x i32> undef,
1402     <vscale x 8 x i64> %0,
1403     iXLen %1,
1404     iXLen %2)
1406   ret <vscale x 8 x i32> %a
1409 declare <vscale x 8 x i32> @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64(
1410   <vscale x 8 x i32>,
1411   <vscale x 8 x i64>,
1412   iXLen,
1413   <vscale x 8 x i1>,
1414   iXLen,
1415   iXLen);
1417 define <vscale x 8 x i32> @intrinsic_vnsrl_mask_vx_nxv8i32_nxv8i64(<vscale x 8 x i32> %0, <vscale x 8 x i64> %1, iXLen %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
1418 ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv8i32_nxv8i64:
1419 ; CHECK:       # %bb.0: # %entry
1420 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
1421 ; CHECK-NEXT:    vnsrl.wx v8, v16, a0, v0.t
1422 ; CHECK-NEXT:    ret
1423 entry:
1424   %a = call <vscale x 8 x i32> @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64(
1425     <vscale x 8 x i32> %0,
1426     <vscale x 8 x i64> %1,
1427     iXLen %2,
1428     <vscale x 8 x i1> %3,
1429     iXLen %4, iXLen 1)
1431   ret <vscale x 8 x i32> %a
1434 define <vscale x 1 x i8> @intrinsic_vnsrl_vi_nxv1i8_nxv1i16_i8(<vscale x 1 x i16> %0, iXLen %1) nounwind {
1435 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv1i8_nxv1i16_i8:
1436 ; CHECK:       # %bb.0: # %entry
1437 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
1438 ; CHECK-NEXT:    vnsrl.wi v8, v8, 9
1439 ; CHECK-NEXT:    ret
1440 entry:
1441   %a = call <vscale x 1 x i8> @llvm.riscv.vnsrl.nxv1i8.nxv1i16(
1442     <vscale x 1 x i8> undef,
1443     <vscale x 1 x i16> %0,
1444     iXLen 9,
1445     iXLen %1)
1447   ret <vscale x 1 x i8> %a
1450 define <vscale x 1 x i8> @intrinsic_vnsrl_mask_vi_nxv1i8_nxv1i16_i8(<vscale x 1 x i8> %0, <vscale x 1 x i16> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
1451 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv1i8_nxv1i16_i8:
1452 ; CHECK:       # %bb.0: # %entry
1453 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
1454 ; CHECK-NEXT:    vnsrl.wi v8, v9, 9, v0.t
1455 ; CHECK-NEXT:    ret
1456 entry:
1457   %a = call <vscale x 1 x i8> @llvm.riscv.vnsrl.mask.nxv1i8.nxv1i16(
1458     <vscale x 1 x i8> %0,
1459     <vscale x 1 x i16> %1,
1460     iXLen 9,
1461     <vscale x 1 x i1> %2,
1462     iXLen %3, iXLen 1)
1464   ret <vscale x 1 x i8> %a
1467 define <vscale x 2 x i8> @intrinsic_vnsrl_vi_nxv2i8_nxv2i16_i8(<vscale x 2 x i16> %0, iXLen %1) nounwind {
1468 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv2i8_nxv2i16_i8:
1469 ; CHECK:       # %bb.0: # %entry
1470 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
1471 ; CHECK-NEXT:    vnsrl.wi v8, v8, 9
1472 ; CHECK-NEXT:    ret
1473 entry:
1474   %a = call <vscale x 2 x i8> @llvm.riscv.vnsrl.nxv2i8.nxv2i16(
1475     <vscale x 2 x i8> undef,
1476     <vscale x 2 x i16> %0,
1477     iXLen 9,
1478     iXLen %1)
1480   ret <vscale x 2 x i8> %a
1483 define <vscale x 2 x i8> @intrinsic_vnsrl_mask_vi_nxv2i8_nxv2i16_i8(<vscale x 2 x i8> %0, <vscale x 2 x i16> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
1484 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv2i8_nxv2i16_i8:
1485 ; CHECK:       # %bb.0: # %entry
1486 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
1487 ; CHECK-NEXT:    vnsrl.wi v8, v9, 9, v0.t
1488 ; CHECK-NEXT:    ret
1489 entry:
1490   %a = call <vscale x 2 x i8> @llvm.riscv.vnsrl.mask.nxv2i8.nxv2i16(
1491     <vscale x 2 x i8> %0,
1492     <vscale x 2 x i16> %1,
1493     iXLen 9,
1494     <vscale x 2 x i1> %2,
1495     iXLen %3, iXLen 1)
1497   ret <vscale x 2 x i8> %a
1500 define <vscale x 4 x i8> @intrinsic_vnsrl_vi_nxv4i8_nxv4i16_i8(<vscale x 4 x i16> %0, iXLen %1) nounwind {
1501 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv4i8_nxv4i16_i8:
1502 ; CHECK:       # %bb.0: # %entry
1503 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
1504 ; CHECK-NEXT:    vnsrl.wi v8, v8, 9
1505 ; CHECK-NEXT:    ret
1506 entry:
1507   %a = call <vscale x 4 x i8> @llvm.riscv.vnsrl.nxv4i8.nxv4i16(
1508     <vscale x 4 x i8> undef,
1509     <vscale x 4 x i16> %0,
1510     iXLen 9,
1511     iXLen %1)
1513   ret <vscale x 4 x i8> %a
1516 define <vscale x 4 x i8> @intrinsic_vnsrl_mask_vi_nxv4i8_nxv4i16_i8(<vscale x 4 x i8> %0, <vscale x 4 x i16> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
1517 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv4i8_nxv4i16_i8:
1518 ; CHECK:       # %bb.0: # %entry
1519 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
1520 ; CHECK-NEXT:    vnsrl.wi v8, v9, 9, v0.t
1521 ; CHECK-NEXT:    ret
1522 entry:
1523   %a = call <vscale x 4 x i8> @llvm.riscv.vnsrl.mask.nxv4i8.nxv4i16(
1524     <vscale x 4 x i8> %0,
1525     <vscale x 4 x i16> %1,
1526     iXLen 9,
1527     <vscale x 4 x i1> %2,
1528     iXLen %3, iXLen 1)
1530   ret <vscale x 4 x i8> %a
1533 define <vscale x 8 x i8> @intrinsic_vnsrl_vi_nxv8i8_nxv8i16_i8(<vscale x 8 x i16> %0, iXLen %1) nounwind {
1534 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv8i8_nxv8i16_i8:
1535 ; CHECK:       # %bb.0: # %entry
1536 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
1537 ; CHECK-NEXT:    vnsrl.wi v10, v8, 9
1538 ; CHECK-NEXT:    vmv.v.v v8, v10
1539 ; CHECK-NEXT:    ret
1540 entry:
1541   %a = call <vscale x 8 x i8> @llvm.riscv.vnsrl.nxv8i8.nxv8i16(
1542     <vscale x 8 x i8> undef,
1543     <vscale x 8 x i16> %0,
1544     iXLen 9,
1545     iXLen %1)
1547   ret <vscale x 8 x i8> %a
1550 define <vscale x 8 x i8> @intrinsic_vnsrl_mask_vi_nxv8i8_nxv8i16_i8(<vscale x 8 x i8> %0, <vscale x 8 x i16> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
1551 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv8i8_nxv8i16_i8:
1552 ; CHECK:       # %bb.0: # %entry
1553 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
1554 ; CHECK-NEXT:    vnsrl.wi v8, v10, 9, v0.t
1555 ; CHECK-NEXT:    ret
1556 entry:
1557   %a = call <vscale x 8 x i8> @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16(
1558     <vscale x 8 x i8> %0,
1559     <vscale x 8 x i16> %1,
1560     iXLen 9,
1561     <vscale x 8 x i1> %2,
1562     iXLen %3, iXLen 1)
1564   ret <vscale x 8 x i8> %a
1567 define <vscale x 16 x i8> @intrinsic_vnsrl_vi_nxv16i8_nxv16i16_i8(<vscale x 16 x i16> %0, iXLen %1) nounwind {
1568 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv16i8_nxv16i16_i8:
1569 ; CHECK:       # %bb.0: # %entry
1570 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
1571 ; CHECK-NEXT:    vnsrl.wi v12, v8, 9
1572 ; CHECK-NEXT:    vmv.v.v v8, v12
1573 ; CHECK-NEXT:    ret
1574 entry:
1575   %a = call <vscale x 16 x i8> @llvm.riscv.vnsrl.nxv16i8.nxv16i16(
1576     <vscale x 16 x i8> undef,
1577     <vscale x 16 x i16> %0,
1578     iXLen 9,
1579     iXLen %1)
1581   ret <vscale x 16 x i8> %a
1584 define <vscale x 16 x i8> @intrinsic_vnsrl_mask_vi_nxv16i8_nxv16i16_i8(<vscale x 16 x i8> %0, <vscale x 16 x i16> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
1585 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv16i8_nxv16i16_i8:
1586 ; CHECK:       # %bb.0: # %entry
1587 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
1588 ; CHECK-NEXT:    vnsrl.wi v8, v12, 9, v0.t
1589 ; CHECK-NEXT:    ret
1590 entry:
1591   %a = call <vscale x 16 x i8> @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16(
1592     <vscale x 16 x i8> %0,
1593     <vscale x 16 x i16> %1,
1594     iXLen 9,
1595     <vscale x 16 x i1> %2,
1596     iXLen %3, iXLen 1)
1598   ret <vscale x 16 x i8> %a
1601 define <vscale x 32 x i8> @intrinsic_vnsrl_vi_nxv32i8_nxv32i16_i8(<vscale x 32 x i16> %0, iXLen %1) nounwind {
1602 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv32i8_nxv32i16_i8:
1603 ; CHECK:       # %bb.0: # %entry
1604 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
1605 ; CHECK-NEXT:    vnsrl.wi v16, v8, 9
1606 ; CHECK-NEXT:    vmv.v.v v8, v16
1607 ; CHECK-NEXT:    ret
1608 entry:
1609   %a = call <vscale x 32 x i8> @llvm.riscv.vnsrl.nxv32i8.nxv32i16(
1610     <vscale x 32 x i8> undef,
1611     <vscale x 32 x i16> %0,
1612     iXLen 9,
1613     iXLen %1)
1615   ret <vscale x 32 x i8> %a
1618 define <vscale x 32 x i8> @intrinsic_vnsrl_mask_vi_nxv32i8_nxv32i16_i8(<vscale x 32 x i8> %0, <vscale x 32 x i16> %1, <vscale x 32 x i1> %2, iXLen %3) nounwind {
1619 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv32i8_nxv32i16_i8:
1620 ; CHECK:       # %bb.0: # %entry
1621 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
1622 ; CHECK-NEXT:    vnsrl.wi v8, v16, 9, v0.t
1623 ; CHECK-NEXT:    ret
1624 entry:
1625   %a = call <vscale x 32 x i8> @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16(
1626     <vscale x 32 x i8> %0,
1627     <vscale x 32 x i16> %1,
1628     iXLen 9,
1629     <vscale x 32 x i1> %2,
1630     iXLen %3, iXLen 1)
1632   ret <vscale x 32 x i8> %a
1635 define <vscale x 1 x i16> @intrinsic_vnsrl_vi_nxv1i16_nxv1i32_i16(<vscale x 1 x i32> %0, iXLen %1) nounwind {
1636 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv1i16_nxv1i32_i16:
1637 ; CHECK:       # %bb.0: # %entry
1638 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1639 ; CHECK-NEXT:    vnsrl.wi v8, v8, 9
1640 ; CHECK-NEXT:    ret
1641 entry:
1642   %a = call <vscale x 1 x i16> @llvm.riscv.vnsrl.nxv1i16.nxv1i32(
1643     <vscale x 1 x i16> undef,
1644     <vscale x 1 x i32> %0,
1645     iXLen 9,
1646     iXLen %1)
1648   ret <vscale x 1 x i16> %a
1651 define <vscale x 1 x i16> @intrinsic_vnsrl_mask_vi_nxv1i16_nxv1i32_i16(<vscale x 1 x i16> %0, <vscale x 1 x i32> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
1652 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv1i16_nxv1i32_i16:
1653 ; CHECK:       # %bb.0: # %entry
1654 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
1655 ; CHECK-NEXT:    vnsrl.wi v8, v9, 9, v0.t
1656 ; CHECK-NEXT:    ret
1657 entry:
1658   %a = call <vscale x 1 x i16> @llvm.riscv.vnsrl.mask.nxv1i16.nxv1i32(
1659     <vscale x 1 x i16> %0,
1660     <vscale x 1 x i32> %1,
1661     iXLen 9,
1662     <vscale x 1 x i1> %2,
1663     iXLen %3, iXLen 1)
1665   ret <vscale x 1 x i16> %a
1668 define <vscale x 2 x i16> @intrinsic_vnsrl_vi_nxv2i16_nxv2i32_i16(<vscale x 2 x i32> %0, iXLen %1) nounwind {
1669 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv2i16_nxv2i32_i16:
1670 ; CHECK:       # %bb.0: # %entry
1671 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1672 ; CHECK-NEXT:    vnsrl.wi v8, v8, 9
1673 ; CHECK-NEXT:    ret
1674 entry:
1675   %a = call <vscale x 2 x i16> @llvm.riscv.vnsrl.nxv2i16.nxv2i32(
1676     <vscale x 2 x i16> undef,
1677     <vscale x 2 x i32> %0,
1678     iXLen 9,
1679     iXLen %1)
1681   ret <vscale x 2 x i16> %a
1684 define <vscale x 2 x i16> @intrinsic_vnsrl_mask_vi_nxv2i16_nxv2i32_i16(<vscale x 2 x i16> %0, <vscale x 2 x i32> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
1685 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv2i16_nxv2i32_i16:
1686 ; CHECK:       # %bb.0: # %entry
1687 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
1688 ; CHECK-NEXT:    vnsrl.wi v8, v9, 9, v0.t
1689 ; CHECK-NEXT:    ret
1690 entry:
1691   %a = call <vscale x 2 x i16> @llvm.riscv.vnsrl.mask.nxv2i16.nxv2i32(
1692     <vscale x 2 x i16> %0,
1693     <vscale x 2 x i32> %1,
1694     iXLen 9,
1695     <vscale x 2 x i1> %2,
1696     iXLen %3, iXLen 1)
1698   ret <vscale x 2 x i16> %a
1701 define <vscale x 4 x i16> @intrinsic_vnsrl_vi_nxv4i16_nxv4i32_i16(<vscale x 4 x i32> %0, iXLen %1) nounwind {
1702 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv4i16_nxv4i32_i16:
1703 ; CHECK:       # %bb.0: # %entry
1704 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1705 ; CHECK-NEXT:    vnsrl.wi v10, v8, 9
1706 ; CHECK-NEXT:    vmv.v.v v8, v10
1707 ; CHECK-NEXT:    ret
1708 entry:
1709   %a = call <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32(
1710     <vscale x 4 x i16> undef,
1711     <vscale x 4 x i32> %0,
1712     iXLen 9,
1713     iXLen %1)
1715   ret <vscale x 4 x i16> %a
1718 define <vscale x 4 x i16> @intrinsic_vnsrl_mask_vi_nxv4i16_nxv4i32_i16(<vscale x 4 x i16> %0, <vscale x 4 x i32> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
1719 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv4i16_nxv4i32_i16:
1720 ; CHECK:       # %bb.0: # %entry
1721 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
1722 ; CHECK-NEXT:    vnsrl.wi v8, v10, 9, v0.t
1723 ; CHECK-NEXT:    ret
1724 entry:
1725   %a = call <vscale x 4 x i16> @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32(
1726     <vscale x 4 x i16> %0,
1727     <vscale x 4 x i32> %1,
1728     iXLen 9,
1729     <vscale x 4 x i1> %2,
1730     iXLen %3, iXLen 1)
1732   ret <vscale x 4 x i16> %a
1735 define <vscale x 8 x i16> @intrinsic_vnsrl_vi_nxv8i16_nxv8i32_i16(<vscale x 8 x i32> %0, iXLen %1) nounwind {
1736 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv8i16_nxv8i32_i16:
1737 ; CHECK:       # %bb.0: # %entry
1738 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1739 ; CHECK-NEXT:    vnsrl.wi v12, v8, 9
1740 ; CHECK-NEXT:    vmv.v.v v8, v12
1741 ; CHECK-NEXT:    ret
1742 entry:
1743   %a = call <vscale x 8 x i16> @llvm.riscv.vnsrl.nxv8i16.nxv8i32(
1744     <vscale x 8 x i16> undef,
1745     <vscale x 8 x i32> %0,
1746     iXLen 9,
1747     iXLen %1)
1749   ret <vscale x 8 x i16> %a
1752 define <vscale x 8 x i16> @intrinsic_vnsrl_mask_vi_nxv8i16_nxv8i32_i16(<vscale x 8 x i16> %0, <vscale x 8 x i32> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
1753 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv8i16_nxv8i32_i16:
1754 ; CHECK:       # %bb.0: # %entry
1755 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
1756 ; CHECK-NEXT:    vnsrl.wi v8, v12, 9, v0.t
1757 ; CHECK-NEXT:    ret
1758 entry:
1759   %a = call <vscale x 8 x i16> @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32(
1760     <vscale x 8 x i16> %0,
1761     <vscale x 8 x i32> %1,
1762     iXLen 9,
1763     <vscale x 8 x i1> %2,
1764     iXLen %3, iXLen 1)
1766   ret <vscale x 8 x i16> %a
1769 define <vscale x 16 x i16> @intrinsic_vnsrl_vi_nxv16i16_nxv16i32_i16(<vscale x 16 x i32> %0, iXLen %1) nounwind {
1770 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv16i16_nxv16i32_i16:
1771 ; CHECK:       # %bb.0: # %entry
1772 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1773 ; CHECK-NEXT:    vnsrl.wi v16, v8, 9
1774 ; CHECK-NEXT:    vmv.v.v v8, v16
1775 ; CHECK-NEXT:    ret
1776 entry:
1777   %a = call <vscale x 16 x i16> @llvm.riscv.vnsrl.nxv16i16.nxv16i32(
1778     <vscale x 16 x i16> undef,
1779     <vscale x 16 x i32> %0,
1780     iXLen 9,
1781     iXLen %1)
1783   ret <vscale x 16 x i16> %a
1786 define <vscale x 16 x i16> @intrinsic_vnsrl_mask_vi_nxv16i16_nxv16i32_i16(<vscale x 16 x i16> %0, <vscale x 16 x i32> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
1787 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv16i16_nxv16i32_i16:
1788 ; CHECK:       # %bb.0: # %entry
1789 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
1790 ; CHECK-NEXT:    vnsrl.wi v8, v16, 9, v0.t
1791 ; CHECK-NEXT:    ret
1792 entry:
1793   %a = call <vscale x 16 x i16> @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32(
1794     <vscale x 16 x i16> %0,
1795     <vscale x 16 x i32> %1,
1796     iXLen 9,
1797     <vscale x 16 x i1> %2,
1798     iXLen %3, iXLen 1)
1800   ret <vscale x 16 x i16> %a
1803 define <vscale x 1 x i32> @intrinsic_vnsrl_vi_nxv1i32_nxv1i64_i32(<vscale x 1 x i64> %0, iXLen %1) nounwind {
1804 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv1i32_nxv1i64_i32:
1805 ; CHECK:       # %bb.0: # %entry
1806 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1807 ; CHECK-NEXT:    vnsrl.wi v8, v8, 9
1808 ; CHECK-NEXT:    ret
1809 entry:
1810   %a = call <vscale x 1 x i32> @llvm.riscv.vnsrl.nxv1i32.nxv1i64(
1811     <vscale x 1 x i32> undef,
1812     <vscale x 1 x i64> %0,
1813     iXLen 9,
1814     iXLen %1)
1816   ret <vscale x 1 x i32> %a
1819 define <vscale x 1 x i32> @intrinsic_vnsrl_mask_vi_nxv1i32_nxv1i64_i32(<vscale x 1 x i32> %0, <vscale x 1 x i64> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
1820 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv1i32_nxv1i64_i32:
1821 ; CHECK:       # %bb.0: # %entry
1822 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
1823 ; CHECK-NEXT:    vnsrl.wi v8, v9, 9, v0.t
1824 ; CHECK-NEXT:    ret
1825 entry:
1826   %a = call <vscale x 1 x i32> @llvm.riscv.vnsrl.mask.nxv1i32.nxv1i64(
1827     <vscale x 1 x i32> %0,
1828     <vscale x 1 x i64> %1,
1829     iXLen 9,
1830     <vscale x 1 x i1> %2,
1831     iXLen %3, iXLen 1)
1833   ret <vscale x 1 x i32> %a
1836 define <vscale x 2 x i32> @intrinsic_vnsrl_vi_nxv2i32_nxv2i64_i32(<vscale x 2 x i64> %0, iXLen %1) nounwind {
1837 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv2i32_nxv2i64_i32:
1838 ; CHECK:       # %bb.0: # %entry
1839 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1840 ; CHECK-NEXT:    vnsrl.wi v10, v8, 9
1841 ; CHECK-NEXT:    vmv.v.v v8, v10
1842 ; CHECK-NEXT:    ret
1843 entry:
1844   %a = call <vscale x 2 x i32> @llvm.riscv.vnsrl.nxv2i32.nxv2i64(
1845     <vscale x 2 x i32> undef,
1846     <vscale x 2 x i64> %0,
1847     iXLen 9,
1848     iXLen %1)
1850   ret <vscale x 2 x i32> %a
1853 define <vscale x 2 x i32> @intrinsic_vnsrl_mask_vi_nxv2i32_nxv2i64_i32(<vscale x 2 x i32> %0, <vscale x 2 x i64> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
1854 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv2i32_nxv2i64_i32:
1855 ; CHECK:       # %bb.0: # %entry
1856 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
1857 ; CHECK-NEXT:    vnsrl.wi v8, v10, 9, v0.t
1858 ; CHECK-NEXT:    ret
1859 entry:
1860   %a = call <vscale x 2 x i32> @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64(
1861     <vscale x 2 x i32> %0,
1862     <vscale x 2 x i64> %1,
1863     iXLen 9,
1864     <vscale x 2 x i1> %2,
1865     iXLen %3, iXLen 1)
1867   ret <vscale x 2 x i32> %a
1870 define <vscale x 4 x i32> @intrinsic_vnsrl_vi_nxv4i32_nxv4i64_i32(<vscale x 4 x i64> %0, iXLen %1) nounwind {
1871 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv4i32_nxv4i64_i32:
1872 ; CHECK:       # %bb.0: # %entry
1873 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1874 ; CHECK-NEXT:    vnsrl.wi v12, v8, 9
1875 ; CHECK-NEXT:    vmv.v.v v8, v12
1876 ; CHECK-NEXT:    ret
1877 entry:
1878   %a = call <vscale x 4 x i32> @llvm.riscv.vnsrl.nxv4i32.nxv4i64(
1879     <vscale x 4 x i32> undef,
1880     <vscale x 4 x i64> %0,
1881     iXLen 9,
1882     iXLen %1)
1884   ret <vscale x 4 x i32> %a
1887 define <vscale x 4 x i32> @intrinsic_vnsrl_mask_vi_nxv4i32_nxv4i64_i32(<vscale x 4 x i32> %0, <vscale x 4 x i64> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
1888 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv4i32_nxv4i64_i32:
1889 ; CHECK:       # %bb.0: # %entry
1890 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1891 ; CHECK-NEXT:    vnsrl.wi v8, v12, 9, v0.t
1892 ; CHECK-NEXT:    ret
1893 entry:
1894   %a = call <vscale x 4 x i32> @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64(
1895     <vscale x 4 x i32> %0,
1896     <vscale x 4 x i64> %1,
1897     iXLen 9,
1898     <vscale x 4 x i1> %2,
1899     iXLen %3, iXLen 1)
1901   ret <vscale x 4 x i32> %a
1904 define <vscale x 8 x i32> @intrinsic_vnsrl_vi_nxv8i32_nxv8i64_i32(<vscale x 8 x i64> %0, iXLen %1) nounwind {
1905 ; CHECK-LABEL: intrinsic_vnsrl_vi_nxv8i32_nxv8i64_i32:
1906 ; CHECK:       # %bb.0: # %entry
1907 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1908 ; CHECK-NEXT:    vnsrl.wi v16, v8, 9
1909 ; CHECK-NEXT:    vmv.v.v v8, v16
1910 ; CHECK-NEXT:    ret
1911 entry:
1912   %a = call <vscale x 8 x i32> @llvm.riscv.vnsrl.nxv8i32.nxv8i64(
1913     <vscale x 8 x i32> undef,
1914     <vscale x 8 x i64> %0,
1915     iXLen 9,
1916     iXLen %1)
1918   ret <vscale x 8 x i32> %a
1921 define <vscale x 8 x i32> @intrinsic_vnsrl_mask_vi_nxv8i32_nxv8i64_i32(<vscale x 8 x i32> %0, <vscale x 8 x i64> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
1922 ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv8i32_nxv8i64_i32:
1923 ; CHECK:       # %bb.0: # %entry
1924 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1925 ; CHECK-NEXT:    vnsrl.wi v8, v16, 9, v0.t
1926 ; CHECK-NEXT:    ret
1927 entry:
1928   %a = call <vscale x 8 x i32> @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64(
1929     <vscale x 8 x i32> %0,
1930     <vscale x 8 x i64> %1,
1931     iXLen 9,
1932     <vscale x 8 x i1> %2,
1933     iXLen %3, iXLen 1)
1935   ret <vscale x 8 x i32> %a