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: vmv.v.x v9, a0
15 ; CHECK-NEXT: vand.vx v8, v8, a2, v0.t
16 ; CHECK-NEXT: vand.vx v9, v9, a2, v0.t
17 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
19 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
20 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
21 %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)
22 ret <vscale x 8 x i7> %v
25 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)
27 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) {
28 ; CHECK-LABEL: vsrl_vv_nxv1i8:
30 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
31 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
33 %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)
34 ret <vscale x 1 x i8> %v
37 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) {
38 ; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked:
40 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
41 ; CHECK-NEXT: vsrl.vv v8, v8, v9
43 %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)
44 ret <vscale x 1 x i8> %v
47 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) {
48 ; CHECK-LABEL: vsrl_vx_nxv1i8:
50 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
51 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
53 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
54 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
55 %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)
56 ret <vscale x 1 x i8> %v
59 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
60 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
62 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
63 ; CHECK-NEXT: vsrl.vx v8, v8, a0
65 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
66 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
67 %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)
68 ret <vscale x 1 x i8> %v
71 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
72 ; CHECK-LABEL: vsrl_vi_nxv1i8:
74 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
75 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
77 %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)
78 ret <vscale x 1 x i8> %v
81 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
82 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
84 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
85 ; CHECK-NEXT: vsrl.vi v8, v8, 4
87 %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)
88 ret <vscale x 1 x i8> %v
91 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)
93 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) {
94 ; CHECK-LABEL: vsrl_vv_nxv2i8:
96 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
97 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
99 %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)
100 ret <vscale x 2 x i8> %v
103 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) {
104 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
106 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
107 ; CHECK-NEXT: vsrl.vv v8, v8, v9
109 %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)
110 ret <vscale x 2 x i8> %v
113 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) {
114 ; CHECK-LABEL: vsrl_vx_nxv2i8:
116 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
117 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
119 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
120 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
121 %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)
122 ret <vscale x 2 x i8> %v
125 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
126 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
128 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
129 ; CHECK-NEXT: vsrl.vx v8, v8, a0
131 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
132 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
133 %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)
134 ret <vscale x 2 x i8> %v
137 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
138 ; CHECK-LABEL: vsrl_vi_nxv2i8:
140 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
141 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
143 %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)
144 ret <vscale x 2 x i8> %v
147 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
148 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
150 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
151 ; CHECK-NEXT: vsrl.vi v8, v8, 4
153 %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)
154 ret <vscale x 2 x i8> %v
157 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)
159 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) {
160 ; CHECK-LABEL: vsrl_vv_nxv4i8:
162 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
163 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
165 %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)
166 ret <vscale x 4 x i8> %v
169 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) {
170 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
172 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
173 ; CHECK-NEXT: vsrl.vv v8, v8, v9
175 %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)
176 ret <vscale x 4 x i8> %v
179 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) {
180 ; CHECK-LABEL: vsrl_vx_nxv4i8:
182 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
183 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
185 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
186 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
187 %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)
188 ret <vscale x 4 x i8> %v
191 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
192 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
194 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
195 ; CHECK-NEXT: vsrl.vx v8, v8, a0
197 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
198 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
199 %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)
200 ret <vscale x 4 x i8> %v
203 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
204 ; CHECK-LABEL: vsrl_vi_nxv4i8:
206 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
207 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
209 %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)
210 ret <vscale x 4 x i8> %v
213 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
214 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
216 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
217 ; CHECK-NEXT: vsrl.vi v8, v8, 4
219 %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)
220 ret <vscale x 4 x i8> %v
223 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)
225 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) {
226 ; CHECK-LABEL: vsrl_vv_nxv8i8:
228 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
229 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
231 %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)
232 ret <vscale x 8 x i8> %v
235 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) {
236 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
238 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
239 ; CHECK-NEXT: vsrl.vv v8, v8, v9
241 %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)
242 ret <vscale x 8 x i8> %v
245 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) {
246 ; CHECK-LABEL: vsrl_vx_nxv8i8:
248 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
249 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
251 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
252 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
253 %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)
254 ret <vscale x 8 x i8> %v
257 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
258 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
260 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
261 ; CHECK-NEXT: vsrl.vx v8, v8, a0
263 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
264 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
265 %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)
266 ret <vscale x 8 x i8> %v
269 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
270 ; CHECK-LABEL: vsrl_vi_nxv8i8:
272 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
273 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
275 %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)
276 ret <vscale x 8 x i8> %v
279 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
280 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
282 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
283 ; CHECK-NEXT: vsrl.vi v8, v8, 4
285 %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)
286 ret <vscale x 8 x i8> %v
289 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)
291 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) {
292 ; CHECK-LABEL: vsrl_vv_nxv16i8:
294 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
295 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
297 %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)
298 ret <vscale x 16 x i8> %v
301 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) {
302 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
304 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
305 ; CHECK-NEXT: vsrl.vv v8, v8, v10
307 %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)
308 ret <vscale x 16 x i8> %v
311 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) {
312 ; CHECK-LABEL: vsrl_vx_nxv16i8:
314 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
315 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
317 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
318 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
319 %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)
320 ret <vscale x 16 x i8> %v
323 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
324 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
326 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
327 ; CHECK-NEXT: vsrl.vx v8, v8, a0
329 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
330 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
331 %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)
332 ret <vscale x 16 x i8> %v
335 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
336 ; CHECK-LABEL: vsrl_vi_nxv16i8:
338 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
339 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
341 %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)
342 ret <vscale x 16 x i8> %v
345 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
346 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
348 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
349 ; CHECK-NEXT: vsrl.vi v8, v8, 4
351 %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)
352 ret <vscale x 16 x i8> %v
355 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)
357 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) {
358 ; CHECK-LABEL: vsrl_vv_nxv32i8:
360 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
361 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
363 %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)
364 ret <vscale x 32 x i8> %v
367 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) {
368 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
370 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
371 ; CHECK-NEXT: vsrl.vv v8, v8, v12
373 %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)
374 ret <vscale x 32 x i8> %v
377 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) {
378 ; CHECK-LABEL: vsrl_vx_nxv32i8:
380 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
381 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
383 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
384 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
385 %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)
386 ret <vscale x 32 x i8> %v
389 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
390 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
392 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
393 ; CHECK-NEXT: vsrl.vx v8, v8, a0
395 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
396 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
397 %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)
398 ret <vscale x 32 x i8> %v
401 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
402 ; CHECK-LABEL: vsrl_vi_nxv32i8:
404 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
405 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
407 %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)
408 ret <vscale x 32 x i8> %v
411 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
412 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
414 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
415 ; CHECK-NEXT: vsrl.vi v8, v8, 4
417 %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)
418 ret <vscale x 32 x i8> %v
421 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)
423 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) {
424 ; CHECK-LABEL: vsrl_vv_nxv64i8:
426 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
427 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
429 %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)
430 ret <vscale x 64 x i8> %v
433 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) {
434 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
436 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
437 ; CHECK-NEXT: vsrl.vv v8, v8, v16
439 %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)
440 ret <vscale x 64 x i8> %v
443 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) {
444 ; CHECK-LABEL: vsrl_vx_nxv64i8:
446 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
447 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
449 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
450 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
451 %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)
452 ret <vscale x 64 x i8> %v
455 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
456 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
458 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
459 ; CHECK-NEXT: vsrl.vx v8, v8, a0
461 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
462 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
463 %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)
464 ret <vscale x 64 x i8> %v
467 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
468 ; CHECK-LABEL: vsrl_vi_nxv64i8:
470 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
471 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
473 %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)
474 ret <vscale x 64 x i8> %v
477 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
478 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
480 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
481 ; CHECK-NEXT: vsrl.vi v8, v8, 4
483 %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)
484 ret <vscale x 64 x i8> %v
487 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)
489 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) {
490 ; CHECK-LABEL: vsrl_vv_nxv1i16:
492 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
493 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
495 %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)
496 ret <vscale x 1 x i16> %v
499 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) {
500 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
502 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
503 ; CHECK-NEXT: vsrl.vv v8, v8, v9
505 %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)
506 ret <vscale x 1 x i16> %v
509 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) {
510 ; CHECK-LABEL: vsrl_vx_nxv1i16:
512 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
513 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
515 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
516 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
517 %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)
518 ret <vscale x 1 x i16> %v
521 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
522 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
524 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
525 ; CHECK-NEXT: vsrl.vx v8, v8, a0
527 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
528 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
529 %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)
530 ret <vscale x 1 x i16> %v
533 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
534 ; CHECK-LABEL: vsrl_vi_nxv1i16:
536 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
537 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
539 %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)
540 ret <vscale x 1 x i16> %v
543 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
544 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
546 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
547 ; CHECK-NEXT: vsrl.vi v8, v8, 4
549 %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)
550 ret <vscale x 1 x i16> %v
553 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)
555 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) {
556 ; CHECK-LABEL: vsrl_vv_nxv2i16:
558 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
559 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
561 %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)
562 ret <vscale x 2 x i16> %v
565 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) {
566 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
568 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
569 ; CHECK-NEXT: vsrl.vv v8, v8, v9
571 %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)
572 ret <vscale x 2 x i16> %v
575 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) {
576 ; CHECK-LABEL: vsrl_vx_nxv2i16:
578 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
579 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
581 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
582 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
583 %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)
584 ret <vscale x 2 x i16> %v
587 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
588 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
590 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
591 ; CHECK-NEXT: vsrl.vx v8, v8, a0
593 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
594 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
595 %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)
596 ret <vscale x 2 x i16> %v
599 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
600 ; CHECK-LABEL: vsrl_vi_nxv2i16:
602 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
603 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
605 %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)
606 ret <vscale x 2 x i16> %v
609 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
610 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
612 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
613 ; CHECK-NEXT: vsrl.vi v8, v8, 4
615 %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)
616 ret <vscale x 2 x i16> %v
619 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)
621 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) {
622 ; CHECK-LABEL: vsrl_vv_nxv4i16:
624 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
625 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
627 %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)
628 ret <vscale x 4 x i16> %v
631 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) {
632 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
634 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
635 ; CHECK-NEXT: vsrl.vv v8, v8, v9
637 %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)
638 ret <vscale x 4 x i16> %v
641 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) {
642 ; CHECK-LABEL: vsrl_vx_nxv4i16:
644 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
645 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
647 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
648 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
649 %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)
650 ret <vscale x 4 x i16> %v
653 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
654 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
656 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
657 ; CHECK-NEXT: vsrl.vx v8, v8, a0
659 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
660 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
661 %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)
662 ret <vscale x 4 x i16> %v
665 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
666 ; CHECK-LABEL: vsrl_vi_nxv4i16:
668 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
669 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
671 %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)
672 ret <vscale x 4 x i16> %v
675 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
676 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
678 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
679 ; CHECK-NEXT: vsrl.vi v8, v8, 4
681 %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)
682 ret <vscale x 4 x i16> %v
685 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)
687 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) {
688 ; CHECK-LABEL: vsrl_vv_nxv8i16:
690 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
691 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
693 %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)
694 ret <vscale x 8 x i16> %v
697 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) {
698 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
700 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
701 ; CHECK-NEXT: vsrl.vv v8, v8, v10
703 %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)
704 ret <vscale x 8 x i16> %v
707 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) {
708 ; CHECK-LABEL: vsrl_vx_nxv8i16:
710 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
711 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
713 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
714 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
715 %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)
716 ret <vscale x 8 x i16> %v
719 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
720 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
722 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
723 ; CHECK-NEXT: vsrl.vx v8, v8, a0
725 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
726 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
727 %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)
728 ret <vscale x 8 x i16> %v
731 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
732 ; CHECK-LABEL: vsrl_vi_nxv8i16:
734 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
735 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
737 %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)
738 ret <vscale x 8 x i16> %v
741 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
742 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
744 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
745 ; CHECK-NEXT: vsrl.vi v8, v8, 4
747 %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)
748 ret <vscale x 8 x i16> %v
751 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)
753 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) {
754 ; CHECK-LABEL: vsrl_vv_nxv16i16:
756 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
757 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
759 %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)
760 ret <vscale x 16 x i16> %v
763 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) {
764 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
766 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
767 ; CHECK-NEXT: vsrl.vv v8, v8, v12
769 %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)
770 ret <vscale x 16 x i16> %v
773 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) {
774 ; CHECK-LABEL: vsrl_vx_nxv16i16:
776 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
777 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
779 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
780 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
781 %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)
782 ret <vscale x 16 x i16> %v
785 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
786 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
788 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
789 ; CHECK-NEXT: vsrl.vx v8, v8, a0
791 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
792 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
793 %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)
794 ret <vscale x 16 x i16> %v
797 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
798 ; CHECK-LABEL: vsrl_vi_nxv16i16:
800 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
801 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
803 %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)
804 ret <vscale x 16 x i16> %v
807 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
808 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
810 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
811 ; CHECK-NEXT: vsrl.vi v8, v8, 4
813 %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)
814 ret <vscale x 16 x i16> %v
817 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)
819 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) {
820 ; CHECK-LABEL: vsrl_vv_nxv32i16:
822 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
823 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
825 %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)
826 ret <vscale x 32 x i16> %v
829 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) {
830 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
832 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
833 ; CHECK-NEXT: vsrl.vv v8, v8, v16
835 %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)
836 ret <vscale x 32 x i16> %v
839 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) {
840 ; CHECK-LABEL: vsrl_vx_nxv32i16:
842 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
843 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
845 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
846 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
847 %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)
848 ret <vscale x 32 x i16> %v
851 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
852 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
854 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
855 ; CHECK-NEXT: vsrl.vx v8, v8, a0
857 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
858 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
859 %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)
860 ret <vscale x 32 x i16> %v
863 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
864 ; CHECK-LABEL: vsrl_vi_nxv32i16:
866 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
867 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
869 %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)
870 ret <vscale x 32 x i16> %v
873 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
874 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
876 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
877 ; CHECK-NEXT: vsrl.vi v8, v8, 4
879 %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)
880 ret <vscale x 32 x i16> %v
883 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)
885 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) {
886 ; CHECK-LABEL: vsrl_vv_nxv1i32:
888 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
889 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
891 %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)
892 ret <vscale x 1 x i32> %v
895 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) {
896 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
898 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
899 ; CHECK-NEXT: vsrl.vv v8, v8, v9
901 %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)
902 ret <vscale x 1 x i32> %v
905 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) {
906 ; CHECK-LABEL: vsrl_vx_nxv1i32:
908 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
909 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
911 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
912 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
913 %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)
914 ret <vscale x 1 x i32> %v
917 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
918 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
920 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
921 ; CHECK-NEXT: vsrl.vx v8, v8, a0
923 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
924 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
925 %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)
926 ret <vscale x 1 x i32> %v
929 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
930 ; CHECK-LABEL: vsrl_vi_nxv1i32:
932 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
933 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
935 %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)
936 ret <vscale x 1 x i32> %v
939 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
940 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
942 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
943 ; CHECK-NEXT: vsrl.vi v8, v8, 4
945 %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)
946 ret <vscale x 1 x i32> %v
949 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)
951 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) {
952 ; CHECK-LABEL: vsrl_vv_nxv2i32:
954 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
955 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
957 %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)
958 ret <vscale x 2 x i32> %v
961 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) {
962 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
964 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
965 ; CHECK-NEXT: vsrl.vv v8, v8, v9
967 %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)
968 ret <vscale x 2 x i32> %v
971 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) {
972 ; CHECK-LABEL: vsrl_vx_nxv2i32:
974 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
975 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
977 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
978 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
979 %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)
980 ret <vscale x 2 x i32> %v
983 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
984 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
986 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
987 ; CHECK-NEXT: vsrl.vx v8, v8, a0
989 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
990 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
991 %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)
992 ret <vscale x 2 x i32> %v
995 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
996 ; CHECK-LABEL: vsrl_vi_nxv2i32:
998 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
999 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1001 %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)
1002 ret <vscale x 2 x i32> %v
1005 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1006 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1008 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1009 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1011 %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)
1012 ret <vscale x 2 x i32> %v
1015 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)
1017 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) {
1018 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1020 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1021 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1023 %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)
1024 ret <vscale x 4 x i32> %v
1027 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) {
1028 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1030 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1031 ; CHECK-NEXT: vsrl.vv v8, v8, v10
1033 %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)
1034 ret <vscale x 4 x i32> %v
1037 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) {
1038 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1040 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1041 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1043 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1044 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1045 %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)
1046 ret <vscale x 4 x i32> %v
1049 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1050 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1052 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1053 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1055 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1056 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1057 %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)
1058 ret <vscale x 4 x i32> %v
1061 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1062 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1064 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1065 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1067 %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)
1068 ret <vscale x 4 x i32> %v
1071 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1072 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1074 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1075 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1077 %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)
1078 ret <vscale x 4 x i32> %v
1081 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)
1083 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) {
1084 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1086 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1087 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1089 %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)
1090 ret <vscale x 8 x i32> %v
1093 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) {
1094 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1096 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1097 ; CHECK-NEXT: vsrl.vv v8, v8, v12
1099 %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)
1100 ret <vscale x 8 x i32> %v
1103 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) {
1104 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1106 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1107 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1109 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1110 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1111 %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)
1112 ret <vscale x 8 x i32> %v
1115 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1116 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1118 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1119 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1121 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1122 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1123 %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)
1124 ret <vscale x 8 x i32> %v
1127 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1128 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1130 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1131 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1133 %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)
1134 ret <vscale x 8 x i32> %v
1137 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1138 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1140 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1141 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1143 %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)
1144 ret <vscale x 8 x i32> %v
1147 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)
1149 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) {
1150 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1152 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1153 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1155 %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)
1156 ret <vscale x 16 x i32> %v
1159 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) {
1160 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1162 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1163 ; CHECK-NEXT: vsrl.vv v8, v8, v16
1165 %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)
1166 ret <vscale x 16 x i32> %v
1169 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) {
1170 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1172 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1173 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1175 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1176 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1177 %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)
1178 ret <vscale x 16 x i32> %v
1181 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1182 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1184 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1185 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1187 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1188 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1189 %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)
1190 ret <vscale x 16 x i32> %v
1193 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1194 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1196 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1197 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1199 %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)
1200 ret <vscale x 16 x i32> %v
1203 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1204 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1206 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1207 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1209 %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)
1210 ret <vscale x 16 x i32> %v
1213 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)
1215 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) {
1216 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1218 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1219 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
1221 %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)
1222 ret <vscale x 1 x i64> %v
1225 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) {
1226 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1228 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1229 ; CHECK-NEXT: vsrl.vv v8, v8, v9
1231 %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)
1232 ret <vscale x 1 x i64> %v
1235 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) {
1236 ; RV32-LABEL: vsrl_vx_nxv1i64:
1238 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1239 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1242 ; RV64-LABEL: vsrl_vx_nxv1i64:
1244 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1245 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1247 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1248 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1249 %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)
1250 ret <vscale x 1 x i64> %v
1253 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1254 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1256 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1257 ; RV32-NEXT: vsrl.vx v8, v8, a0
1260 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1262 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1263 ; RV64-NEXT: vsrl.vx v8, v8, a0
1265 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1266 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1267 %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)
1268 ret <vscale x 1 x i64> %v
1271 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1272 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1274 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1275 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1277 %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)
1278 ret <vscale x 1 x i64> %v
1281 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1282 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1284 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1285 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1287 %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)
1288 ret <vscale x 1 x i64> %v
1291 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)
1293 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) {
1294 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1296 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1297 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1299 %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)
1300 ret <vscale x 2 x i64> %v
1303 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) {
1304 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1306 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1307 ; CHECK-NEXT: vsrl.vv v8, v8, v10
1309 %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)
1310 ret <vscale x 2 x i64> %v
1313 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) {
1314 ; RV32-LABEL: vsrl_vx_nxv2i64:
1316 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1317 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1320 ; RV64-LABEL: vsrl_vx_nxv2i64:
1322 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1323 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1325 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1326 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1327 %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)
1328 ret <vscale x 2 x i64> %v
1331 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1332 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1334 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1335 ; RV32-NEXT: vsrl.vx v8, v8, a0
1338 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1340 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1341 ; RV64-NEXT: vsrl.vx v8, v8, a0
1343 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1344 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1345 %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)
1346 ret <vscale x 2 x i64> %v
1349 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1350 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1352 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1353 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1355 %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)
1356 ret <vscale x 2 x i64> %v
1359 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1360 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1362 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1363 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1365 %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)
1366 ret <vscale x 2 x i64> %v
1369 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)
1371 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) {
1372 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1374 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1375 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1377 %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)
1378 ret <vscale x 4 x i64> %v
1381 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) {
1382 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1384 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1385 ; CHECK-NEXT: vsrl.vv v8, v8, v12
1387 %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)
1388 ret <vscale x 4 x i64> %v
1391 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) {
1392 ; RV32-LABEL: vsrl_vx_nxv4i64:
1394 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1395 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1398 ; RV64-LABEL: vsrl_vx_nxv4i64:
1400 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1401 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1403 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1404 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1405 %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)
1406 ret <vscale x 4 x i64> %v
1409 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1410 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1412 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1413 ; RV32-NEXT: vsrl.vx v8, v8, a0
1416 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1418 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1419 ; RV64-NEXT: vsrl.vx v8, v8, a0
1421 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1422 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1423 %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)
1424 ret <vscale x 4 x i64> %v
1427 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1428 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1430 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1431 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1433 %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)
1434 ret <vscale x 4 x i64> %v
1437 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1438 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1440 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1441 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1443 %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)
1444 ret <vscale x 4 x i64> %v
1447 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)
1449 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) {
1450 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1452 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1453 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1455 %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)
1456 ret <vscale x 5 x i64> %v
1459 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)
1461 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) {
1462 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1464 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1465 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1467 %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)
1468 ret <vscale x 8 x i64> %v
1471 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) {
1472 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1474 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1475 ; CHECK-NEXT: vsrl.vv v8, v8, v16
1477 %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)
1478 ret <vscale x 8 x i64> %v
1481 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) {
1482 ; RV32-LABEL: vsrl_vx_nxv8i64:
1484 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1485 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1488 ; RV64-LABEL: vsrl_vx_nxv8i64:
1490 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1491 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1493 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1494 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1495 %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)
1496 ret <vscale x 8 x i64> %v
1499 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1500 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1502 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1503 ; RV32-NEXT: vsrl.vx v8, v8, a0
1506 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1508 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1509 ; RV64-NEXT: vsrl.vx v8, v8, a0
1511 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1512 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1513 %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)
1514 ret <vscale x 8 x i64> %v
1517 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1518 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1520 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1521 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1523 %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)
1524 ret <vscale x 8 x i64> %v
1527 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1528 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1530 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1531 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1533 %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)
1534 ret <vscale x 8 x i64> %v