1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN: | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN: | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsrl_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsrl_vx_nxv8i7:
12 ; CHECK-NEXT: li a2, 127
13 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
14 ; CHECK-NEXT: vand.vx v8, v8, a2, v0.t
15 ; CHECK-NEXT: vsetvli a3, zero, e8, m1, ta, ma
16 ; CHECK-NEXT: vmv.v.x v9, a0
17 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
18 ; CHECK-NEXT: vand.vx v9, v9, a2, v0.t
19 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
21 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
22 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
23 %v = call <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
24 ret <vscale x 8 x i7> %v
27 declare <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
29 define <vscale x 1 x i8> @vsrl_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
30 ; CHECK-LABEL: vsrl_vv_nxv1i8:
32 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
33 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
35 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
36 ret <vscale x 1 x i8> %v
39 define <vscale x 1 x i8> @vsrl_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
40 ; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked:
42 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
43 ; CHECK-NEXT: vsrl.vv v8, v8, v9
45 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
46 ret <vscale x 1 x i8> %v
49 define <vscale x 1 x i8> @vsrl_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
50 ; CHECK-LABEL: vsrl_vx_nxv1i8:
52 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
53 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
55 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
56 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
57 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
58 ret <vscale x 1 x i8> %v
61 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
62 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
64 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
65 ; CHECK-NEXT: vsrl.vx v8, v8, a0
67 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
68 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
69 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
70 ret <vscale x 1 x i8> %v
73 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
74 ; CHECK-LABEL: vsrl_vi_nxv1i8:
76 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
77 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
79 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> %m, i32 %evl)
80 ret <vscale x 1 x i8> %v
83 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
84 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
86 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
87 ; CHECK-NEXT: vsrl.vi v8, v8, 4
89 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
90 ret <vscale x 1 x i8> %v
93 declare <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
95 define <vscale x 2 x i8> @vsrl_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
96 ; CHECK-LABEL: vsrl_vv_nxv2i8:
98 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
99 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
101 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
102 ret <vscale x 2 x i8> %v
105 define <vscale x 2 x i8> @vsrl_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
106 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
108 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
109 ; CHECK-NEXT: vsrl.vv v8, v8, v9
111 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
112 ret <vscale x 2 x i8> %v
115 define <vscale x 2 x i8> @vsrl_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
116 ; CHECK-LABEL: vsrl_vx_nxv2i8:
118 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
119 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
121 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
122 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
123 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
124 ret <vscale x 2 x i8> %v
127 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
128 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
130 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
131 ; CHECK-NEXT: vsrl.vx v8, v8, a0
133 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
134 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
135 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
136 ret <vscale x 2 x i8> %v
139 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
140 ; CHECK-LABEL: vsrl_vi_nxv2i8:
142 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
143 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
145 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> %m, i32 %evl)
146 ret <vscale x 2 x i8> %v
149 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
150 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
152 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
153 ; CHECK-NEXT: vsrl.vi v8, v8, 4
155 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
156 ret <vscale x 2 x i8> %v
159 declare <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
161 define <vscale x 4 x i8> @vsrl_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
162 ; CHECK-LABEL: vsrl_vv_nxv4i8:
164 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
165 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
167 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
168 ret <vscale x 4 x i8> %v
171 define <vscale x 4 x i8> @vsrl_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
172 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
174 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
175 ; CHECK-NEXT: vsrl.vv v8, v8, v9
177 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
178 ret <vscale x 4 x i8> %v
181 define <vscale x 4 x i8> @vsrl_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
182 ; CHECK-LABEL: vsrl_vx_nxv4i8:
184 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
185 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
187 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
188 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
189 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
190 ret <vscale x 4 x i8> %v
193 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
194 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
196 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
197 ; CHECK-NEXT: vsrl.vx v8, v8, a0
199 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
200 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
201 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
202 ret <vscale x 4 x i8> %v
205 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
206 ; CHECK-LABEL: vsrl_vi_nxv4i8:
208 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
209 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
211 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> %m, i32 %evl)
212 ret <vscale x 4 x i8> %v
215 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
216 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
218 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
219 ; CHECK-NEXT: vsrl.vi v8, v8, 4
221 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
222 ret <vscale x 4 x i8> %v
225 declare <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
227 define <vscale x 8 x i8> @vsrl_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
228 ; CHECK-LABEL: vsrl_vv_nxv8i8:
230 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
231 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
233 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
234 ret <vscale x 8 x i8> %v
237 define <vscale x 8 x i8> @vsrl_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
238 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
240 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
241 ; CHECK-NEXT: vsrl.vv v8, v8, v9
243 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
244 ret <vscale x 8 x i8> %v
247 define <vscale x 8 x i8> @vsrl_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
248 ; CHECK-LABEL: vsrl_vx_nxv8i8:
250 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
251 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
253 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
254 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
255 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
256 ret <vscale x 8 x i8> %v
259 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
260 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
262 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
263 ; CHECK-NEXT: vsrl.vx v8, v8, a0
265 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
266 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
267 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
268 ret <vscale x 8 x i8> %v
271 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
272 ; CHECK-LABEL: vsrl_vi_nxv8i8:
274 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
275 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
277 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> %m, i32 %evl)
278 ret <vscale x 8 x i8> %v
281 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
282 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
284 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
285 ; CHECK-NEXT: vsrl.vi v8, v8, 4
287 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
288 ret <vscale x 8 x i8> %v
291 declare <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
293 define <vscale x 16 x i8> @vsrl_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vsrl_vv_nxv16i8:
296 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
297 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
299 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
300 ret <vscale x 16 x i8> %v
303 define <vscale x 16 x i8> @vsrl_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
304 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
306 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
307 ; CHECK-NEXT: vsrl.vv v8, v8, v10
309 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
310 ret <vscale x 16 x i8> %v
313 define <vscale x 16 x i8> @vsrl_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
314 ; CHECK-LABEL: vsrl_vx_nxv16i8:
316 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
317 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
319 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
320 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
321 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
322 ret <vscale x 16 x i8> %v
325 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
326 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
328 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
329 ; CHECK-NEXT: vsrl.vx v8, v8, a0
331 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
332 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
333 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
334 ret <vscale x 16 x i8> %v
337 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
338 ; CHECK-LABEL: vsrl_vi_nxv16i8:
340 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
341 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
343 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> %m, i32 %evl)
344 ret <vscale x 16 x i8> %v
347 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
348 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
350 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
351 ; CHECK-NEXT: vsrl.vi v8, v8, 4
353 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
354 ret <vscale x 16 x i8> %v
357 declare <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
359 define <vscale x 32 x i8> @vsrl_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
360 ; CHECK-LABEL: vsrl_vv_nxv32i8:
362 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
363 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
365 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
366 ret <vscale x 32 x i8> %v
369 define <vscale x 32 x i8> @vsrl_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
370 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
372 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
373 ; CHECK-NEXT: vsrl.vv v8, v8, v12
375 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
376 ret <vscale x 32 x i8> %v
379 define <vscale x 32 x i8> @vsrl_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
380 ; CHECK-LABEL: vsrl_vx_nxv32i8:
382 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
383 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
385 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
386 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
387 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
388 ret <vscale x 32 x i8> %v
391 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
392 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
394 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
395 ; CHECK-NEXT: vsrl.vx v8, v8, a0
397 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
398 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
399 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
400 ret <vscale x 32 x i8> %v
403 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
404 ; CHECK-LABEL: vsrl_vi_nxv32i8:
406 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
407 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
409 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> %m, i32 %evl)
410 ret <vscale x 32 x i8> %v
413 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
414 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
416 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
417 ; CHECK-NEXT: vsrl.vi v8, v8, 4
419 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> splat (i1 true), i32 %evl)
420 ret <vscale x 32 x i8> %v
423 declare <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
425 define <vscale x 64 x i8> @vsrl_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
426 ; CHECK-LABEL: vsrl_vv_nxv64i8:
428 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
429 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
431 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
432 ret <vscale x 64 x i8> %v
435 define <vscale x 64 x i8> @vsrl_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
436 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
438 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
439 ; CHECK-NEXT: vsrl.vv v8, v8, v16
441 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
442 ret <vscale x 64 x i8> %v
445 define <vscale x 64 x i8> @vsrl_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
446 ; CHECK-LABEL: vsrl_vx_nxv64i8:
448 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
449 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
451 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
452 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
453 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
454 ret <vscale x 64 x i8> %v
457 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
458 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
460 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
461 ; CHECK-NEXT: vsrl.vx v8, v8, a0
463 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
464 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
465 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
466 ret <vscale x 64 x i8> %v
469 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
470 ; CHECK-LABEL: vsrl_vi_nxv64i8:
472 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
473 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
475 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> %m, i32 %evl)
476 ret <vscale x 64 x i8> %v
479 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
480 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
482 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
483 ; CHECK-NEXT: vsrl.vi v8, v8, 4
485 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> splat (i1 true), i32 %evl)
486 ret <vscale x 64 x i8> %v
489 declare <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
491 define <vscale x 1 x i16> @vsrl_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
492 ; CHECK-LABEL: vsrl_vv_nxv1i16:
494 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
495 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
497 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
498 ret <vscale x 1 x i16> %v
501 define <vscale x 1 x i16> @vsrl_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
502 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
504 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
505 ; CHECK-NEXT: vsrl.vv v8, v8, v9
507 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
508 ret <vscale x 1 x i16> %v
511 define <vscale x 1 x i16> @vsrl_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
512 ; CHECK-LABEL: vsrl_vx_nxv1i16:
514 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
515 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
517 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
518 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
519 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
520 ret <vscale x 1 x i16> %v
523 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
524 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
526 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
527 ; CHECK-NEXT: vsrl.vx v8, v8, a0
529 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
530 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
531 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
532 ret <vscale x 1 x i16> %v
535 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
536 ; CHECK-LABEL: vsrl_vi_nxv1i16:
538 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
539 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
541 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> %m, i32 %evl)
542 ret <vscale x 1 x i16> %v
545 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
546 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
548 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
549 ; CHECK-NEXT: vsrl.vi v8, v8, 4
551 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
552 ret <vscale x 1 x i16> %v
555 declare <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
557 define <vscale x 2 x i16> @vsrl_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
558 ; CHECK-LABEL: vsrl_vv_nxv2i16:
560 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
561 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
563 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
564 ret <vscale x 2 x i16> %v
567 define <vscale x 2 x i16> @vsrl_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
568 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
570 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
571 ; CHECK-NEXT: vsrl.vv v8, v8, v9
573 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
574 ret <vscale x 2 x i16> %v
577 define <vscale x 2 x i16> @vsrl_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
578 ; CHECK-LABEL: vsrl_vx_nxv2i16:
580 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
581 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
583 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
584 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
585 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
586 ret <vscale x 2 x i16> %v
589 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
590 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
592 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
593 ; CHECK-NEXT: vsrl.vx v8, v8, a0
595 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
596 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
597 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
598 ret <vscale x 2 x i16> %v
601 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
602 ; CHECK-LABEL: vsrl_vi_nxv2i16:
604 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
605 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
607 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> %m, i32 %evl)
608 ret <vscale x 2 x i16> %v
611 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
612 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
614 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
615 ; CHECK-NEXT: vsrl.vi v8, v8, 4
617 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
618 ret <vscale x 2 x i16> %v
621 declare <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
623 define <vscale x 4 x i16> @vsrl_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
624 ; CHECK-LABEL: vsrl_vv_nxv4i16:
626 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
627 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
629 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
630 ret <vscale x 4 x i16> %v
633 define <vscale x 4 x i16> @vsrl_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
634 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
636 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
637 ; CHECK-NEXT: vsrl.vv v8, v8, v9
639 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
640 ret <vscale x 4 x i16> %v
643 define <vscale x 4 x i16> @vsrl_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
644 ; CHECK-LABEL: vsrl_vx_nxv4i16:
646 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
647 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
649 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
650 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
651 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
652 ret <vscale x 4 x i16> %v
655 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
656 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
658 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
659 ; CHECK-NEXT: vsrl.vx v8, v8, a0
661 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
662 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
663 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
664 ret <vscale x 4 x i16> %v
667 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
668 ; CHECK-LABEL: vsrl_vi_nxv4i16:
670 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
671 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
673 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> %m, i32 %evl)
674 ret <vscale x 4 x i16> %v
677 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
678 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
680 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
681 ; CHECK-NEXT: vsrl.vi v8, v8, 4
683 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
684 ret <vscale x 4 x i16> %v
687 declare <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
689 define <vscale x 8 x i16> @vsrl_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
690 ; CHECK-LABEL: vsrl_vv_nxv8i16:
692 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
693 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
695 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
696 ret <vscale x 8 x i16> %v
699 define <vscale x 8 x i16> @vsrl_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
700 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
702 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
703 ; CHECK-NEXT: vsrl.vv v8, v8, v10
705 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
706 ret <vscale x 8 x i16> %v
709 define <vscale x 8 x i16> @vsrl_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
710 ; CHECK-LABEL: vsrl_vx_nxv8i16:
712 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
713 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
715 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
716 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
717 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
718 ret <vscale x 8 x i16> %v
721 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
722 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
724 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
725 ; CHECK-NEXT: vsrl.vx v8, v8, a0
727 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
728 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
729 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
730 ret <vscale x 8 x i16> %v
733 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
734 ; CHECK-LABEL: vsrl_vi_nxv8i16:
736 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
737 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
739 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> %m, i32 %evl)
740 ret <vscale x 8 x i16> %v
743 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
744 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
746 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
747 ; CHECK-NEXT: vsrl.vi v8, v8, 4
749 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
750 ret <vscale x 8 x i16> %v
753 declare <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
755 define <vscale x 16 x i16> @vsrl_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
756 ; CHECK-LABEL: vsrl_vv_nxv16i16:
758 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
759 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
761 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
762 ret <vscale x 16 x i16> %v
765 define <vscale x 16 x i16> @vsrl_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
766 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
768 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
769 ; CHECK-NEXT: vsrl.vv v8, v8, v12
771 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
772 ret <vscale x 16 x i16> %v
775 define <vscale x 16 x i16> @vsrl_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
776 ; CHECK-LABEL: vsrl_vx_nxv16i16:
778 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
779 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
781 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
782 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
783 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
784 ret <vscale x 16 x i16> %v
787 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
788 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
790 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
791 ; CHECK-NEXT: vsrl.vx v8, v8, a0
793 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
794 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
795 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
796 ret <vscale x 16 x i16> %v
799 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
800 ; CHECK-LABEL: vsrl_vi_nxv16i16:
802 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
803 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
805 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> %m, i32 %evl)
806 ret <vscale x 16 x i16> %v
809 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
810 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
812 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
813 ; CHECK-NEXT: vsrl.vi v8, v8, 4
815 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
816 ret <vscale x 16 x i16> %v
819 declare <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
821 define <vscale x 32 x i16> @vsrl_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
822 ; CHECK-LABEL: vsrl_vv_nxv32i16:
824 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
825 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
827 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
828 ret <vscale x 32 x i16> %v
831 define <vscale x 32 x i16> @vsrl_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
832 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
834 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
835 ; CHECK-NEXT: vsrl.vv v8, v8, v16
837 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
838 ret <vscale x 32 x i16> %v
841 define <vscale x 32 x i16> @vsrl_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
842 ; CHECK-LABEL: vsrl_vx_nxv32i16:
844 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
845 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
847 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
848 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
849 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
850 ret <vscale x 32 x i16> %v
853 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
854 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
856 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
857 ; CHECK-NEXT: vsrl.vx v8, v8, a0
859 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
860 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
861 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
862 ret <vscale x 32 x i16> %v
865 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
866 ; CHECK-LABEL: vsrl_vi_nxv32i16:
868 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
869 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
871 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> %m, i32 %evl)
872 ret <vscale x 32 x i16> %v
875 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
876 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
878 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
879 ; CHECK-NEXT: vsrl.vi v8, v8, 4
881 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> splat (i1 true), i32 %evl)
882 ret <vscale x 32 x i16> %v
885 declare <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
887 define <vscale x 1 x i32> @vsrl_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
888 ; CHECK-LABEL: vsrl_vv_nxv1i32:
890 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
891 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
893 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
894 ret <vscale x 1 x i32> %v
897 define <vscale x 1 x i32> @vsrl_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
898 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
900 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
901 ; CHECK-NEXT: vsrl.vv v8, v8, v9
903 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
904 ret <vscale x 1 x i32> %v
907 define <vscale x 1 x i32> @vsrl_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
908 ; CHECK-LABEL: vsrl_vx_nxv1i32:
910 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
911 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
913 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
914 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
915 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
916 ret <vscale x 1 x i32> %v
919 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
920 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
922 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
923 ; CHECK-NEXT: vsrl.vx v8, v8, a0
925 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
926 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
927 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
928 ret <vscale x 1 x i32> %v
931 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
932 ; CHECK-LABEL: vsrl_vi_nxv1i32:
934 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
935 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
937 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> %m, i32 %evl)
938 ret <vscale x 1 x i32> %v
941 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
942 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
944 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
945 ; CHECK-NEXT: vsrl.vi v8, v8, 4
947 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
948 ret <vscale x 1 x i32> %v
951 declare <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
953 define <vscale x 2 x i32> @vsrl_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
954 ; CHECK-LABEL: vsrl_vv_nxv2i32:
956 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
957 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
959 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
960 ret <vscale x 2 x i32> %v
963 define <vscale x 2 x i32> @vsrl_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
964 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
966 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
967 ; CHECK-NEXT: vsrl.vv v8, v8, v9
969 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
970 ret <vscale x 2 x i32> %v
973 define <vscale x 2 x i32> @vsrl_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
974 ; CHECK-LABEL: vsrl_vx_nxv2i32:
976 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
977 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
979 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
980 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
981 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
982 ret <vscale x 2 x i32> %v
985 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
986 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
988 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
989 ; CHECK-NEXT: vsrl.vx v8, v8, a0
991 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
992 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
993 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
994 ret <vscale x 2 x i32> %v
997 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
998 ; CHECK-LABEL: vsrl_vi_nxv2i32:
1000 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1001 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1003 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> %m, i32 %evl)
1004 ret <vscale x 2 x i32> %v
1007 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1008 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1010 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1011 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1013 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1014 ret <vscale x 2 x i32> %v
1017 declare <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1019 define <vscale x 4 x i32> @vsrl_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1020 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1022 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1023 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1025 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1026 ret <vscale x 4 x i32> %v
1029 define <vscale x 4 x i32> @vsrl_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1030 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1032 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1033 ; CHECK-NEXT: vsrl.vv v8, v8, v10
1035 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1036 ret <vscale x 4 x i32> %v
1039 define <vscale x 4 x i32> @vsrl_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1040 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1042 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1043 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1045 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1046 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1047 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1048 ret <vscale x 4 x i32> %v
1051 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1052 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1054 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1055 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1057 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1058 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1059 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1060 ret <vscale x 4 x i32> %v
1063 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1064 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1066 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1067 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1069 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> %m, i32 %evl)
1070 ret <vscale x 4 x i32> %v
1073 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1074 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1076 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1077 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1079 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1080 ret <vscale x 4 x i32> %v
1083 declare <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1085 define <vscale x 8 x i32> @vsrl_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1086 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1088 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1089 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1091 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1092 ret <vscale x 8 x i32> %v
1095 define <vscale x 8 x i32> @vsrl_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1096 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1098 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1099 ; CHECK-NEXT: vsrl.vv v8, v8, v12
1101 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1102 ret <vscale x 8 x i32> %v
1105 define <vscale x 8 x i32> @vsrl_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1106 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1108 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1109 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1111 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1112 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1113 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1114 ret <vscale x 8 x i32> %v
1117 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1118 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1120 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1121 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1123 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1124 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1125 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1126 ret <vscale x 8 x i32> %v
1129 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1130 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1132 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1133 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1135 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> %m, i32 %evl)
1136 ret <vscale x 8 x i32> %v
1139 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1140 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1142 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1143 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1145 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1146 ret <vscale x 8 x i32> %v
1149 declare <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1151 define <vscale x 16 x i32> @vsrl_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1152 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1154 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1155 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1157 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1158 ret <vscale x 16 x i32> %v
1161 define <vscale x 16 x i32> @vsrl_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1162 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1164 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1165 ; CHECK-NEXT: vsrl.vv v8, v8, v16
1167 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1168 ret <vscale x 16 x i32> %v
1171 define <vscale x 16 x i32> @vsrl_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1172 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1174 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1175 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1177 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1178 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1179 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1180 ret <vscale x 16 x i32> %v
1183 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1184 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1186 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1187 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1189 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1190 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1191 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1192 ret <vscale x 16 x i32> %v
1195 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1196 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1198 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1199 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1201 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> %m, i32 %evl)
1202 ret <vscale x 16 x i32> %v
1205 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1206 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1208 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1209 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1211 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1212 ret <vscale x 16 x i32> %v
1215 declare <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1217 define <vscale x 1 x i64> @vsrl_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1218 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1220 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1221 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
1223 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1224 ret <vscale x 1 x i64> %v
1227 define <vscale x 1 x i64> @vsrl_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1228 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1230 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1231 ; CHECK-NEXT: vsrl.vv v8, v8, v9
1233 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1234 ret <vscale x 1 x i64> %v
1237 define <vscale x 1 x i64> @vsrl_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1238 ; RV32-LABEL: vsrl_vx_nxv1i64:
1240 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1241 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1244 ; RV64-LABEL: vsrl_vx_nxv1i64:
1246 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1247 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1249 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1250 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1251 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1252 ret <vscale x 1 x i64> %v
1255 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1256 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1258 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1259 ; RV32-NEXT: vsrl.vx v8, v8, a0
1262 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1264 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1265 ; RV64-NEXT: vsrl.vx v8, v8, a0
1267 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1268 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1269 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1270 ret <vscale x 1 x i64> %v
1273 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1274 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1276 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1277 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1279 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> %m, i32 %evl)
1280 ret <vscale x 1 x i64> %v
1283 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1284 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1286 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1287 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1289 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1290 ret <vscale x 1 x i64> %v
1293 declare <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1295 define <vscale x 2 x i64> @vsrl_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1296 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1298 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1299 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1301 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1302 ret <vscale x 2 x i64> %v
1305 define <vscale x 2 x i64> @vsrl_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1306 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1308 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1309 ; CHECK-NEXT: vsrl.vv v8, v8, v10
1311 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1312 ret <vscale x 2 x i64> %v
1315 define <vscale x 2 x i64> @vsrl_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1316 ; RV32-LABEL: vsrl_vx_nxv2i64:
1318 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1319 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1322 ; RV64-LABEL: vsrl_vx_nxv2i64:
1324 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1325 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1327 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1328 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1329 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1330 ret <vscale x 2 x i64> %v
1333 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1334 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1336 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1337 ; RV32-NEXT: vsrl.vx v8, v8, a0
1340 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1342 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1343 ; RV64-NEXT: vsrl.vx v8, v8, a0
1345 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1346 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1347 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1348 ret <vscale x 2 x i64> %v
1351 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1352 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1354 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1355 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1357 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> %m, i32 %evl)
1358 ret <vscale x 2 x i64> %v
1361 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1362 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1364 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1365 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1367 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1368 ret <vscale x 2 x i64> %v
1371 declare <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1373 define <vscale x 4 x i64> @vsrl_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1374 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1376 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1377 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1379 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1380 ret <vscale x 4 x i64> %v
1383 define <vscale x 4 x i64> @vsrl_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1384 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1386 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1387 ; CHECK-NEXT: vsrl.vv v8, v8, v12
1389 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1390 ret <vscale x 4 x i64> %v
1393 define <vscale x 4 x i64> @vsrl_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1394 ; RV32-LABEL: vsrl_vx_nxv4i64:
1396 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1397 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1400 ; RV64-LABEL: vsrl_vx_nxv4i64:
1402 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1403 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1405 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1406 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1407 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1408 ret <vscale x 4 x i64> %v
1411 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1412 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1414 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1415 ; RV32-NEXT: vsrl.vx v8, v8, a0
1418 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1420 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1421 ; RV64-NEXT: vsrl.vx v8, v8, a0
1423 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1424 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1425 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1426 ret <vscale x 4 x i64> %v
1429 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1430 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1432 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1433 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1435 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> %m, i32 %evl)
1436 ret <vscale x 4 x i64> %v
1439 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1440 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1442 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1443 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1445 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1446 ret <vscale x 4 x i64> %v
1449 declare <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64>, <vscale x 5 x i64>, <vscale x 5 x i1>, i32)
1451 define <vscale x 5 x i64> @vsrl_vv_nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 zeroext %evl) {
1452 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1454 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1455 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1457 %v = call <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 %evl)
1458 ret <vscale x 5 x i64> %v
1461 declare <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1463 define <vscale x 8 x i64> @vsrl_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1464 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1466 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1467 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1469 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1470 ret <vscale x 8 x i64> %v
1473 define <vscale x 8 x i64> @vsrl_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1474 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1476 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1477 ; CHECK-NEXT: vsrl.vv v8, v8, v16
1479 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1480 ret <vscale x 8 x i64> %v
1483 define <vscale x 8 x i64> @vsrl_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1484 ; RV32-LABEL: vsrl_vx_nxv8i64:
1486 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1487 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1490 ; RV64-LABEL: vsrl_vx_nxv8i64:
1492 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1493 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1495 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1496 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1497 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1498 ret <vscale x 8 x i64> %v
1501 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1502 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1504 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1505 ; RV32-NEXT: vsrl.vx v8, v8, a0
1508 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1510 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1511 ; RV64-NEXT: vsrl.vx v8, v8, a0
1513 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1514 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1515 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1516 ret <vscale x 8 x i64> %v
1519 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1520 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1522 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1523 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1525 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> %m, i32 %evl)
1526 ret <vscale x 8 x i64> %v
1529 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1530 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1532 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1533 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1535 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1536 ret <vscale x 8 x i64> %v