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.ashr.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vsra_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsra_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: vadd.vv v8, v8, v8
16 ; CHECK-NEXT: vsra.vi v8, v8, 1
17 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
18 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
20 %v = call <8 x i7> @llvm.vp.ashr.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
24 declare <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
26 define <2 x i8> @vsra_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
27 ; CHECK-LABEL: vsra_vv_v2i8:
29 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
30 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
32 %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
36 define <2 x i8> @vsra_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
37 ; CHECK-LABEL: vsra_vv_v2i8_unmasked:
39 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
40 ; CHECK-NEXT: vsra.vv v8, v8, v9
42 %head = insertelement <2 x i1> poison, i1 true, i32 0
43 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
44 %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
48 define <2 x i8> @vsra_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
49 ; CHECK-LABEL: vsra_vx_v2i8:
51 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
52 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
54 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
55 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
56 %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
60 define <2 x i8> @vsra_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
61 ; CHECK-LABEL: vsra_vx_v2i8_unmasked:
63 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
64 ; CHECK-NEXT: vsra.vx v8, v8, a0
66 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
67 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
68 %head = insertelement <2 x i1> poison, i1 true, i32 0
69 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
70 %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
74 define <2 x i8> @vsra_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
75 ; CHECK-LABEL: vsra_vi_v2i8:
77 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
78 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
80 %elt.head = insertelement <2 x i8> poison, i8 5, i32 0
81 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
82 %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
86 define <2 x i8> @vsra_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
87 ; CHECK-LABEL: vsra_vi_v2i8_unmasked:
89 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
90 ; CHECK-NEXT: vsra.vi v8, v8, 5
92 %elt.head = insertelement <2 x i8> poison, i8 5, i32 0
93 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
94 %head = insertelement <2 x i1> poison, i1 true, i32 0
95 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
96 %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
100 declare <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
102 define <4 x i8> @vsra_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
103 ; CHECK-LABEL: vsra_vv_v4i8:
105 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
106 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
108 %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
112 define <4 x i8> @vsra_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
113 ; CHECK-LABEL: vsra_vv_v4i8_unmasked:
115 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
116 ; CHECK-NEXT: vsra.vv v8, v8, v9
118 %head = insertelement <4 x i1> poison, i1 true, i32 0
119 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
120 %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
124 define <4 x i8> @vsra_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
125 ; CHECK-LABEL: vsra_vx_v4i8:
127 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
128 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
130 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
131 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
132 %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
136 define <4 x i8> @vsra_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
137 ; CHECK-LABEL: vsra_vx_v4i8_unmasked:
139 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
140 ; CHECK-NEXT: vsra.vx v8, v8, a0
142 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
143 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
144 %head = insertelement <4 x i1> poison, i1 true, i32 0
145 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
146 %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
150 define <4 x i8> @vsra_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
151 ; CHECK-LABEL: vsra_vi_v4i8:
153 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
154 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
156 %elt.head = insertelement <4 x i8> poison, i8 5, i32 0
157 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
158 %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
162 define <4 x i8> @vsra_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
163 ; CHECK-LABEL: vsra_vi_v4i8_unmasked:
165 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
166 ; CHECK-NEXT: vsra.vi v8, v8, 5
168 %elt.head = insertelement <4 x i8> poison, i8 5, i32 0
169 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
170 %head = insertelement <4 x i1> poison, i1 true, i32 0
171 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
172 %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
176 declare <7 x i8> @llvm.vp.ashr.v7i8(<7 x i8>, <7 x i8>, <7 x i1>, i32)
178 define <7 x i8> @vsra_vv_v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 zeroext %evl) {
179 ; CHECK-LABEL: vsra_vv_v7i8:
181 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
182 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
184 %v = call <7 x i8> @llvm.vp.ashr.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 %evl)
188 declare <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
190 define <8 x i8> @vsra_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
191 ; CHECK-LABEL: vsra_vv_v8i8:
193 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
194 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
196 %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
200 define <8 x i8> @vsra_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
201 ; CHECK-LABEL: vsra_vv_v8i8_unmasked:
203 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
204 ; CHECK-NEXT: vsra.vv v8, v8, v9
206 %head = insertelement <8 x i1> poison, i1 true, i32 0
207 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
208 %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
212 define <8 x i8> @vsra_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
213 ; CHECK-LABEL: vsra_vx_v8i8:
215 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
216 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
218 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
219 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
220 %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
224 define <8 x i8> @vsra_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
225 ; CHECK-LABEL: vsra_vx_v8i8_unmasked:
227 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
228 ; CHECK-NEXT: vsra.vx v8, v8, a0
230 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
231 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
232 %head = insertelement <8 x i1> poison, i1 true, i32 0
233 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
234 %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
238 define <8 x i8> @vsra_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
239 ; CHECK-LABEL: vsra_vi_v8i8:
241 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
242 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
244 %elt.head = insertelement <8 x i8> poison, i8 5, i32 0
245 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
246 %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
250 define <8 x i8> @vsra_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
251 ; CHECK-LABEL: vsra_vi_v8i8_unmasked:
253 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
254 ; CHECK-NEXT: vsra.vi v8, v8, 5
256 %elt.head = insertelement <8 x i8> poison, i8 5, i32 0
257 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
258 %head = insertelement <8 x i1> poison, i1 true, i32 0
259 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
260 %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
264 declare <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
266 define <16 x i8> @vsra_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
267 ; CHECK-LABEL: vsra_vv_v16i8:
269 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
270 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
272 %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
276 define <16 x i8> @vsra_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
277 ; CHECK-LABEL: vsra_vv_v16i8_unmasked:
279 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
280 ; CHECK-NEXT: vsra.vv v8, v8, v9
282 %head = insertelement <16 x i1> poison, i1 true, i32 0
283 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
284 %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
288 define <16 x i8> @vsra_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
289 ; CHECK-LABEL: vsra_vx_v16i8:
291 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
292 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
294 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
295 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
296 %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
300 define <16 x i8> @vsra_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
301 ; CHECK-LABEL: vsra_vx_v16i8_unmasked:
303 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
304 ; CHECK-NEXT: vsra.vx v8, v8, a0
306 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
307 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
308 %head = insertelement <16 x i1> poison, i1 true, i32 0
309 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
310 %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
314 define <16 x i8> @vsra_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
315 ; CHECK-LABEL: vsra_vi_v16i8:
317 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
318 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
320 %elt.head = insertelement <16 x i8> poison, i8 5, i32 0
321 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
322 %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
326 define <16 x i8> @vsra_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
327 ; CHECK-LABEL: vsra_vi_v16i8_unmasked:
329 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
330 ; CHECK-NEXT: vsra.vi v8, v8, 5
332 %elt.head = insertelement <16 x i8> poison, i8 5, i32 0
333 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
334 %head = insertelement <16 x i1> poison, i1 true, i32 0
335 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
336 %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
340 declare <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
342 define <2 x i16> @vsra_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
343 ; CHECK-LABEL: vsra_vv_v2i16:
345 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
346 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
348 %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
352 define <2 x i16> @vsra_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
353 ; CHECK-LABEL: vsra_vv_v2i16_unmasked:
355 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
356 ; CHECK-NEXT: vsra.vv v8, v8, v9
358 %head = insertelement <2 x i1> poison, i1 true, i32 0
359 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
360 %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
364 define <2 x i16> @vsra_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
365 ; CHECK-LABEL: vsra_vx_v2i16:
367 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
368 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
370 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
371 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
372 %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
376 define <2 x i16> @vsra_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
377 ; CHECK-LABEL: vsra_vx_v2i16_unmasked:
379 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
380 ; CHECK-NEXT: vsra.vx v8, v8, a0
382 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
383 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
384 %head = insertelement <2 x i1> poison, i1 true, i32 0
385 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
386 %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
390 define <2 x i16> @vsra_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
391 ; CHECK-LABEL: vsra_vi_v2i16:
393 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
394 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
396 %elt.head = insertelement <2 x i16> poison, i16 5, i32 0
397 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
398 %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
402 define <2 x i16> @vsra_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
403 ; CHECK-LABEL: vsra_vi_v2i16_unmasked:
405 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
406 ; CHECK-NEXT: vsra.vi v8, v8, 5
408 %elt.head = insertelement <2 x i16> poison, i16 5, i32 0
409 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
410 %head = insertelement <2 x i1> poison, i1 true, i32 0
411 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
412 %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
416 declare <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
418 define <4 x i16> @vsra_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
419 ; CHECK-LABEL: vsra_vv_v4i16:
421 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
422 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
424 %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
428 define <4 x i16> @vsra_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
429 ; CHECK-LABEL: vsra_vv_v4i16_unmasked:
431 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
432 ; CHECK-NEXT: vsra.vv v8, v8, v9
434 %head = insertelement <4 x i1> poison, i1 true, i32 0
435 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
436 %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
440 define <4 x i16> @vsra_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
441 ; CHECK-LABEL: vsra_vx_v4i16:
443 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
444 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
446 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
447 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
448 %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
452 define <4 x i16> @vsra_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
453 ; CHECK-LABEL: vsra_vx_v4i16_unmasked:
455 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
456 ; CHECK-NEXT: vsra.vx v8, v8, a0
458 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
459 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
460 %head = insertelement <4 x i1> poison, i1 true, i32 0
461 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
462 %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
466 define <4 x i16> @vsra_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
467 ; CHECK-LABEL: vsra_vi_v4i16:
469 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
470 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
472 %elt.head = insertelement <4 x i16> poison, i16 5, i32 0
473 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
474 %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
478 define <4 x i16> @vsra_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
479 ; CHECK-LABEL: vsra_vi_v4i16_unmasked:
481 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
482 ; CHECK-NEXT: vsra.vi v8, v8, 5
484 %elt.head = insertelement <4 x i16> poison, i16 5, i32 0
485 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
486 %head = insertelement <4 x i1> poison, i1 true, i32 0
487 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
488 %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
492 declare <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
494 define <8 x i16> @vsra_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
495 ; CHECK-LABEL: vsra_vv_v8i16:
497 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
498 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
500 %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
504 define <8 x i16> @vsra_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
505 ; CHECK-LABEL: vsra_vv_v8i16_unmasked:
507 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
508 ; CHECK-NEXT: vsra.vv v8, v8, v9
510 %head = insertelement <8 x i1> poison, i1 true, i32 0
511 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
512 %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
516 define <8 x i16> @vsra_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
517 ; CHECK-LABEL: vsra_vx_v8i16:
519 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
520 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
522 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
523 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
524 %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
528 define <8 x i16> @vsra_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
529 ; CHECK-LABEL: vsra_vx_v8i16_unmasked:
531 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
532 ; CHECK-NEXT: vsra.vx v8, v8, a0
534 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
535 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
536 %head = insertelement <8 x i1> poison, i1 true, i32 0
537 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
538 %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
542 define <8 x i16> @vsra_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
543 ; CHECK-LABEL: vsra_vi_v8i16:
545 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
546 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
548 %elt.head = insertelement <8 x i16> poison, i16 5, i32 0
549 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
550 %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
554 define <8 x i16> @vsra_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
555 ; CHECK-LABEL: vsra_vi_v8i16_unmasked:
557 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
558 ; CHECK-NEXT: vsra.vi v8, v8, 5
560 %elt.head = insertelement <8 x i16> poison, i16 5, i32 0
561 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
562 %head = insertelement <8 x i1> poison, i1 true, i32 0
563 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
564 %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
568 declare <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
570 define <16 x i16> @vsra_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
571 ; CHECK-LABEL: vsra_vv_v16i16:
573 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
574 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
576 %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
580 define <16 x i16> @vsra_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
581 ; CHECK-LABEL: vsra_vv_v16i16_unmasked:
583 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
584 ; CHECK-NEXT: vsra.vv v8, v8, v10
586 %head = insertelement <16 x i1> poison, i1 true, i32 0
587 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
588 %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
592 define <16 x i16> @vsra_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
593 ; CHECK-LABEL: vsra_vx_v16i16:
595 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
596 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
598 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
599 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
600 %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
604 define <16 x i16> @vsra_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
605 ; CHECK-LABEL: vsra_vx_v16i16_unmasked:
607 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
608 ; CHECK-NEXT: vsra.vx v8, v8, a0
610 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
611 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
612 %head = insertelement <16 x i1> poison, i1 true, i32 0
613 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
614 %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
618 define <16 x i16> @vsra_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
619 ; CHECK-LABEL: vsra_vi_v16i16:
621 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
622 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
624 %elt.head = insertelement <16 x i16> poison, i16 5, i32 0
625 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
626 %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
630 define <16 x i16> @vsra_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
631 ; CHECK-LABEL: vsra_vi_v16i16_unmasked:
633 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
634 ; CHECK-NEXT: vsra.vi v8, v8, 5
636 %elt.head = insertelement <16 x i16> poison, i16 5, i32 0
637 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
638 %head = insertelement <16 x i1> poison, i1 true, i32 0
639 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
640 %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
644 declare <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
646 define <2 x i32> @vsra_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
647 ; CHECK-LABEL: vsra_vv_v2i32:
649 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
650 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
652 %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
656 define <2 x i32> @vsra_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
657 ; CHECK-LABEL: vsra_vv_v2i32_unmasked:
659 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
660 ; CHECK-NEXT: vsra.vv v8, v8, v9
662 %head = insertelement <2 x i1> poison, i1 true, i32 0
663 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
664 %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
668 define <2 x i32> @vsra_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
669 ; CHECK-LABEL: vsra_vx_v2i32:
671 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
672 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
674 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
675 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
676 %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
680 define <2 x i32> @vsra_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
681 ; CHECK-LABEL: vsra_vx_v2i32_unmasked:
683 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
684 ; CHECK-NEXT: vsra.vx v8, v8, a0
686 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
687 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
688 %head = insertelement <2 x i1> poison, i1 true, i32 0
689 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
690 %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
694 define <2 x i32> @vsra_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
695 ; CHECK-LABEL: vsra_vi_v2i32:
697 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
698 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
700 %elt.head = insertelement <2 x i32> poison, i32 5, i32 0
701 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
702 %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
706 define <2 x i32> @vsra_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
707 ; CHECK-LABEL: vsra_vi_v2i32_unmasked:
709 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
710 ; CHECK-NEXT: vsra.vi v8, v8, 5
712 %elt.head = insertelement <2 x i32> poison, i32 5, i32 0
713 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
714 %head = insertelement <2 x i1> poison, i1 true, i32 0
715 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
716 %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
720 declare <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
722 define <4 x i32> @vsra_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
723 ; CHECK-LABEL: vsra_vv_v4i32:
725 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
726 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
728 %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
732 define <4 x i32> @vsra_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
733 ; CHECK-LABEL: vsra_vv_v4i32_unmasked:
735 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
736 ; CHECK-NEXT: vsra.vv v8, v8, v9
738 %head = insertelement <4 x i1> poison, i1 true, i32 0
739 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
740 %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
744 define <4 x i32> @vsra_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
745 ; CHECK-LABEL: vsra_vx_v4i32:
747 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
748 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
750 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
751 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
752 %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
756 define <4 x i32> @vsra_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
757 ; CHECK-LABEL: vsra_vx_v4i32_unmasked:
759 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
760 ; CHECK-NEXT: vsra.vx v8, v8, a0
762 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
763 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
764 %head = insertelement <4 x i1> poison, i1 true, i32 0
765 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
766 %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
770 define <4 x i32> @vsra_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
771 ; CHECK-LABEL: vsra_vi_v4i32:
773 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
774 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
776 %elt.head = insertelement <4 x i32> poison, i32 5, i32 0
777 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
778 %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
782 define <4 x i32> @vsra_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
783 ; CHECK-LABEL: vsra_vi_v4i32_unmasked:
785 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
786 ; CHECK-NEXT: vsra.vi v8, v8, 5
788 %elt.head = insertelement <4 x i32> poison, i32 5, i32 0
789 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
790 %head = insertelement <4 x i1> poison, i1 true, i32 0
791 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
792 %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
796 declare <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
798 define <8 x i32> @vsra_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
799 ; CHECK-LABEL: vsra_vv_v8i32:
801 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
802 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
804 %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
808 define <8 x i32> @vsra_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
809 ; CHECK-LABEL: vsra_vv_v8i32_unmasked:
811 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
812 ; CHECK-NEXT: vsra.vv v8, v8, v10
814 %head = insertelement <8 x i1> poison, i1 true, i32 0
815 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
816 %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
820 define <8 x i32> @vsra_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
821 ; CHECK-LABEL: vsra_vx_v8i32:
823 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
824 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
826 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
827 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
828 %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
832 define <8 x i32> @vsra_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
833 ; CHECK-LABEL: vsra_vx_v8i32_unmasked:
835 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
836 ; CHECK-NEXT: vsra.vx v8, v8, a0
838 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
839 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
840 %head = insertelement <8 x i1> poison, i1 true, i32 0
841 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
842 %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
846 define <8 x i32> @vsra_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
847 ; CHECK-LABEL: vsra_vi_v8i32:
849 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
850 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
852 %elt.head = insertelement <8 x i32> poison, i32 5, i32 0
853 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
854 %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
858 define <8 x i32> @vsra_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
859 ; CHECK-LABEL: vsra_vi_v8i32_unmasked:
861 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
862 ; CHECK-NEXT: vsra.vi v8, v8, 5
864 %elt.head = insertelement <8 x i32> poison, i32 5, i32 0
865 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
866 %head = insertelement <8 x i1> poison, i1 true, i32 0
867 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
868 %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
872 declare <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
874 define <16 x i32> @vsra_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
875 ; CHECK-LABEL: vsra_vv_v16i32:
877 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
878 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
880 %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
884 define <16 x i32> @vsra_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
885 ; CHECK-LABEL: vsra_vv_v16i32_unmasked:
887 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
888 ; CHECK-NEXT: vsra.vv v8, v8, v12
890 %head = insertelement <16 x i1> poison, i1 true, i32 0
891 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
892 %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
896 define <16 x i32> @vsra_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
897 ; CHECK-LABEL: vsra_vx_v16i32:
899 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
900 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
902 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
903 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
904 %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
908 define <16 x i32> @vsra_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
909 ; CHECK-LABEL: vsra_vx_v16i32_unmasked:
911 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
912 ; CHECK-NEXT: vsra.vx v8, v8, a0
914 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
915 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
916 %head = insertelement <16 x i1> poison, i1 true, i32 0
917 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
918 %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
922 define <16 x i32> @vsra_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
923 ; CHECK-LABEL: vsra_vi_v16i32:
925 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
926 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
928 %elt.head = insertelement <16 x i32> poison, i32 5, i32 0
929 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
930 %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
934 define <16 x i32> @vsra_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
935 ; CHECK-LABEL: vsra_vi_v16i32_unmasked:
937 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
938 ; CHECK-NEXT: vsra.vi v8, v8, 5
940 %elt.head = insertelement <16 x i32> poison, i32 5, i32 0
941 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
942 %head = insertelement <16 x i1> poison, i1 true, i32 0
943 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
944 %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
948 declare <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
950 define <2 x i64> @vsra_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
951 ; CHECK-LABEL: vsra_vv_v2i64:
953 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
954 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
956 %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
960 define <2 x i64> @vsra_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
961 ; CHECK-LABEL: vsra_vv_v2i64_unmasked:
963 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
964 ; CHECK-NEXT: vsra.vv v8, v8, v9
966 %head = insertelement <2 x i1> poison, i1 true, i32 0
967 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
968 %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
972 define <2 x i64> @vsra_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
973 ; RV32-LABEL: vsra_vx_v2i64:
975 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
976 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
979 ; RV64-LABEL: vsra_vx_v2i64:
981 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
982 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
984 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
985 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
986 %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
990 define <2 x i64> @vsra_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
991 ; RV32-LABEL: vsra_vx_v2i64_unmasked:
993 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
994 ; RV32-NEXT: vsra.vx v8, v8, a0
997 ; RV64-LABEL: vsra_vx_v2i64_unmasked:
999 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1000 ; RV64-NEXT: vsra.vx v8, v8, a0
1002 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1003 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1004 %head = insertelement <2 x i1> poison, i1 true, i32 0
1005 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1006 %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1010 define <2 x i64> @vsra_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
1011 ; CHECK-LABEL: vsra_vi_v2i64:
1013 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1014 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1016 %elt.head = insertelement <2 x i64> poison, i64 5, i32 0
1017 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1018 %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1022 define <2 x i64> @vsra_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1023 ; CHECK-LABEL: vsra_vi_v2i64_unmasked:
1025 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1026 ; CHECK-NEXT: vsra.vi v8, v8, 5
1028 %elt.head = insertelement <2 x i64> poison, i64 5, i32 0
1029 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1030 %head = insertelement <2 x i1> poison, i1 true, i32 0
1031 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1032 %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1036 declare <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1038 define <4 x i64> @vsra_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
1039 ; CHECK-LABEL: vsra_vv_v4i64:
1041 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1042 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
1044 %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1048 define <4 x i64> @vsra_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
1049 ; CHECK-LABEL: vsra_vv_v4i64_unmasked:
1051 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1052 ; CHECK-NEXT: vsra.vv v8, v8, v10
1054 %head = insertelement <4 x i1> poison, i1 true, i32 0
1055 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1056 %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1060 define <4 x i64> @vsra_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
1061 ; RV32-LABEL: vsra_vx_v4i64:
1063 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1064 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1067 ; RV64-LABEL: vsra_vx_v4i64:
1069 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1070 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1072 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1073 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1074 %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1078 define <4 x i64> @vsra_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
1079 ; RV32-LABEL: vsra_vx_v4i64_unmasked:
1081 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1082 ; RV32-NEXT: vsra.vx v8, v8, a0
1085 ; RV64-LABEL: vsra_vx_v4i64_unmasked:
1087 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1088 ; RV64-NEXT: vsra.vx v8, v8, a0
1090 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1091 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1092 %head = insertelement <4 x i1> poison, i1 true, i32 0
1093 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1094 %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1098 define <4 x i64> @vsra_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1099 ; CHECK-LABEL: vsra_vi_v4i64:
1101 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1102 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1104 %elt.head = insertelement <4 x i64> poison, i64 5, i32 0
1105 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1106 %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1110 define <4 x i64> @vsra_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1111 ; CHECK-LABEL: vsra_vi_v4i64_unmasked:
1113 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1114 ; CHECK-NEXT: vsra.vi v8, v8, 5
1116 %elt.head = insertelement <4 x i64> poison, i64 5, i32 0
1117 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1118 %head = insertelement <4 x i1> poison, i1 true, i32 0
1119 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1120 %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1124 declare <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1126 define <8 x i64> @vsra_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
1127 ; CHECK-LABEL: vsra_vv_v8i64:
1129 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1130 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
1132 %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1136 define <8 x i64> @vsra_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
1137 ; CHECK-LABEL: vsra_vv_v8i64_unmasked:
1139 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1140 ; CHECK-NEXT: vsra.vv v8, v8, v12
1142 %head = insertelement <8 x i1> poison, i1 true, i32 0
1143 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1144 %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1148 define <8 x i64> @vsra_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1149 ; RV32-LABEL: vsra_vx_v8i64:
1151 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1152 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1155 ; RV64-LABEL: vsra_vx_v8i64:
1157 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1158 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1160 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1161 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1162 %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1166 define <8 x i64> @vsra_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1167 ; RV32-LABEL: vsra_vx_v8i64_unmasked:
1169 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1170 ; RV32-NEXT: vsra.vx v8, v8, a0
1173 ; RV64-LABEL: vsra_vx_v8i64_unmasked:
1175 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1176 ; RV64-NEXT: vsra.vx v8, v8, a0
1178 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1179 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1180 %head = insertelement <8 x i1> poison, i1 true, i32 0
1181 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1182 %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1186 define <8 x i64> @vsra_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1187 ; CHECK-LABEL: vsra_vi_v8i64:
1189 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1190 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1192 %elt.head = insertelement <8 x i64> poison, i64 5, i32 0
1193 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1194 %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1198 define <8 x i64> @vsra_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1199 ; CHECK-LABEL: vsra_vi_v8i64_unmasked:
1201 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1202 ; CHECK-NEXT: vsra.vi v8, v8, 5
1204 %elt.head = insertelement <8 x i64> poison, i64 5, i32 0
1205 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1206 %head = insertelement <8 x i1> poison, i1 true, i32 0
1207 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1208 %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1212 declare <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1214 define <16 x i64> @vsra_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1215 ; CHECK-LABEL: vsra_vv_v16i64:
1217 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1218 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1220 %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1224 define <16 x i64> @vsra_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1225 ; CHECK-LABEL: vsra_vv_v16i64_unmasked:
1227 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1228 ; CHECK-NEXT: vsra.vv v8, v8, v16
1230 %head = insertelement <16 x i1> poison, i1 true, i32 0
1231 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1232 %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1236 define <16 x i64> @vsra_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1237 ; RV32-LABEL: vsra_vx_v16i64:
1239 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1240 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1243 ; RV64-LABEL: vsra_vx_v16i64:
1245 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1246 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1248 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1249 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1250 %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1254 define <16 x i64> @vsra_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1255 ; RV32-LABEL: vsra_vx_v16i64_unmasked:
1257 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1258 ; RV32-NEXT: vsra.vx v8, v8, a0
1261 ; RV64-LABEL: vsra_vx_v16i64_unmasked:
1263 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1264 ; RV64-NEXT: vsra.vx v8, v8, a0
1266 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1267 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1268 %head = insertelement <16 x i1> poison, i1 true, i32 0
1269 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1270 %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1274 define <16 x i64> @vsra_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1275 ; CHECK-LABEL: vsra_vi_v16i64:
1277 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1278 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1280 %elt.head = insertelement <16 x i64> poison, i64 5, i32 0
1281 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1282 %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1286 define <16 x i64> @vsra_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1287 ; CHECK-LABEL: vsra_vi_v16i64_unmasked:
1289 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1290 ; CHECK-NEXT: vsra.vi v8, v8, 5
1292 %elt.head = insertelement <16 x i64> poison, i64 5, i32 0
1293 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1294 %head = insertelement <16 x i1> poison, i1 true, i32 0
1295 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1296 %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)