Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsrl-vp.ll
blobba3287f744626a56fbec1ef2bc75f13576fb3f04
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:    vsetivli zero, 8, e8, mf2, ta, ma
14 ; CHECK-NEXT:    vand.vx v9, v9, a1
15 ; CHECK-NEXT:    vand.vx v8, v8, a1
16 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
17 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
18 ; CHECK-NEXT:    ret
19   %v = call <8 x i7> @llvm.vp.lshr.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
20   ret <8 x i7> %v
23 declare <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
25 define <2 x i8> @vsrl_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
26 ; CHECK-LABEL: vsrl_vv_v2i8:
27 ; CHECK:       # %bb.0:
28 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
29 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
30 ; CHECK-NEXT:    ret
31   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
32   ret <2 x i8> %v
35 define <2 x i8> @vsrl_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
36 ; CHECK-LABEL: vsrl_vv_v2i8_unmasked:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
40 ; CHECK-NEXT:    ret
41   %head = insertelement <2 x i1> poison, i1 true, i32 0
42   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
43   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
44   ret <2 x i8> %v
47 define <2 x i8> @vsrl_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
48 ; CHECK-LABEL: vsrl_vx_v2i8:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
51 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
52 ; CHECK-NEXT:    ret
53   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
54   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
55   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
56   ret <2 x i8> %v
59 define <2 x i8> @vsrl_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
60 ; CHECK-LABEL: vsrl_vx_v2i8_unmasked:
61 ; CHECK:       # %bb.0:
62 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
63 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
64 ; CHECK-NEXT:    ret
65   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
66   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
67   %head = insertelement <2 x i1> poison, i1 true, i32 0
68   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
69   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
70   ret <2 x i8> %v
73 define <2 x i8> @vsrl_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
74 ; CHECK-LABEL: vsrl_vi_v2i8:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
77 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
78 ; CHECK-NEXT:    ret
79   %elt.head = insertelement <2 x i8> poison, i8 4, i32 0
80   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
81   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
82   ret <2 x i8> %v
85 define <2 x i8> @vsrl_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
86 ; CHECK-LABEL: vsrl_vi_v2i8_unmasked:
87 ; CHECK:       # %bb.0:
88 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
89 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
90 ; CHECK-NEXT:    ret
91   %elt.head = insertelement <2 x i8> poison, i8 4, i32 0
92   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
93   %head = insertelement <2 x i1> poison, i1 true, i32 0
94   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
95   %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
96   ret <2 x i8> %v
99 declare <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
101 define <4 x i8> @vsrl_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
102 ; CHECK-LABEL: vsrl_vv_v4i8:
103 ; CHECK:       # %bb.0:
104 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
105 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
106 ; CHECK-NEXT:    ret
107   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
108   ret <4 x i8> %v
111 define <4 x i8> @vsrl_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
112 ; CHECK-LABEL: vsrl_vv_v4i8_unmasked:
113 ; CHECK:       # %bb.0:
114 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
115 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
116 ; CHECK-NEXT:    ret
117   %head = insertelement <4 x i1> poison, i1 true, i32 0
118   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
119   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
120   ret <4 x i8> %v
123 define <4 x i8> @vsrl_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
124 ; CHECK-LABEL: vsrl_vx_v4i8:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
127 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
128 ; CHECK-NEXT:    ret
129   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
130   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
131   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
132   ret <4 x i8> %v
135 define <4 x i8> @vsrl_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
136 ; CHECK-LABEL: vsrl_vx_v4i8_unmasked:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
139 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
140 ; CHECK-NEXT:    ret
141   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
142   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
143   %head = insertelement <4 x i1> poison, i1 true, i32 0
144   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
145   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
146   ret <4 x i8> %v
149 define <4 x i8> @vsrl_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
150 ; CHECK-LABEL: vsrl_vi_v4i8:
151 ; CHECK:       # %bb.0:
152 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
153 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
154 ; CHECK-NEXT:    ret
155   %elt.head = insertelement <4 x i8> poison, i8 4, i32 0
156   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
157   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
158   ret <4 x i8> %v
161 define <4 x i8> @vsrl_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
162 ; CHECK-LABEL: vsrl_vi_v4i8_unmasked:
163 ; CHECK:       # %bb.0:
164 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
165 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
166 ; CHECK-NEXT:    ret
167   %elt.head = insertelement <4 x i8> poison, i8 4, i32 0
168   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
169   %head = insertelement <4 x i1> poison, i1 true, i32 0
170   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
171   %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
172   ret <4 x i8> %v
175 declare <7 x i8> @llvm.vp.lshr.v7i8(<7 x i8>, <7 x i8>, <7 x i1>, i32)
177 define <7 x i8> @vsrl_vv_v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 zeroext %evl) {
178 ; CHECK-LABEL: vsrl_vv_v7i8:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
181 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
182 ; CHECK-NEXT:    ret
183   %v = call <7 x i8> @llvm.vp.lshr.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 %evl)
184   ret <7 x i8> %v
187 declare <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
189 define <8 x i8> @vsrl_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
190 ; CHECK-LABEL: vsrl_vv_v8i8:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
193 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
194 ; CHECK-NEXT:    ret
195   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
196   ret <8 x i8> %v
199 define <8 x i8> @vsrl_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
200 ; CHECK-LABEL: vsrl_vv_v8i8_unmasked:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
203 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
204 ; CHECK-NEXT:    ret
205   %head = insertelement <8 x i1> poison, i1 true, i32 0
206   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
207   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
208   ret <8 x i8> %v
211 define <8 x i8> @vsrl_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
212 ; CHECK-LABEL: vsrl_vx_v8i8:
213 ; CHECK:       # %bb.0:
214 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
215 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
216 ; CHECK-NEXT:    ret
217   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
218   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
219   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
220   ret <8 x i8> %v
223 define <8 x i8> @vsrl_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
224 ; CHECK-LABEL: vsrl_vx_v8i8_unmasked:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
227 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
228 ; CHECK-NEXT:    ret
229   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
230   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
231   %head = insertelement <8 x i1> poison, i1 true, i32 0
232   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
233   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
234   ret <8 x i8> %v
237 define <8 x i8> @vsrl_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
238 ; CHECK-LABEL: vsrl_vi_v8i8:
239 ; CHECK:       # %bb.0:
240 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
241 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
242 ; CHECK-NEXT:    ret
243   %elt.head = insertelement <8 x i8> poison, i8 4, i32 0
244   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
245   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
246   ret <8 x i8> %v
249 define <8 x i8> @vsrl_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
250 ; CHECK-LABEL: vsrl_vi_v8i8_unmasked:
251 ; CHECK:       # %bb.0:
252 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
253 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
254 ; CHECK-NEXT:    ret
255   %elt.head = insertelement <8 x i8> poison, i8 4, i32 0
256   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
257   %head = insertelement <8 x i1> poison, i1 true, i32 0
258   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
259   %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
260   ret <8 x i8> %v
263 declare <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
265 define <16 x i8> @vsrl_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
266 ; CHECK-LABEL: vsrl_vv_v16i8:
267 ; CHECK:       # %bb.0:
268 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
269 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
270 ; CHECK-NEXT:    ret
271   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
272   ret <16 x i8> %v
275 define <16 x i8> @vsrl_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
276 ; CHECK-LABEL: vsrl_vv_v16i8_unmasked:
277 ; CHECK:       # %bb.0:
278 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
279 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
280 ; CHECK-NEXT:    ret
281   %head = insertelement <16 x i1> poison, i1 true, i32 0
282   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
283   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
284   ret <16 x i8> %v
287 define <16 x i8> @vsrl_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
288 ; CHECK-LABEL: vsrl_vx_v16i8:
289 ; CHECK:       # %bb.0:
290 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
291 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
292 ; CHECK-NEXT:    ret
293   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
294   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
295   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
296   ret <16 x i8> %v
299 define <16 x i8> @vsrl_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
300 ; CHECK-LABEL: vsrl_vx_v16i8_unmasked:
301 ; CHECK:       # %bb.0:
302 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
303 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
304 ; CHECK-NEXT:    ret
305   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
306   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
307   %head = insertelement <16 x i1> poison, i1 true, i32 0
308   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
309   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
310   ret <16 x i8> %v
313 define <16 x i8> @vsrl_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
314 ; CHECK-LABEL: vsrl_vi_v16i8:
315 ; CHECK:       # %bb.0:
316 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
317 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
318 ; CHECK-NEXT:    ret
319   %elt.head = insertelement <16 x i8> poison, i8 4, i32 0
320   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
321   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
322   ret <16 x i8> %v
325 define <16 x i8> @vsrl_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
326 ; CHECK-LABEL: vsrl_vi_v16i8_unmasked:
327 ; CHECK:       # %bb.0:
328 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
329 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
330 ; CHECK-NEXT:    ret
331   %elt.head = insertelement <16 x i8> poison, i8 4, i32 0
332   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
333   %head = insertelement <16 x i1> poison, i1 true, i32 0
334   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
335   %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
336   ret <16 x i8> %v
339 declare <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
341 define <2 x i16> @vsrl_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
342 ; CHECK-LABEL: vsrl_vv_v2i16:
343 ; CHECK:       # %bb.0:
344 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
345 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
346 ; CHECK-NEXT:    ret
347   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
348   ret <2 x i16> %v
351 define <2 x i16> @vsrl_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
352 ; CHECK-LABEL: vsrl_vv_v2i16_unmasked:
353 ; CHECK:       # %bb.0:
354 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
355 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
356 ; CHECK-NEXT:    ret
357   %head = insertelement <2 x i1> poison, i1 true, i32 0
358   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
359   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
360   ret <2 x i16> %v
363 define <2 x i16> @vsrl_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
364 ; CHECK-LABEL: vsrl_vx_v2i16:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
367 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
368 ; CHECK-NEXT:    ret
369   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
370   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
371   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
372   ret <2 x i16> %v
375 define <2 x i16> @vsrl_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
376 ; CHECK-LABEL: vsrl_vx_v2i16_unmasked:
377 ; CHECK:       # %bb.0:
378 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
379 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
380 ; CHECK-NEXT:    ret
381   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
382   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
383   %head = insertelement <2 x i1> poison, i1 true, i32 0
384   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
385   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
386   ret <2 x i16> %v
389 define <2 x i16> @vsrl_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
390 ; CHECK-LABEL: vsrl_vi_v2i16:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
393 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
394 ; CHECK-NEXT:    ret
395   %elt.head = insertelement <2 x i16> poison, i16 4, i32 0
396   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
397   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
398   ret <2 x i16> %v
401 define <2 x i16> @vsrl_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
402 ; CHECK-LABEL: vsrl_vi_v2i16_unmasked:
403 ; CHECK:       # %bb.0:
404 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
405 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
406 ; CHECK-NEXT:    ret
407   %elt.head = insertelement <2 x i16> poison, i16 4, i32 0
408   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
409   %head = insertelement <2 x i1> poison, i1 true, i32 0
410   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
411   %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
412   ret <2 x i16> %v
415 declare <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
417 define <4 x i16> @vsrl_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
418 ; CHECK-LABEL: vsrl_vv_v4i16:
419 ; CHECK:       # %bb.0:
420 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
421 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
422 ; CHECK-NEXT:    ret
423   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
424   ret <4 x i16> %v
427 define <4 x i16> @vsrl_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
428 ; CHECK-LABEL: vsrl_vv_v4i16_unmasked:
429 ; CHECK:       # %bb.0:
430 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
431 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
432 ; CHECK-NEXT:    ret
433   %head = insertelement <4 x i1> poison, i1 true, i32 0
434   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
435   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
436   ret <4 x i16> %v
439 define <4 x i16> @vsrl_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
440 ; CHECK-LABEL: vsrl_vx_v4i16:
441 ; CHECK:       # %bb.0:
442 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
443 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
444 ; CHECK-NEXT:    ret
445   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
446   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
447   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
448   ret <4 x i16> %v
451 define <4 x i16> @vsrl_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
452 ; CHECK-LABEL: vsrl_vx_v4i16_unmasked:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
455 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
456 ; CHECK-NEXT:    ret
457   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
458   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
459   %head = insertelement <4 x i1> poison, i1 true, i32 0
460   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
461   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
462   ret <4 x i16> %v
465 define <4 x i16> @vsrl_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
466 ; CHECK-LABEL: vsrl_vi_v4i16:
467 ; CHECK:       # %bb.0:
468 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
469 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
470 ; CHECK-NEXT:    ret
471   %elt.head = insertelement <4 x i16> poison, i16 4, i32 0
472   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
473   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
474   ret <4 x i16> %v
477 define <4 x i16> @vsrl_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
478 ; CHECK-LABEL: vsrl_vi_v4i16_unmasked:
479 ; CHECK:       # %bb.0:
480 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
481 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
482 ; CHECK-NEXT:    ret
483   %elt.head = insertelement <4 x i16> poison, i16 4, i32 0
484   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
485   %head = insertelement <4 x i1> poison, i1 true, i32 0
486   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
487   %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
488   ret <4 x i16> %v
491 declare <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
493 define <8 x i16> @vsrl_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
494 ; CHECK-LABEL: vsrl_vv_v8i16:
495 ; CHECK:       # %bb.0:
496 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
497 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
498 ; CHECK-NEXT:    ret
499   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
500   ret <8 x i16> %v
503 define <8 x i16> @vsrl_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
504 ; CHECK-LABEL: vsrl_vv_v8i16_unmasked:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
507 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
508 ; CHECK-NEXT:    ret
509   %head = insertelement <8 x i1> poison, i1 true, i32 0
510   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
511   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
512   ret <8 x i16> %v
515 define <8 x i16> @vsrl_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
516 ; CHECK-LABEL: vsrl_vx_v8i16:
517 ; CHECK:       # %bb.0:
518 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
519 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
520 ; CHECK-NEXT:    ret
521   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
522   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
523   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
524   ret <8 x i16> %v
527 define <8 x i16> @vsrl_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
528 ; CHECK-LABEL: vsrl_vx_v8i16_unmasked:
529 ; CHECK:       # %bb.0:
530 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
531 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
532 ; CHECK-NEXT:    ret
533   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
534   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
535   %head = insertelement <8 x i1> poison, i1 true, i32 0
536   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
537   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
538   ret <8 x i16> %v
541 define <8 x i16> @vsrl_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
542 ; CHECK-LABEL: vsrl_vi_v8i16:
543 ; CHECK:       # %bb.0:
544 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
545 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
546 ; CHECK-NEXT:    ret
547   %elt.head = insertelement <8 x i16> poison, i16 4, i32 0
548   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
549   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
550   ret <8 x i16> %v
553 define <8 x i16> @vsrl_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
554 ; CHECK-LABEL: vsrl_vi_v8i16_unmasked:
555 ; CHECK:       # %bb.0:
556 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
557 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
558 ; CHECK-NEXT:    ret
559   %elt.head = insertelement <8 x i16> poison, i16 4, i32 0
560   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
561   %head = insertelement <8 x i1> poison, i1 true, i32 0
562   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
563   %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
564   ret <8 x i16> %v
567 declare <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
569 define <16 x i16> @vsrl_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
570 ; CHECK-LABEL: vsrl_vv_v16i16:
571 ; CHECK:       # %bb.0:
572 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
573 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
574 ; CHECK-NEXT:    ret
575   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
576   ret <16 x i16> %v
579 define <16 x i16> @vsrl_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
580 ; CHECK-LABEL: vsrl_vv_v16i16_unmasked:
581 ; CHECK:       # %bb.0:
582 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
583 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
584 ; CHECK-NEXT:    ret
585   %head = insertelement <16 x i1> poison, i1 true, i32 0
586   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
587   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
588   ret <16 x i16> %v
591 define <16 x i16> @vsrl_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
592 ; CHECK-LABEL: vsrl_vx_v16i16:
593 ; CHECK:       # %bb.0:
594 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
595 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
596 ; CHECK-NEXT:    ret
597   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
598   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
599   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
600   ret <16 x i16> %v
603 define <16 x i16> @vsrl_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
604 ; CHECK-LABEL: vsrl_vx_v16i16_unmasked:
605 ; CHECK:       # %bb.0:
606 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
607 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
608 ; CHECK-NEXT:    ret
609   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
610   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
611   %head = insertelement <16 x i1> poison, i1 true, i32 0
612   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
613   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
614   ret <16 x i16> %v
617 define <16 x i16> @vsrl_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
618 ; CHECK-LABEL: vsrl_vi_v16i16:
619 ; CHECK:       # %bb.0:
620 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
621 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
622 ; CHECK-NEXT:    ret
623   %elt.head = insertelement <16 x i16> poison, i16 4, i32 0
624   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
625   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
626   ret <16 x i16> %v
629 define <16 x i16> @vsrl_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
630 ; CHECK-LABEL: vsrl_vi_v16i16_unmasked:
631 ; CHECK:       # %bb.0:
632 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
633 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
634 ; CHECK-NEXT:    ret
635   %elt.head = insertelement <16 x i16> poison, i16 4, i32 0
636   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
637   %head = insertelement <16 x i1> poison, i1 true, i32 0
638   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
639   %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
640   ret <16 x i16> %v
643 declare <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
645 define <2 x i32> @vsrl_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
646 ; CHECK-LABEL: vsrl_vv_v2i32:
647 ; CHECK:       # %bb.0:
648 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
649 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
650 ; CHECK-NEXT:    ret
651   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
652   ret <2 x i32> %v
655 define <2 x i32> @vsrl_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
656 ; CHECK-LABEL: vsrl_vv_v2i32_unmasked:
657 ; CHECK:       # %bb.0:
658 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
659 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
660 ; CHECK-NEXT:    ret
661   %head = insertelement <2 x i1> poison, i1 true, i32 0
662   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
663   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
664   ret <2 x i32> %v
667 define <2 x i32> @vsrl_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
668 ; CHECK-LABEL: vsrl_vx_v2i32:
669 ; CHECK:       # %bb.0:
670 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
671 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
672 ; CHECK-NEXT:    ret
673   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
674   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
675   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
676   ret <2 x i32> %v
679 define <2 x i32> @vsrl_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
680 ; CHECK-LABEL: vsrl_vx_v2i32_unmasked:
681 ; CHECK:       # %bb.0:
682 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
683 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
684 ; CHECK-NEXT:    ret
685   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
686   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
687   %head = insertelement <2 x i1> poison, i1 true, i32 0
688   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
689   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
690   ret <2 x i32> %v
693 define <2 x i32> @vsrl_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
694 ; CHECK-LABEL: vsrl_vi_v2i32:
695 ; CHECK:       # %bb.0:
696 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
697 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
698 ; CHECK-NEXT:    ret
699   %elt.head = insertelement <2 x i32> poison, i32 4, i32 0
700   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
701   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
702   ret <2 x i32> %v
705 define <2 x i32> @vsrl_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
706 ; CHECK-LABEL: vsrl_vi_v2i32_unmasked:
707 ; CHECK:       # %bb.0:
708 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
709 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
710 ; CHECK-NEXT:    ret
711   %elt.head = insertelement <2 x i32> poison, i32 4, i32 0
712   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
713   %head = insertelement <2 x i1> poison, i1 true, i32 0
714   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
715   %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
716   ret <2 x i32> %v
719 declare <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
721 define <4 x i32> @vsrl_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
722 ; CHECK-LABEL: vsrl_vv_v4i32:
723 ; CHECK:       # %bb.0:
724 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
725 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
726 ; CHECK-NEXT:    ret
727   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
728   ret <4 x i32> %v
731 define <4 x i32> @vsrl_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
732 ; CHECK-LABEL: vsrl_vv_v4i32_unmasked:
733 ; CHECK:       # %bb.0:
734 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
735 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
736 ; CHECK-NEXT:    ret
737   %head = insertelement <4 x i1> poison, i1 true, i32 0
738   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
739   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
740   ret <4 x i32> %v
743 define <4 x i32> @vsrl_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
744 ; CHECK-LABEL: vsrl_vx_v4i32:
745 ; CHECK:       # %bb.0:
746 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
747 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
748 ; CHECK-NEXT:    ret
749   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
750   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
751   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
752   ret <4 x i32> %v
755 define <4 x i32> @vsrl_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
756 ; CHECK-LABEL: vsrl_vx_v4i32_unmasked:
757 ; CHECK:       # %bb.0:
758 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
759 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
760 ; CHECK-NEXT:    ret
761   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
762   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
763   %head = insertelement <4 x i1> poison, i1 true, i32 0
764   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
765   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
766   ret <4 x i32> %v
769 define <4 x i32> @vsrl_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
770 ; CHECK-LABEL: vsrl_vi_v4i32:
771 ; CHECK:       # %bb.0:
772 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
773 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
774 ; CHECK-NEXT:    ret
775   %elt.head = insertelement <4 x i32> poison, i32 4, i32 0
776   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
777   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
778   ret <4 x i32> %v
781 define <4 x i32> @vsrl_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
782 ; CHECK-LABEL: vsrl_vi_v4i32_unmasked:
783 ; CHECK:       # %bb.0:
784 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
785 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
786 ; CHECK-NEXT:    ret
787   %elt.head = insertelement <4 x i32> poison, i32 4, i32 0
788   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
789   %head = insertelement <4 x i1> poison, i1 true, i32 0
790   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
791   %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
792   ret <4 x i32> %v
795 declare <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
797 define <8 x i32> @vsrl_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
798 ; CHECK-LABEL: vsrl_vv_v8i32:
799 ; CHECK:       # %bb.0:
800 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
801 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
802 ; CHECK-NEXT:    ret
803   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
804   ret <8 x i32> %v
807 define <8 x i32> @vsrl_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
808 ; CHECK-LABEL: vsrl_vv_v8i32_unmasked:
809 ; CHECK:       # %bb.0:
810 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
811 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
812 ; CHECK-NEXT:    ret
813   %head = insertelement <8 x i1> poison, i1 true, i32 0
814   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
815   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
816   ret <8 x i32> %v
819 define <8 x i32> @vsrl_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
820 ; CHECK-LABEL: vsrl_vx_v8i32:
821 ; CHECK:       # %bb.0:
822 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
823 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
824 ; CHECK-NEXT:    ret
825   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
826   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
827   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
828   ret <8 x i32> %v
831 define <8 x i32> @vsrl_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
832 ; CHECK-LABEL: vsrl_vx_v8i32_unmasked:
833 ; CHECK:       # %bb.0:
834 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
835 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
836 ; CHECK-NEXT:    ret
837   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
838   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
839   %head = insertelement <8 x i1> poison, i1 true, i32 0
840   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
841   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
842   ret <8 x i32> %v
845 define <8 x i32> @vsrl_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
846 ; CHECK-LABEL: vsrl_vi_v8i32:
847 ; CHECK:       # %bb.0:
848 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
849 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
850 ; CHECK-NEXT:    ret
851   %elt.head = insertelement <8 x i32> poison, i32 4, i32 0
852   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
853   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
854   ret <8 x i32> %v
857 define <8 x i32> @vsrl_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
858 ; CHECK-LABEL: vsrl_vi_v8i32_unmasked:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
861 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
862 ; CHECK-NEXT:    ret
863   %elt.head = insertelement <8 x i32> poison, i32 4, i32 0
864   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
865   %head = insertelement <8 x i1> poison, i1 true, i32 0
866   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
867   %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
868   ret <8 x i32> %v
871 declare <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
873 define <16 x i32> @vsrl_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
874 ; CHECK-LABEL: vsrl_vv_v16i32:
875 ; CHECK:       # %bb.0:
876 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
877 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
878 ; CHECK-NEXT:    ret
879   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
880   ret <16 x i32> %v
883 define <16 x i32> @vsrl_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
884 ; CHECK-LABEL: vsrl_vv_v16i32_unmasked:
885 ; CHECK:       # %bb.0:
886 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
887 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
888 ; CHECK-NEXT:    ret
889   %head = insertelement <16 x i1> poison, i1 true, i32 0
890   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
891   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
892   ret <16 x i32> %v
895 define <16 x i32> @vsrl_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
896 ; CHECK-LABEL: vsrl_vx_v16i32:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
899 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
900 ; CHECK-NEXT:    ret
901   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
902   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
903   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
904   ret <16 x i32> %v
907 define <16 x i32> @vsrl_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
908 ; CHECK-LABEL: vsrl_vx_v16i32_unmasked:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
911 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
912 ; CHECK-NEXT:    ret
913   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
914   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
915   %head = insertelement <16 x i1> poison, i1 true, i32 0
916   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
917   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
918   ret <16 x i32> %v
921 define <16 x i32> @vsrl_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
922 ; CHECK-LABEL: vsrl_vi_v16i32:
923 ; CHECK:       # %bb.0:
924 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
925 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
926 ; CHECK-NEXT:    ret
927   %elt.head = insertelement <16 x i32> poison, i32 4, i32 0
928   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
929   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
930   ret <16 x i32> %v
933 define <16 x i32> @vsrl_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
934 ; CHECK-LABEL: vsrl_vi_v16i32_unmasked:
935 ; CHECK:       # %bb.0:
936 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
937 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
938 ; CHECK-NEXT:    ret
939   %elt.head = insertelement <16 x i32> poison, i32 4, i32 0
940   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
941   %head = insertelement <16 x i1> poison, i1 true, i32 0
942   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
943   %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
944   ret <16 x i32> %v
947 declare <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
949 define <2 x i64> @vsrl_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
950 ; CHECK-LABEL: vsrl_vv_v2i64:
951 ; CHECK:       # %bb.0:
952 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
953 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
954 ; CHECK-NEXT:    ret
955   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
956   ret <2 x i64> %v
959 define <2 x i64> @vsrl_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
960 ; CHECK-LABEL: vsrl_vv_v2i64_unmasked:
961 ; CHECK:       # %bb.0:
962 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
963 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
964 ; CHECK-NEXT:    ret
965   %head = insertelement <2 x i1> poison, i1 true, i32 0
966   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
967   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
968   ret <2 x i64> %v
971 define <2 x i64> @vsrl_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
972 ; RV32-LABEL: vsrl_vx_v2i64:
973 ; RV32:       # %bb.0:
974 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
975 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
976 ; RV32-NEXT:    ret
978 ; RV64-LABEL: vsrl_vx_v2i64:
979 ; RV64:       # %bb.0:
980 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
981 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
982 ; RV64-NEXT:    ret
983   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
984   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
985   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
986   ret <2 x i64> %v
989 define <2 x i64> @vsrl_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
990 ; RV32-LABEL: vsrl_vx_v2i64_unmasked:
991 ; RV32:       # %bb.0:
992 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
993 ; RV32-NEXT:    vsrl.vx v8, v8, a0
994 ; RV32-NEXT:    ret
996 ; RV64-LABEL: vsrl_vx_v2i64_unmasked:
997 ; RV64:       # %bb.0:
998 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
999 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1000 ; RV64-NEXT:    ret
1001   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1002   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1003   %head = insertelement <2 x i1> poison, i1 true, i32 0
1004   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1005   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1006   ret <2 x i64> %v
1009 define <2 x i64> @vsrl_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
1010 ; CHECK-LABEL: vsrl_vi_v2i64:
1011 ; CHECK:       # %bb.0:
1012 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1013 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1014 ; CHECK-NEXT:    ret
1015   %elt.head = insertelement <2 x i64> poison, i64 4, i32 0
1016   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1017   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1018   ret <2 x i64> %v
1021 define <2 x i64> @vsrl_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1022 ; CHECK-LABEL: vsrl_vi_v2i64_unmasked:
1023 ; CHECK:       # %bb.0:
1024 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1025 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1026 ; CHECK-NEXT:    ret
1027   %elt.head = insertelement <2 x i64> poison, i64 4, i32 0
1028   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1029   %head = insertelement <2 x i1> poison, i1 true, i32 0
1030   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1031   %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1032   ret <2 x i64> %v
1035 declare <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1037 define <4 x i64> @vsrl_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
1038 ; CHECK-LABEL: vsrl_vv_v4i64:
1039 ; CHECK:       # %bb.0:
1040 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1041 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1042 ; CHECK-NEXT:    ret
1043   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1044   ret <4 x i64> %v
1047 define <4 x i64> @vsrl_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
1048 ; CHECK-LABEL: vsrl_vv_v4i64_unmasked:
1049 ; CHECK:       # %bb.0:
1050 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1051 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1052 ; CHECK-NEXT:    ret
1053   %head = insertelement <4 x i1> poison, i1 true, i32 0
1054   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1055   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1056   ret <4 x i64> %v
1059 define <4 x i64> @vsrl_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
1060 ; RV32-LABEL: vsrl_vx_v4i64:
1061 ; RV32:       # %bb.0:
1062 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1063 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1064 ; RV32-NEXT:    ret
1066 ; RV64-LABEL: vsrl_vx_v4i64:
1067 ; RV64:       # %bb.0:
1068 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1069 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1070 ; RV64-NEXT:    ret
1071   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1072   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1073   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1074   ret <4 x i64> %v
1077 define <4 x i64> @vsrl_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
1078 ; RV32-LABEL: vsrl_vx_v4i64_unmasked:
1079 ; RV32:       # %bb.0:
1080 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1081 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1082 ; RV32-NEXT:    ret
1084 ; RV64-LABEL: vsrl_vx_v4i64_unmasked:
1085 ; RV64:       # %bb.0:
1086 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1087 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1088 ; RV64-NEXT:    ret
1089   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1090   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1091   %head = insertelement <4 x i1> poison, i1 true, i32 0
1092   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1093   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1094   ret <4 x i64> %v
1097 define <4 x i64> @vsrl_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1098 ; CHECK-LABEL: vsrl_vi_v4i64:
1099 ; CHECK:       # %bb.0:
1100 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1101 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1102 ; CHECK-NEXT:    ret
1103   %elt.head = insertelement <4 x i64> poison, i64 4, i32 0
1104   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1105   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1106   ret <4 x i64> %v
1109 define <4 x i64> @vsrl_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1110 ; CHECK-LABEL: vsrl_vi_v4i64_unmasked:
1111 ; CHECK:       # %bb.0:
1112 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1113 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1114 ; CHECK-NEXT:    ret
1115   %elt.head = insertelement <4 x i64> poison, i64 4, i32 0
1116   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1117   %head = insertelement <4 x i1> poison, i1 true, i32 0
1118   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1119   %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1120   ret <4 x i64> %v
1123 declare <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1125 define <8 x i64> @vsrl_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
1126 ; CHECK-LABEL: vsrl_vv_v8i64:
1127 ; CHECK:       # %bb.0:
1128 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1129 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1130 ; CHECK-NEXT:    ret
1131   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1132   ret <8 x i64> %v
1135 define <8 x i64> @vsrl_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
1136 ; CHECK-LABEL: vsrl_vv_v8i64_unmasked:
1137 ; CHECK:       # %bb.0:
1138 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1139 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1140 ; CHECK-NEXT:    ret
1141   %head = insertelement <8 x i1> poison, i1 true, i32 0
1142   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1143   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1144   ret <8 x i64> %v
1147 define <8 x i64> @vsrl_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1148 ; RV32-LABEL: vsrl_vx_v8i64:
1149 ; RV32:       # %bb.0:
1150 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1151 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1152 ; RV32-NEXT:    ret
1154 ; RV64-LABEL: vsrl_vx_v8i64:
1155 ; RV64:       # %bb.0:
1156 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1157 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1158 ; RV64-NEXT:    ret
1159   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1160   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1161   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1162   ret <8 x i64> %v
1165 define <8 x i64> @vsrl_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1166 ; RV32-LABEL: vsrl_vx_v8i64_unmasked:
1167 ; RV32:       # %bb.0:
1168 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1169 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1170 ; RV32-NEXT:    ret
1172 ; RV64-LABEL: vsrl_vx_v8i64_unmasked:
1173 ; RV64:       # %bb.0:
1174 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1175 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1176 ; RV64-NEXT:    ret
1177   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1178   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1179   %head = insertelement <8 x i1> poison, i1 true, i32 0
1180   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1181   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1182   ret <8 x i64> %v
1185 define <8 x i64> @vsrl_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1186 ; CHECK-LABEL: vsrl_vi_v8i64:
1187 ; CHECK:       # %bb.0:
1188 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1189 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1190 ; CHECK-NEXT:    ret
1191   %elt.head = insertelement <8 x i64> poison, i64 4, i32 0
1192   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1193   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1194   ret <8 x i64> %v
1197 define <8 x i64> @vsrl_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1198 ; CHECK-LABEL: vsrl_vi_v8i64_unmasked:
1199 ; CHECK:       # %bb.0:
1200 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1201 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1202 ; CHECK-NEXT:    ret
1203   %elt.head = insertelement <8 x i64> poison, i64 4, i32 0
1204   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1205   %head = insertelement <8 x i1> poison, i1 true, i32 0
1206   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1207   %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1208   ret <8 x i64> %v
1211 declare <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1213 define <16 x i64> @vsrl_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1214 ; CHECK-LABEL: vsrl_vv_v16i64:
1215 ; CHECK:       # %bb.0:
1216 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1217 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1218 ; CHECK-NEXT:    ret
1219   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1220   ret <16 x i64> %v
1223 define <16 x i64> @vsrl_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1224 ; CHECK-LABEL: vsrl_vv_v16i64_unmasked:
1225 ; CHECK:       # %bb.0:
1226 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1227 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1228 ; CHECK-NEXT:    ret
1229   %head = insertelement <16 x i1> poison, i1 true, i32 0
1230   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1231   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1232   ret <16 x i64> %v
1235 define <16 x i64> @vsrl_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1236 ; RV32-LABEL: vsrl_vx_v16i64:
1237 ; RV32:       # %bb.0:
1238 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1239 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1240 ; RV32-NEXT:    ret
1242 ; RV64-LABEL: vsrl_vx_v16i64:
1243 ; RV64:       # %bb.0:
1244 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1245 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1246 ; RV64-NEXT:    ret
1247   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1248   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1249   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1250   ret <16 x i64> %v
1253 define <16 x i64> @vsrl_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1254 ; RV32-LABEL: vsrl_vx_v16i64_unmasked:
1255 ; RV32:       # %bb.0:
1256 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1257 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1258 ; RV32-NEXT:    ret
1260 ; RV64-LABEL: vsrl_vx_v16i64_unmasked:
1261 ; RV64:       # %bb.0:
1262 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1263 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1264 ; RV64-NEXT:    ret
1265   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1266   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1267   %head = insertelement <16 x i1> poison, i1 true, i32 0
1268   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1269   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1270   ret <16 x i64> %v
1273 define <16 x i64> @vsrl_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1274 ; CHECK-LABEL: vsrl_vi_v16i64:
1275 ; CHECK:       # %bb.0:
1276 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1277 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1278 ; CHECK-NEXT:    ret
1279   %elt.head = insertelement <16 x i64> poison, i64 4, i32 0
1280   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1281   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1282   ret <16 x i64> %v
1285 define <16 x i64> @vsrl_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1286 ; CHECK-LABEL: vsrl_vi_v16i64_unmasked:
1287 ; CHECK:       # %bb.0:
1288 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1289 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1290 ; CHECK-NEXT:    ret
1291   %elt.head = insertelement <16 x i64> poison, i64 4, i32 0
1292   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1293   %head = insertelement <16 x i1> poison, i1 true, i32 0
1294   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1295   %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1296   ret <16 x i64> %v