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:
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
19 %v = call <8 x i7> @llvm.vp.lshr.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
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:
28 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
29 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
31 %v = call <2 x i8> @llvm.vp.lshr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
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:
38 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
50 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
51 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
62 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
63 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
76 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
77 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
85 define <2 x i8> @vsrl_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
86 ; CHECK-LABEL: vsrl_vi_v2i8_unmasked:
88 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
89 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
104 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
105 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
107 %v = call <4 x i8> @llvm.vp.lshr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
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:
114 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
115 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
126 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
127 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
138 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
139 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
152 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
153 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
161 define <4 x i8> @vsrl_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
162 ; CHECK-LABEL: vsrl_vi_v4i8_unmasked:
164 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
165 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
180 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
181 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
183 %v = call <7 x i8> @llvm.vp.lshr.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 %evl)
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:
192 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
193 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
195 %v = call <8 x i8> @llvm.vp.lshr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
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:
202 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
203 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
214 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
215 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
226 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
227 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
240 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
241 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
249 define <8 x i8> @vsrl_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
250 ; CHECK-LABEL: vsrl_vi_v8i8_unmasked:
252 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
253 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
268 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
269 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
271 %v = call <16 x i8> @llvm.vp.lshr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
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:
278 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
279 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
290 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
291 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
302 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
303 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
316 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
317 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
325 define <16 x i8> @vsrl_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
326 ; CHECK-LABEL: vsrl_vi_v16i8_unmasked:
328 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
329 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
344 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
345 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
347 %v = call <2 x i16> @llvm.vp.lshr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
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:
354 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
355 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
366 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
367 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
378 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
379 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
392 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
393 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
401 define <2 x i16> @vsrl_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
402 ; CHECK-LABEL: vsrl_vi_v2i16_unmasked:
404 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
405 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
420 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
421 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
423 %v = call <4 x i16> @llvm.vp.lshr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
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:
430 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
431 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
442 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
443 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
454 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
455 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
468 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
469 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
477 define <4 x i16> @vsrl_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
478 ; CHECK-LABEL: vsrl_vi_v4i16_unmasked:
480 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
481 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
496 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
497 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
499 %v = call <8 x i16> @llvm.vp.lshr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
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:
506 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
507 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
518 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
519 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
530 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
531 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
544 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
545 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
553 define <8 x i16> @vsrl_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
554 ; CHECK-LABEL: vsrl_vi_v8i16_unmasked:
556 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
557 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
572 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
573 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
575 %v = call <16 x i16> @llvm.vp.lshr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
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:
582 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
583 ; CHECK-NEXT: vsrl.vv v8, v8, v10
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)
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:
594 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
595 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
606 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
607 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
620 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
621 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
629 define <16 x i16> @vsrl_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
630 ; CHECK-LABEL: vsrl_vi_v16i16_unmasked:
632 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
633 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
648 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
649 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
651 %v = call <2 x i32> @llvm.vp.lshr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
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:
658 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
659 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
670 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
671 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
682 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
683 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
696 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
697 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
705 define <2 x i32> @vsrl_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
706 ; CHECK-LABEL: vsrl_vi_v2i32_unmasked:
708 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
709 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
724 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
725 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
727 %v = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
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:
734 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
735 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
746 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
747 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
758 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
759 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
772 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
773 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
781 define <4 x i32> @vsrl_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
782 ; CHECK-LABEL: vsrl_vi_v4i32_unmasked:
784 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
785 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
800 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
801 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
803 %v = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
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:
810 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
811 ; CHECK-NEXT: vsrl.vv v8, v8, v10
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)
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:
822 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
823 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
834 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
835 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
848 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
849 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
857 define <8 x i32> @vsrl_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
858 ; CHECK-LABEL: vsrl_vi_v8i32_unmasked:
860 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
861 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
876 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
877 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
879 %v = call <16 x i32> @llvm.vp.lshr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
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:
886 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
887 ; CHECK-NEXT: vsrl.vv v8, v8, v12
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)
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:
898 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
899 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
910 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
911 ; CHECK-NEXT: vsrl.vx v8, v8, a0
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)
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:
924 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
925 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
933 define <16 x i32> @vsrl_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
934 ; CHECK-LABEL: vsrl_vi_v16i32_unmasked:
936 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
937 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
952 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
953 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
955 %v = call <2 x i64> @llvm.vp.lshr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
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:
962 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
963 ; CHECK-NEXT: vsrl.vv v8, v8, v9
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)
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:
974 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
975 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
978 ; RV64-LABEL: vsrl_vx_v2i64:
980 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
981 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
992 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
993 ; RV32-NEXT: vsrl.vx v8, v8, a0
996 ; RV64-LABEL: vsrl_vx_v2i64_unmasked:
998 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
999 ; RV64-NEXT: vsrl.vx v8, v8, a0
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)
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:
1012 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1013 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
1021 define <2 x i64> @vsrl_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1022 ; CHECK-LABEL: vsrl_vi_v2i64_unmasked:
1024 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1025 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
1040 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1041 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1043 %v = call <4 x i64> @llvm.vp.lshr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
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:
1050 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1051 ; CHECK-NEXT: vsrl.vv v8, v8, v10
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)
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:
1062 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1063 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1066 ; RV64-LABEL: vsrl_vx_v4i64:
1068 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1069 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
1080 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1081 ; RV32-NEXT: vsrl.vx v8, v8, a0
1084 ; RV64-LABEL: vsrl_vx_v4i64_unmasked:
1086 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1087 ; RV64-NEXT: vsrl.vx v8, v8, a0
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)
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:
1100 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1101 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
1109 define <4 x i64> @vsrl_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1110 ; CHECK-LABEL: vsrl_vi_v4i64_unmasked:
1112 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1113 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
1128 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1129 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1131 %v = call <8 x i64> @llvm.vp.lshr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
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:
1138 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1139 ; CHECK-NEXT: vsrl.vv v8, v8, v12
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)
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:
1150 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1151 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1154 ; RV64-LABEL: vsrl_vx_v8i64:
1156 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1157 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
1168 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1169 ; RV32-NEXT: vsrl.vx v8, v8, a0
1172 ; RV64-LABEL: vsrl_vx_v8i64_unmasked:
1174 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1175 ; RV64-NEXT: vsrl.vx v8, v8, a0
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)
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:
1188 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1189 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
1197 define <8 x i64> @vsrl_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1198 ; CHECK-LABEL: vsrl_vi_v8i64_unmasked:
1200 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1201 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)
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:
1216 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1217 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1219 %v = call <16 x i64> @llvm.vp.lshr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
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:
1226 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1227 ; CHECK-NEXT: vsrl.vv v8, v8, v16
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)
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:
1238 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1239 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1242 ; RV64-LABEL: vsrl_vx_v16i64:
1244 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1245 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
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)
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:
1256 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1257 ; RV32-NEXT: vsrl.vx v8, v8, a0
1260 ; RV64-LABEL: vsrl_vx_v16i64_unmasked:
1262 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1263 ; RV64-NEXT: vsrl.vx v8, v8, a0
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)
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:
1276 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1277 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
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)
1285 define <16 x i64> @vsrl_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1286 ; CHECK-LABEL: vsrl_vi_v16i64_unmasked:
1288 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1289 ; CHECK-NEXT: vsrl.vi v8, v8, 4
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)