Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsrl-vp.ll
blob22f04803eadd74d883acf54d1171cd7654ebdda4
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 <8 x i7> @llvm.vp.lshr.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vsrl_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsrl_vv_v8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    li a1, 127
13 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
14 ; CHECK-NEXT:    vand.vx v9, v9, a1, v0.t
15 ; CHECK-NEXT:    vand.vx v8, v8, a1, v0.t
16 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
17 ; CHECK-NEXT:    ret
18   %v = call <8 x i7> @llvm.vp.lshr.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
19   ret <8 x i7> %v
22 declare <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
24 define <2 x i8> @vsrl_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
25 ; CHECK-LABEL: vsrl_vv_v2i8:
26 ; CHECK:       # %bb.0:
27 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
28 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
29 ; CHECK-NEXT:    ret
30   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
31   ret <2 x i8> %v
34 define <2 x i8> @vsrl_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
35 ; CHECK-LABEL: vsrl_vv_v2i8_unmasked:
36 ; CHECK:       # %bb.0:
37 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
38 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
39 ; CHECK-NEXT:    ret
40   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
41   ret <2 x i8> %v
44 define <2 x i8> @vsrl_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
45 ; CHECK-LABEL: vsrl_vx_v2i8:
46 ; CHECK:       # %bb.0:
47 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
48 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
49 ; CHECK-NEXT:    ret
50   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
51   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
52   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
53   ret <2 x i8> %v
56 define <2 x i8> @vsrl_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
57 ; CHECK-LABEL: vsrl_vx_v2i8_unmasked:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
60 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
61 ; CHECK-NEXT:    ret
62   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
63   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
64   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
65   ret <2 x i8> %v
68 define <2 x i8> @vsrl_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
69 ; CHECK-LABEL: vsrl_vi_v2i8:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
72 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
73 ; CHECK-NEXT:    ret
74   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> splat (i8 4), <2 x i1> %m, i32 %evl)
75   ret <2 x i8> %v
78 define <2 x i8> @vsrl_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
79 ; CHECK-LABEL: vsrl_vi_v2i8_unmasked:
80 ; CHECK:       # %bb.0:
81 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
82 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
83 ; CHECK-NEXT:    ret
84   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> splat (i8 4), <2 x i1> splat (i1 true), i32 %evl)
85   ret <2 x i8> %v
88 declare <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
90 define <4 x i8> @vsrl_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
91 ; CHECK-LABEL: vsrl_vv_v4i8:
92 ; CHECK:       # %bb.0:
93 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
94 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
95 ; CHECK-NEXT:    ret
96   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
97   ret <4 x i8> %v
100 define <4 x i8> @vsrl_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
101 ; CHECK-LABEL: vsrl_vv_v4i8_unmasked:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
104 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
105 ; CHECK-NEXT:    ret
106   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
107   ret <4 x i8> %v
110 define <4 x i8> @vsrl_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
111 ; CHECK-LABEL: vsrl_vx_v4i8:
112 ; CHECK:       # %bb.0:
113 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
114 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
115 ; CHECK-NEXT:    ret
116   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
117   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
118   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
119   ret <4 x i8> %v
122 define <4 x i8> @vsrl_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
123 ; CHECK-LABEL: vsrl_vx_v4i8_unmasked:
124 ; CHECK:       # %bb.0:
125 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
126 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
127 ; CHECK-NEXT:    ret
128   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
129   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
130   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
131   ret <4 x i8> %v
134 define <4 x i8> @vsrl_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
135 ; CHECK-LABEL: vsrl_vi_v4i8:
136 ; CHECK:       # %bb.0:
137 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
138 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
139 ; CHECK-NEXT:    ret
140   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> splat (i8 4), <4 x i1> %m, i32 %evl)
141   ret <4 x i8> %v
144 define <4 x i8> @vsrl_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
145 ; CHECK-LABEL: vsrl_vi_v4i8_unmasked:
146 ; CHECK:       # %bb.0:
147 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
148 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
149 ; CHECK-NEXT:    ret
150   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> splat (i8 4), <4 x i1> splat (i1 true), i32 %evl)
151   ret <4 x i8> %v
154 declare <7 x i8> @llvm.vp.lshr.v7i8(<7 x i8>, <7 x i8>, <7 x i1>, i32)
156 define <7 x i8> @vsrl_vv_v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 zeroext %evl) {
157 ; CHECK-LABEL: vsrl_vv_v7i8:
158 ; CHECK:       # %bb.0:
159 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
160 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
161 ; CHECK-NEXT:    ret
162   %v = call <7 x i8> @llvm.vp.lshr.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 %evl)
163   ret <7 x i8> %v
166 declare <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
168 define <8 x i8> @vsrl_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
169 ; CHECK-LABEL: vsrl_vv_v8i8:
170 ; CHECK:       # %bb.0:
171 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
172 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
173 ; CHECK-NEXT:    ret
174   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
175   ret <8 x i8> %v
178 define <8 x i8> @vsrl_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
179 ; CHECK-LABEL: vsrl_vv_v8i8_unmasked:
180 ; CHECK:       # %bb.0:
181 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
182 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
183 ; CHECK-NEXT:    ret
184   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
185   ret <8 x i8> %v
188 define <8 x i8> @vsrl_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
189 ; CHECK-LABEL: vsrl_vx_v8i8:
190 ; CHECK:       # %bb.0:
191 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
192 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
193 ; CHECK-NEXT:    ret
194   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
195   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
196   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
197   ret <8 x i8> %v
200 define <8 x i8> @vsrl_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
201 ; CHECK-LABEL: vsrl_vx_v8i8_unmasked:
202 ; CHECK:       # %bb.0:
203 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
204 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
205 ; CHECK-NEXT:    ret
206   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
207   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
208   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
209   ret <8 x i8> %v
212 define <8 x i8> @vsrl_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
213 ; CHECK-LABEL: vsrl_vi_v8i8:
214 ; CHECK:       # %bb.0:
215 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
216 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
217 ; CHECK-NEXT:    ret
218   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), <8 x i1> %m, i32 %evl)
219   ret <8 x i8> %v
222 define <8 x i8> @vsrl_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
223 ; CHECK-LABEL: vsrl_vi_v8i8_unmasked:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
226 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
227 ; CHECK-NEXT:    ret
228   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), <8 x i1> splat (i1 true), i32 %evl)
229   ret <8 x i8> %v
232 declare <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
234 define <16 x i8> @vsrl_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
235 ; CHECK-LABEL: vsrl_vv_v16i8:
236 ; CHECK:       # %bb.0:
237 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
238 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
239 ; CHECK-NEXT:    ret
240   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
241   ret <16 x i8> %v
244 define <16 x i8> @vsrl_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
245 ; CHECK-LABEL: vsrl_vv_v16i8_unmasked:
246 ; CHECK:       # %bb.0:
247 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
248 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
249 ; CHECK-NEXT:    ret
250   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
251   ret <16 x i8> %v
254 define <16 x i8> @vsrl_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
255 ; CHECK-LABEL: vsrl_vx_v16i8:
256 ; CHECK:       # %bb.0:
257 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
258 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
259 ; CHECK-NEXT:    ret
260   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
261   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
262   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
263   ret <16 x i8> %v
266 define <16 x i8> @vsrl_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
267 ; CHECK-LABEL: vsrl_vx_v16i8_unmasked:
268 ; CHECK:       # %bb.0:
269 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
270 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
271 ; CHECK-NEXT:    ret
272   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
273   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
274   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
275   ret <16 x i8> %v
278 define <16 x i8> @vsrl_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
279 ; CHECK-LABEL: vsrl_vi_v16i8:
280 ; CHECK:       # %bb.0:
281 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
282 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
283 ; CHECK-NEXT:    ret
284   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> splat (i8 4), <16 x i1> %m, i32 %evl)
285   ret <16 x i8> %v
288 define <16 x i8> @vsrl_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
289 ; CHECK-LABEL: vsrl_vi_v16i8_unmasked:
290 ; CHECK:       # %bb.0:
291 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
292 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
293 ; CHECK-NEXT:    ret
294   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> splat (i8 4), <16 x i1> splat (i1 true), i32 %evl)
295   ret <16 x i8> %v
298 declare <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
300 define <2 x i16> @vsrl_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
301 ; CHECK-LABEL: vsrl_vv_v2i16:
302 ; CHECK:       # %bb.0:
303 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
304 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
305 ; CHECK-NEXT:    ret
306   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
307   ret <2 x i16> %v
310 define <2 x i16> @vsrl_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
311 ; CHECK-LABEL: vsrl_vv_v2i16_unmasked:
312 ; CHECK:       # %bb.0:
313 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
314 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
315 ; CHECK-NEXT:    ret
316   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
317   ret <2 x i16> %v
320 define <2 x i16> @vsrl_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
321 ; CHECK-LABEL: vsrl_vx_v2i16:
322 ; CHECK:       # %bb.0:
323 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
324 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
325 ; CHECK-NEXT:    ret
326   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
327   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
328   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
329   ret <2 x i16> %v
332 define <2 x i16> @vsrl_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
333 ; CHECK-LABEL: vsrl_vx_v2i16_unmasked:
334 ; CHECK:       # %bb.0:
335 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
336 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
337 ; CHECK-NEXT:    ret
338   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
339   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
340   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
341   ret <2 x i16> %v
344 define <2 x i16> @vsrl_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
345 ; CHECK-LABEL: vsrl_vi_v2i16:
346 ; CHECK:       # %bb.0:
347 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
348 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
349 ; CHECK-NEXT:    ret
350   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> splat (i16 4), <2 x i1> %m, i32 %evl)
351   ret <2 x i16> %v
354 define <2 x i16> @vsrl_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
355 ; CHECK-LABEL: vsrl_vi_v2i16_unmasked:
356 ; CHECK:       # %bb.0:
357 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
358 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
359 ; CHECK-NEXT:    ret
360   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> splat (i16 4), <2 x i1> splat (i1 true), i32 %evl)
361   ret <2 x i16> %v
364 declare <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
366 define <4 x i16> @vsrl_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
367 ; CHECK-LABEL: vsrl_vv_v4i16:
368 ; CHECK:       # %bb.0:
369 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
370 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
371 ; CHECK-NEXT:    ret
372   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
373   ret <4 x i16> %v
376 define <4 x i16> @vsrl_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
377 ; CHECK-LABEL: vsrl_vv_v4i16_unmasked:
378 ; CHECK:       # %bb.0:
379 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
380 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
381 ; CHECK-NEXT:    ret
382   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
383   ret <4 x i16> %v
386 define <4 x i16> @vsrl_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
387 ; CHECK-LABEL: vsrl_vx_v4i16:
388 ; CHECK:       # %bb.0:
389 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
390 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
391 ; CHECK-NEXT:    ret
392   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
393   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
394   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
395   ret <4 x i16> %v
398 define <4 x i16> @vsrl_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
399 ; CHECK-LABEL: vsrl_vx_v4i16_unmasked:
400 ; CHECK:       # %bb.0:
401 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
402 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
403 ; CHECK-NEXT:    ret
404   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
405   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
406   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
407   ret <4 x i16> %v
410 define <4 x i16> @vsrl_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
411 ; CHECK-LABEL: vsrl_vi_v4i16:
412 ; CHECK:       # %bb.0:
413 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
414 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
415 ; CHECK-NEXT:    ret
416   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> splat (i16 4), <4 x i1> %m, i32 %evl)
417   ret <4 x i16> %v
420 define <4 x i16> @vsrl_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
421 ; CHECK-LABEL: vsrl_vi_v4i16_unmasked:
422 ; CHECK:       # %bb.0:
423 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
424 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
425 ; CHECK-NEXT:    ret
426   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> splat (i16 4), <4 x i1> splat (i1 true), i32 %evl)
427   ret <4 x i16> %v
430 declare <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
432 define <8 x i16> @vsrl_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
433 ; CHECK-LABEL: vsrl_vv_v8i16:
434 ; CHECK:       # %bb.0:
435 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
436 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
437 ; CHECK-NEXT:    ret
438   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
439   ret <8 x i16> %v
442 define <8 x i16> @vsrl_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
443 ; CHECK-LABEL: vsrl_vv_v8i16_unmasked:
444 ; CHECK:       # %bb.0:
445 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
446 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
447 ; CHECK-NEXT:    ret
448   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
449   ret <8 x i16> %v
452 define <8 x i16> @vsrl_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
453 ; CHECK-LABEL: vsrl_vx_v8i16:
454 ; CHECK:       # %bb.0:
455 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
456 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
457 ; CHECK-NEXT:    ret
458   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
459   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
460   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
461   ret <8 x i16> %v
464 define <8 x i16> @vsrl_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
465 ; CHECK-LABEL: vsrl_vx_v8i16_unmasked:
466 ; CHECK:       # %bb.0:
467 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
468 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
469 ; CHECK-NEXT:    ret
470   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
471   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
472   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
473   ret <8 x i16> %v
476 define <8 x i16> @vsrl_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
477 ; CHECK-LABEL: vsrl_vi_v8i16:
478 ; CHECK:       # %bb.0:
479 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
480 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
481 ; CHECK-NEXT:    ret
482   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> splat (i16 4), <8 x i1> %m, i32 %evl)
483   ret <8 x i16> %v
486 define <8 x i16> @vsrl_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
487 ; CHECK-LABEL: vsrl_vi_v8i16_unmasked:
488 ; CHECK:       # %bb.0:
489 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
490 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
491 ; CHECK-NEXT:    ret
492   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> splat (i16 4), <8 x i1> splat (i1 true), i32 %evl)
493   ret <8 x i16> %v
496 declare <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
498 define <16 x i16> @vsrl_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
499 ; CHECK-LABEL: vsrl_vv_v16i16:
500 ; CHECK:       # %bb.0:
501 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
502 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
503 ; CHECK-NEXT:    ret
504   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
505   ret <16 x i16> %v
508 define <16 x i16> @vsrl_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
509 ; CHECK-LABEL: vsrl_vv_v16i16_unmasked:
510 ; CHECK:       # %bb.0:
511 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
512 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
513 ; CHECK-NEXT:    ret
514   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
515   ret <16 x i16> %v
518 define <16 x i16> @vsrl_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
519 ; CHECK-LABEL: vsrl_vx_v16i16:
520 ; CHECK:       # %bb.0:
521 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
522 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
523 ; CHECK-NEXT:    ret
524   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
525   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
526   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
527   ret <16 x i16> %v
530 define <16 x i16> @vsrl_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
531 ; CHECK-LABEL: vsrl_vx_v16i16_unmasked:
532 ; CHECK:       # %bb.0:
533 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
534 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
535 ; CHECK-NEXT:    ret
536   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
537   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
538   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
539   ret <16 x i16> %v
542 define <16 x i16> @vsrl_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
543 ; CHECK-LABEL: vsrl_vi_v16i16:
544 ; CHECK:       # %bb.0:
545 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
546 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
547 ; CHECK-NEXT:    ret
548   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> splat (i16 4), <16 x i1> %m, i32 %evl)
549   ret <16 x i16> %v
552 define <16 x i16> @vsrl_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
553 ; CHECK-LABEL: vsrl_vi_v16i16_unmasked:
554 ; CHECK:       # %bb.0:
555 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
556 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
557 ; CHECK-NEXT:    ret
558   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> splat (i16 4), <16 x i1> splat (i1 true), i32 %evl)
559   ret <16 x i16> %v
562 declare <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
564 define <2 x i32> @vsrl_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
565 ; CHECK-LABEL: vsrl_vv_v2i32:
566 ; CHECK:       # %bb.0:
567 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
568 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
569 ; CHECK-NEXT:    ret
570   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
571   ret <2 x i32> %v
574 define <2 x i32> @vsrl_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
575 ; CHECK-LABEL: vsrl_vv_v2i32_unmasked:
576 ; CHECK:       # %bb.0:
577 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
578 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
579 ; CHECK-NEXT:    ret
580   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
581   ret <2 x i32> %v
584 define <2 x i32> @vsrl_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
585 ; CHECK-LABEL: vsrl_vx_v2i32:
586 ; CHECK:       # %bb.0:
587 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
588 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
589 ; CHECK-NEXT:    ret
590   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
591   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
592   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
593   ret <2 x i32> %v
596 define <2 x i32> @vsrl_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
597 ; CHECK-LABEL: vsrl_vx_v2i32_unmasked:
598 ; CHECK:       # %bb.0:
599 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
600 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
601 ; CHECK-NEXT:    ret
602   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
603   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
604   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
605   ret <2 x i32> %v
608 define <2 x i32> @vsrl_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
609 ; CHECK-LABEL: vsrl_vi_v2i32:
610 ; CHECK:       # %bb.0:
611 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
612 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
613 ; CHECK-NEXT:    ret
614   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> splat (i32 4), <2 x i1> %m, i32 %evl)
615   ret <2 x i32> %v
618 define <2 x i32> @vsrl_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
619 ; CHECK-LABEL: vsrl_vi_v2i32_unmasked:
620 ; CHECK:       # %bb.0:
621 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
622 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
623 ; CHECK-NEXT:    ret
624   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> splat (i32 4), <2 x i1> splat (i1 true), i32 %evl)
625   ret <2 x i32> %v
628 declare <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
630 define <4 x i32> @vsrl_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
631 ; CHECK-LABEL: vsrl_vv_v4i32:
632 ; CHECK:       # %bb.0:
633 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
634 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
635 ; CHECK-NEXT:    ret
636   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
637   ret <4 x i32> %v
640 define <4 x i32> @vsrl_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
641 ; CHECK-LABEL: vsrl_vv_v4i32_unmasked:
642 ; CHECK:       # %bb.0:
643 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
644 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
645 ; CHECK-NEXT:    ret
646   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
647   ret <4 x i32> %v
650 define <4 x i32> @vsrl_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
651 ; CHECK-LABEL: vsrl_vx_v4i32:
652 ; CHECK:       # %bb.0:
653 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
654 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
655 ; CHECK-NEXT:    ret
656   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
657   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
658   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
659   ret <4 x i32> %v
662 define <4 x i32> @vsrl_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
663 ; CHECK-LABEL: vsrl_vx_v4i32_unmasked:
664 ; CHECK:       # %bb.0:
665 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
666 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
667 ; CHECK-NEXT:    ret
668   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
669   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
670   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
671   ret <4 x i32> %v
674 define <4 x i32> @vsrl_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
675 ; CHECK-LABEL: vsrl_vi_v4i32:
676 ; CHECK:       # %bb.0:
677 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
678 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
679 ; CHECK-NEXT:    ret
680   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> splat (i32 4), <4 x i1> %m, i32 %evl)
681   ret <4 x i32> %v
684 define <4 x i32> @vsrl_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
685 ; CHECK-LABEL: vsrl_vi_v4i32_unmasked:
686 ; CHECK:       # %bb.0:
687 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
688 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
689 ; CHECK-NEXT:    ret
690   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> splat (i32 4), <4 x i1> splat (i1 true), i32 %evl)
691   ret <4 x i32> %v
694 declare <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
696 define <8 x i32> @vsrl_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
697 ; CHECK-LABEL: vsrl_vv_v8i32:
698 ; CHECK:       # %bb.0:
699 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
700 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
701 ; CHECK-NEXT:    ret
702   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
703   ret <8 x i32> %v
706 define <8 x i32> @vsrl_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
707 ; CHECK-LABEL: vsrl_vv_v8i32_unmasked:
708 ; CHECK:       # %bb.0:
709 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
710 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
711 ; CHECK-NEXT:    ret
712   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
713   ret <8 x i32> %v
716 define <8 x i32> @vsrl_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
717 ; CHECK-LABEL: vsrl_vx_v8i32:
718 ; CHECK:       # %bb.0:
719 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
720 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
721 ; CHECK-NEXT:    ret
722   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
723   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
724   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
725   ret <8 x i32> %v
728 define <8 x i32> @vsrl_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
729 ; CHECK-LABEL: vsrl_vx_v8i32_unmasked:
730 ; CHECK:       # %bb.0:
731 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
732 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
733 ; CHECK-NEXT:    ret
734   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
735   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
736   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
737   ret <8 x i32> %v
740 define <8 x i32> @vsrl_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
741 ; CHECK-LABEL: vsrl_vi_v8i32:
742 ; CHECK:       # %bb.0:
743 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
744 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
745 ; CHECK-NEXT:    ret
746   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), <8 x i1> %m, i32 %evl)
747   ret <8 x i32> %v
750 define <8 x i32> @vsrl_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
751 ; CHECK-LABEL: vsrl_vi_v8i32_unmasked:
752 ; CHECK:       # %bb.0:
753 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
754 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
755 ; CHECK-NEXT:    ret
756   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), <8 x i1> splat (i1 true), i32 %evl)
757   ret <8 x i32> %v
760 declare <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
762 define <16 x i32> @vsrl_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
763 ; CHECK-LABEL: vsrl_vv_v16i32:
764 ; CHECK:       # %bb.0:
765 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
766 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
767 ; CHECK-NEXT:    ret
768   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
769   ret <16 x i32> %v
772 define <16 x i32> @vsrl_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
773 ; CHECK-LABEL: vsrl_vv_v16i32_unmasked:
774 ; CHECK:       # %bb.0:
775 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
776 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
777 ; CHECK-NEXT:    ret
778   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
779   ret <16 x i32> %v
782 define <16 x i32> @vsrl_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
783 ; CHECK-LABEL: vsrl_vx_v16i32:
784 ; CHECK:       # %bb.0:
785 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
786 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
787 ; CHECK-NEXT:    ret
788   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
789   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
790   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
791   ret <16 x i32> %v
794 define <16 x i32> @vsrl_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
795 ; CHECK-LABEL: vsrl_vx_v16i32_unmasked:
796 ; CHECK:       # %bb.0:
797 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
798 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
799 ; CHECK-NEXT:    ret
800   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
801   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
802   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
803   ret <16 x i32> %v
806 define <16 x i32> @vsrl_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
807 ; CHECK-LABEL: vsrl_vi_v16i32:
808 ; CHECK:       # %bb.0:
809 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
810 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
811 ; CHECK-NEXT:    ret
812   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> splat (i32 4), <16 x i1> %m, i32 %evl)
813   ret <16 x i32> %v
816 define <16 x i32> @vsrl_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
817 ; CHECK-LABEL: vsrl_vi_v16i32_unmasked:
818 ; CHECK:       # %bb.0:
819 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
820 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
821 ; CHECK-NEXT:    ret
822   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> splat (i32 4), <16 x i1> splat (i1 true), i32 %evl)
823   ret <16 x i32> %v
826 declare <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
828 define <2 x i64> @vsrl_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
829 ; CHECK-LABEL: vsrl_vv_v2i64:
830 ; CHECK:       # %bb.0:
831 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
832 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
833 ; CHECK-NEXT:    ret
834   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
835   ret <2 x i64> %v
838 define <2 x i64> @vsrl_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
839 ; CHECK-LABEL: vsrl_vv_v2i64_unmasked:
840 ; CHECK:       # %bb.0:
841 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
842 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
843 ; CHECK-NEXT:    ret
844   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
845   ret <2 x i64> %v
848 define <2 x i64> @vsrl_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
849 ; RV32-LABEL: vsrl_vx_v2i64:
850 ; RV32:       # %bb.0:
851 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
852 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
853 ; RV32-NEXT:    ret
855 ; RV64-LABEL: vsrl_vx_v2i64:
856 ; RV64:       # %bb.0:
857 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
858 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
859 ; RV64-NEXT:    ret
860   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
861   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
862   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
863   ret <2 x i64> %v
866 define <2 x i64> @vsrl_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
867 ; RV32-LABEL: vsrl_vx_v2i64_unmasked:
868 ; RV32:       # %bb.0:
869 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
870 ; RV32-NEXT:    vsrl.vx v8, v8, a0
871 ; RV32-NEXT:    ret
873 ; RV64-LABEL: vsrl_vx_v2i64_unmasked:
874 ; RV64:       # %bb.0:
875 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
876 ; RV64-NEXT:    vsrl.vx v8, v8, a0
877 ; RV64-NEXT:    ret
878   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
879   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
880   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
881   ret <2 x i64> %v
884 define <2 x i64> @vsrl_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
885 ; CHECK-LABEL: vsrl_vi_v2i64:
886 ; CHECK:       # %bb.0:
887 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
888 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
889 ; CHECK-NEXT:    ret
890   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> splat (i64 4), <2 x i1> %m, i32 %evl)
891   ret <2 x i64> %v
894 define <2 x i64> @vsrl_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
895 ; CHECK-LABEL: vsrl_vi_v2i64_unmasked:
896 ; CHECK:       # %bb.0:
897 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
898 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
899 ; CHECK-NEXT:    ret
900   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> splat (i64 4), <2 x i1> splat (i1 true), i32 %evl)
901   ret <2 x i64> %v
904 declare <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
906 define <4 x i64> @vsrl_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
907 ; CHECK-LABEL: vsrl_vv_v4i64:
908 ; CHECK:       # %bb.0:
909 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
910 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
911 ; CHECK-NEXT:    ret
912   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
913   ret <4 x i64> %v
916 define <4 x i64> @vsrl_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
917 ; CHECK-LABEL: vsrl_vv_v4i64_unmasked:
918 ; CHECK:       # %bb.0:
919 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
920 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
921 ; CHECK-NEXT:    ret
922   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
923   ret <4 x i64> %v
926 define <4 x i64> @vsrl_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
927 ; RV32-LABEL: vsrl_vx_v4i64:
928 ; RV32:       # %bb.0:
929 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
930 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
931 ; RV32-NEXT:    ret
933 ; RV64-LABEL: vsrl_vx_v4i64:
934 ; RV64:       # %bb.0:
935 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
936 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
937 ; RV64-NEXT:    ret
938   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
939   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
940   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
941   ret <4 x i64> %v
944 define <4 x i64> @vsrl_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
945 ; RV32-LABEL: vsrl_vx_v4i64_unmasked:
946 ; RV32:       # %bb.0:
947 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
948 ; RV32-NEXT:    vsrl.vx v8, v8, a0
949 ; RV32-NEXT:    ret
951 ; RV64-LABEL: vsrl_vx_v4i64_unmasked:
952 ; RV64:       # %bb.0:
953 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
954 ; RV64-NEXT:    vsrl.vx v8, v8, a0
955 ; RV64-NEXT:    ret
956   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
957   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
958   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
959   ret <4 x i64> %v
962 define <4 x i64> @vsrl_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
963 ; CHECK-LABEL: vsrl_vi_v4i64:
964 ; CHECK:       # %bb.0:
965 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
966 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
967 ; CHECK-NEXT:    ret
968   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> splat (i64 4), <4 x i1> %m, i32 %evl)
969   ret <4 x i64> %v
972 define <4 x i64> @vsrl_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
973 ; CHECK-LABEL: vsrl_vi_v4i64_unmasked:
974 ; CHECK:       # %bb.0:
975 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
976 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
977 ; CHECK-NEXT:    ret
978   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> splat (i64 4), <4 x i1> splat (i1 true), i32 %evl)
979   ret <4 x i64> %v
982 declare <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
984 define <8 x i64> @vsrl_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
985 ; CHECK-LABEL: vsrl_vv_v8i64:
986 ; CHECK:       # %bb.0:
987 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
988 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
989 ; CHECK-NEXT:    ret
990   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
991   ret <8 x i64> %v
994 define <8 x i64> @vsrl_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
995 ; CHECK-LABEL: vsrl_vv_v8i64_unmasked:
996 ; CHECK:       # %bb.0:
997 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
998 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
999 ; CHECK-NEXT:    ret
1000   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
1001   ret <8 x i64> %v
1004 define <8 x i64> @vsrl_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1005 ; RV32-LABEL: vsrl_vx_v8i64:
1006 ; RV32:       # %bb.0:
1007 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1008 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1009 ; RV32-NEXT:    ret
1011 ; RV64-LABEL: vsrl_vx_v8i64:
1012 ; RV64:       # %bb.0:
1013 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1014 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1015 ; RV64-NEXT:    ret
1016   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1017   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1018   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1019   ret <8 x i64> %v
1022 define <8 x i64> @vsrl_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1023 ; RV32-LABEL: vsrl_vx_v8i64_unmasked:
1024 ; RV32:       # %bb.0:
1025 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1026 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1027 ; RV32-NEXT:    ret
1029 ; RV64-LABEL: vsrl_vx_v8i64_unmasked:
1030 ; RV64:       # %bb.0:
1031 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1032 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1033 ; RV64-NEXT:    ret
1034   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1035   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1036   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
1037   ret <8 x i64> %v
1040 define <8 x i64> @vsrl_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1041 ; CHECK-LABEL: vsrl_vi_v8i64:
1042 ; CHECK:       # %bb.0:
1043 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1044 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1045 ; CHECK-NEXT:    ret
1046   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), <8 x i1> %m, i32 %evl)
1047   ret <8 x i64> %v
1050 define <8 x i64> @vsrl_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1051 ; CHECK-LABEL: vsrl_vi_v8i64_unmasked:
1052 ; CHECK:       # %bb.0:
1053 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1054 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1055 ; CHECK-NEXT:    ret
1056   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), <8 x i1> splat (i1 true), i32 %evl)
1057   ret <8 x i64> %v
1060 declare <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1062 define <16 x i64> @vsrl_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1063 ; CHECK-LABEL: vsrl_vv_v16i64:
1064 ; CHECK:       # %bb.0:
1065 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1066 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1067 ; CHECK-NEXT:    ret
1068   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1069   ret <16 x i64> %v
1072 define <16 x i64> @vsrl_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1073 ; CHECK-LABEL: vsrl_vv_v16i64_unmasked:
1074 ; CHECK:       # %bb.0:
1075 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1076 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1077 ; CHECK-NEXT:    ret
1078   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
1079   ret <16 x i64> %v
1082 define <16 x i64> @vsrl_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1083 ; RV32-LABEL: vsrl_vx_v16i64:
1084 ; RV32:       # %bb.0:
1085 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1086 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1087 ; RV32-NEXT:    ret
1089 ; RV64-LABEL: vsrl_vx_v16i64:
1090 ; RV64:       # %bb.0:
1091 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1092 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1093 ; RV64-NEXT:    ret
1094   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1095   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1096   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1097   ret <16 x i64> %v
1100 define <16 x i64> @vsrl_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1101 ; RV32-LABEL: vsrl_vx_v16i64_unmasked:
1102 ; RV32:       # %bb.0:
1103 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1104 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1105 ; RV32-NEXT:    ret
1107 ; RV64-LABEL: vsrl_vx_v16i64_unmasked:
1108 ; RV64:       # %bb.0:
1109 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1110 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1111 ; RV64-NEXT:    ret
1112   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1113   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1114   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
1115   ret <16 x i64> %v
1118 define <16 x i64> @vsrl_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1119 ; CHECK-LABEL: vsrl_vi_v16i64:
1120 ; CHECK:       # %bb.0:
1121 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1122 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1123 ; CHECK-NEXT:    ret
1124   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> splat (i64 4), <16 x i1> %m, i32 %evl)
1125   ret <16 x i64> %v
1128 define <16 x i64> @vsrl_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1129 ; CHECK-LABEL: vsrl_vi_v16i64_unmasked:
1130 ; CHECK:       # %bb.0:
1131 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1132 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1133 ; CHECK-NEXT:    ret
1134   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> splat (i64 4), <16 x i1> splat (i1 true), i32 %evl)
1135   ret <16 x i64> %v