Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsra-vp.ll
blob180fafa9659b1c12c0be32b32585c3036931a2b5
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:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    li a1, 127
13 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
14 ; CHECK-NEXT:    vand.vx v9, v9, a1, v0.t
15 ; CHECK-NEXT:    vsll.vi v8, v8, 1, v0.t
16 ; CHECK-NEXT:    vsra.vi v8, v8, 1, v0.t
17 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
18 ; CHECK-NEXT:    ret
19   %v = call <8 x i7> @llvm.vp.ashr.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
20   ret <8 x i7> %v
23 declare <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
25 define <2 x i8> @vsra_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
26 ; CHECK-LABEL: vsra_vv_v2i8:
27 ; CHECK:       # %bb.0:
28 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
29 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
30 ; CHECK-NEXT:    ret
31   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
32   ret <2 x i8> %v
35 define <2 x i8> @vsra_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
36 ; CHECK-LABEL: vsra_vv_v2i8_unmasked:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT:    vsra.vv v8, v8, v9
40 ; CHECK-NEXT:    ret
41   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
42   ret <2 x i8> %v
45 define <2 x i8> @vsra_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
46 ; CHECK-LABEL: vsra_vx_v2i8:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
49 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
50 ; CHECK-NEXT:    ret
51   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
52   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
53   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
54   ret <2 x i8> %v
57 define <2 x i8> @vsra_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
58 ; CHECK-LABEL: vsra_vx_v2i8_unmasked:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
61 ; CHECK-NEXT:    vsra.vx v8, v8, a0
62 ; CHECK-NEXT:    ret
63   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
64   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
65   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
66   ret <2 x i8> %v
69 define <2 x i8> @vsra_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
70 ; CHECK-LABEL: vsra_vi_v2i8:
71 ; CHECK:       # %bb.0:
72 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
73 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
74 ; CHECK-NEXT:    ret
75   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> splat (i8 5), <2 x i1> %m, i32 %evl)
76   ret <2 x i8> %v
79 define <2 x i8> @vsra_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
80 ; CHECK-LABEL: vsra_vi_v2i8_unmasked:
81 ; CHECK:       # %bb.0:
82 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
83 ; CHECK-NEXT:    vsra.vi v8, v8, 5
84 ; CHECK-NEXT:    ret
85   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> splat (i8 5), <2 x i1> splat (i1 true), i32 %evl)
86   ret <2 x i8> %v
89 declare <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
91 define <4 x i8> @vsra_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
92 ; CHECK-LABEL: vsra_vv_v4i8:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
95 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
96 ; CHECK-NEXT:    ret
97   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
98   ret <4 x i8> %v
101 define <4 x i8> @vsra_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
102 ; CHECK-LABEL: vsra_vv_v4i8_unmasked:
103 ; CHECK:       # %bb.0:
104 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
105 ; CHECK-NEXT:    vsra.vv v8, v8, v9
106 ; CHECK-NEXT:    ret
107   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
108   ret <4 x i8> %v
111 define <4 x i8> @vsra_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
112 ; CHECK-LABEL: vsra_vx_v4i8:
113 ; CHECK:       # %bb.0:
114 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
115 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
116 ; CHECK-NEXT:    ret
117   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
118   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
119   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
120   ret <4 x i8> %v
123 define <4 x i8> @vsra_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
124 ; CHECK-LABEL: vsra_vx_v4i8_unmasked:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
127 ; CHECK-NEXT:    vsra.vx v8, v8, a0
128 ; CHECK-NEXT:    ret
129   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
130   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
131   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
132   ret <4 x i8> %v
135 define <4 x i8> @vsra_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
136 ; CHECK-LABEL: vsra_vi_v4i8:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
139 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
140 ; CHECK-NEXT:    ret
141   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> splat (i8 5), <4 x i1> %m, i32 %evl)
142   ret <4 x i8> %v
145 define <4 x i8> @vsra_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
146 ; CHECK-LABEL: vsra_vi_v4i8_unmasked:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
149 ; CHECK-NEXT:    vsra.vi v8, v8, 5
150 ; CHECK-NEXT:    ret
151   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> splat (i8 5), <4 x i1> splat (i1 true), i32 %evl)
152   ret <4 x i8> %v
155 declare <7 x i8> @llvm.vp.ashr.v7i8(<7 x i8>, <7 x i8>, <7 x i1>, i32)
157 define <7 x i8> @vsra_vv_v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 zeroext %evl) {
158 ; CHECK-LABEL: vsra_vv_v7i8:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
161 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
162 ; CHECK-NEXT:    ret
163   %v = call <7 x i8> @llvm.vp.ashr.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 %evl)
164   ret <7 x i8> %v
167 declare <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
169 define <8 x i8> @vsra_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
170 ; CHECK-LABEL: vsra_vv_v8i8:
171 ; CHECK:       # %bb.0:
172 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
173 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
174 ; CHECK-NEXT:    ret
175   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
176   ret <8 x i8> %v
179 define <8 x i8> @vsra_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
180 ; CHECK-LABEL: vsra_vv_v8i8_unmasked:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
183 ; CHECK-NEXT:    vsra.vv v8, v8, v9
184 ; CHECK-NEXT:    ret
185   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
186   ret <8 x i8> %v
189 define <8 x i8> @vsra_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
190 ; CHECK-LABEL: vsra_vx_v8i8:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
193 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
194 ; CHECK-NEXT:    ret
195   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
196   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
197   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
198   ret <8 x i8> %v
201 define <8 x i8> @vsra_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
202 ; CHECK-LABEL: vsra_vx_v8i8_unmasked:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
205 ; CHECK-NEXT:    vsra.vx v8, v8, a0
206 ; CHECK-NEXT:    ret
207   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
208   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
209   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
210   ret <8 x i8> %v
213 define <8 x i8> @vsra_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
214 ; CHECK-LABEL: vsra_vi_v8i8:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
217 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
218 ; CHECK-NEXT:    ret
219   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> splat (i8 5), <8 x i1> %m, i32 %evl)
220   ret <8 x i8> %v
223 define <8 x i8> @vsra_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
224 ; CHECK-LABEL: vsra_vi_v8i8_unmasked:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
227 ; CHECK-NEXT:    vsra.vi v8, v8, 5
228 ; CHECK-NEXT:    ret
229   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> splat (i8 5), <8 x i1> splat (i1 true), i32 %evl)
230   ret <8 x i8> %v
233 declare <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
235 define <16 x i8> @vsra_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
236 ; CHECK-LABEL: vsra_vv_v16i8:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
239 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
240 ; CHECK-NEXT:    ret
241   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
242   ret <16 x i8> %v
245 define <16 x i8> @vsra_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
246 ; CHECK-LABEL: vsra_vv_v16i8_unmasked:
247 ; CHECK:       # %bb.0:
248 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
249 ; CHECK-NEXT:    vsra.vv v8, v8, v9
250 ; CHECK-NEXT:    ret
251   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
252   ret <16 x i8> %v
255 define <16 x i8> @vsra_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
256 ; CHECK-LABEL: vsra_vx_v16i8:
257 ; CHECK:       # %bb.0:
258 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
259 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
260 ; CHECK-NEXT:    ret
261   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
262   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
263   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
264   ret <16 x i8> %v
267 define <16 x i8> @vsra_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
268 ; CHECK-LABEL: vsra_vx_v16i8_unmasked:
269 ; CHECK:       # %bb.0:
270 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
271 ; CHECK-NEXT:    vsra.vx v8, v8, a0
272 ; CHECK-NEXT:    ret
273   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
274   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
275   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
276   ret <16 x i8> %v
279 define <16 x i8> @vsra_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
280 ; CHECK-LABEL: vsra_vi_v16i8:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
283 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
284 ; CHECK-NEXT:    ret
285   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> splat (i8 5), <16 x i1> %m, i32 %evl)
286   ret <16 x i8> %v
289 define <16 x i8> @vsra_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
290 ; CHECK-LABEL: vsra_vi_v16i8_unmasked:
291 ; CHECK:       # %bb.0:
292 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
293 ; CHECK-NEXT:    vsra.vi v8, v8, 5
294 ; CHECK-NEXT:    ret
295   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> splat (i8 5), <16 x i1> splat (i1 true), i32 %evl)
296   ret <16 x i8> %v
299 declare <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
301 define <2 x i16> @vsra_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
302 ; CHECK-LABEL: vsra_vv_v2i16:
303 ; CHECK:       # %bb.0:
304 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
305 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
306 ; CHECK-NEXT:    ret
307   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
308   ret <2 x i16> %v
311 define <2 x i16> @vsra_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
312 ; CHECK-LABEL: vsra_vv_v2i16_unmasked:
313 ; CHECK:       # %bb.0:
314 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
315 ; CHECK-NEXT:    vsra.vv v8, v8, v9
316 ; CHECK-NEXT:    ret
317   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
318   ret <2 x i16> %v
321 define <2 x i16> @vsra_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
322 ; CHECK-LABEL: vsra_vx_v2i16:
323 ; CHECK:       # %bb.0:
324 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
325 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
326 ; CHECK-NEXT:    ret
327   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
328   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
329   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
330   ret <2 x i16> %v
333 define <2 x i16> @vsra_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
334 ; CHECK-LABEL: vsra_vx_v2i16_unmasked:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
337 ; CHECK-NEXT:    vsra.vx v8, v8, a0
338 ; CHECK-NEXT:    ret
339   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
340   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
341   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
342   ret <2 x i16> %v
345 define <2 x i16> @vsra_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
346 ; CHECK-LABEL: vsra_vi_v2i16:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
349 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
350 ; CHECK-NEXT:    ret
351   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> splat (i16 5), <2 x i1> %m, i32 %evl)
352   ret <2 x i16> %v
355 define <2 x i16> @vsra_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
356 ; CHECK-LABEL: vsra_vi_v2i16_unmasked:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
359 ; CHECK-NEXT:    vsra.vi v8, v8, 5
360 ; CHECK-NEXT:    ret
361   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> splat (i16 5), <2 x i1> splat (i1 true), i32 %evl)
362   ret <2 x i16> %v
365 declare <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
367 define <4 x i16> @vsra_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
368 ; CHECK-LABEL: vsra_vv_v4i16:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
371 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
372 ; CHECK-NEXT:    ret
373   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
374   ret <4 x i16> %v
377 define <4 x i16> @vsra_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
378 ; CHECK-LABEL: vsra_vv_v4i16_unmasked:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
381 ; CHECK-NEXT:    vsra.vv v8, v8, v9
382 ; CHECK-NEXT:    ret
383   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
384   ret <4 x i16> %v
387 define <4 x i16> @vsra_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
388 ; CHECK-LABEL: vsra_vx_v4i16:
389 ; CHECK:       # %bb.0:
390 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
391 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
392 ; CHECK-NEXT:    ret
393   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
394   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
395   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
396   ret <4 x i16> %v
399 define <4 x i16> @vsra_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
400 ; CHECK-LABEL: vsra_vx_v4i16_unmasked:
401 ; CHECK:       # %bb.0:
402 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
403 ; CHECK-NEXT:    vsra.vx v8, v8, a0
404 ; CHECK-NEXT:    ret
405   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
406   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
407   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
408   ret <4 x i16> %v
411 define <4 x i16> @vsra_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
412 ; CHECK-LABEL: vsra_vi_v4i16:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
415 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
416 ; CHECK-NEXT:    ret
417   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> splat (i16 5), <4 x i1> %m, i32 %evl)
418   ret <4 x i16> %v
421 define <4 x i16> @vsra_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
422 ; CHECK-LABEL: vsra_vi_v4i16_unmasked:
423 ; CHECK:       # %bb.0:
424 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
425 ; CHECK-NEXT:    vsra.vi v8, v8, 5
426 ; CHECK-NEXT:    ret
427   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> splat (i16 5), <4 x i1> splat (i1 true), i32 %evl)
428   ret <4 x i16> %v
431 declare <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
433 define <8 x i16> @vsra_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
434 ; CHECK-LABEL: vsra_vv_v8i16:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
437 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
438 ; CHECK-NEXT:    ret
439   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
440   ret <8 x i16> %v
443 define <8 x i16> @vsra_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
444 ; CHECK-LABEL: vsra_vv_v8i16_unmasked:
445 ; CHECK:       # %bb.0:
446 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
447 ; CHECK-NEXT:    vsra.vv v8, v8, v9
448 ; CHECK-NEXT:    ret
449   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
450   ret <8 x i16> %v
453 define <8 x i16> @vsra_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
454 ; CHECK-LABEL: vsra_vx_v8i16:
455 ; CHECK:       # %bb.0:
456 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
457 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
458 ; CHECK-NEXT:    ret
459   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
460   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
461   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
462   ret <8 x i16> %v
465 define <8 x i16> @vsra_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
466 ; CHECK-LABEL: vsra_vx_v8i16_unmasked:
467 ; CHECK:       # %bb.0:
468 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
469 ; CHECK-NEXT:    vsra.vx v8, v8, a0
470 ; CHECK-NEXT:    ret
471   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
472   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
473   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
474   ret <8 x i16> %v
477 define <8 x i16> @vsra_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
478 ; CHECK-LABEL: vsra_vi_v8i16:
479 ; CHECK:       # %bb.0:
480 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
481 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
482 ; CHECK-NEXT:    ret
483   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> splat (i16 5), <8 x i1> %m, i32 %evl)
484   ret <8 x i16> %v
487 define <8 x i16> @vsra_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
488 ; CHECK-LABEL: vsra_vi_v8i16_unmasked:
489 ; CHECK:       # %bb.0:
490 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
491 ; CHECK-NEXT:    vsra.vi v8, v8, 5
492 ; CHECK-NEXT:    ret
493   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> splat (i16 5), <8 x i1> splat (i1 true), i32 %evl)
494   ret <8 x i16> %v
497 declare <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
499 define <16 x i16> @vsra_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
500 ; CHECK-LABEL: vsra_vv_v16i16:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
503 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
504 ; CHECK-NEXT:    ret
505   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
506   ret <16 x i16> %v
509 define <16 x i16> @vsra_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
510 ; CHECK-LABEL: vsra_vv_v16i16_unmasked:
511 ; CHECK:       # %bb.0:
512 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
513 ; CHECK-NEXT:    vsra.vv v8, v8, v10
514 ; CHECK-NEXT:    ret
515   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
516   ret <16 x i16> %v
519 define <16 x i16> @vsra_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
520 ; CHECK-LABEL: vsra_vx_v16i16:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
523 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
524 ; CHECK-NEXT:    ret
525   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
526   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
527   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
528   ret <16 x i16> %v
531 define <16 x i16> @vsra_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
532 ; CHECK-LABEL: vsra_vx_v16i16_unmasked:
533 ; CHECK:       # %bb.0:
534 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
535 ; CHECK-NEXT:    vsra.vx v8, v8, a0
536 ; CHECK-NEXT:    ret
537   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
538   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
539   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
540   ret <16 x i16> %v
543 define <16 x i16> @vsra_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
544 ; CHECK-LABEL: vsra_vi_v16i16:
545 ; CHECK:       # %bb.0:
546 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
547 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
548 ; CHECK-NEXT:    ret
549   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> splat (i16 5), <16 x i1> %m, i32 %evl)
550   ret <16 x i16> %v
553 define <16 x i16> @vsra_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
554 ; CHECK-LABEL: vsra_vi_v16i16_unmasked:
555 ; CHECK:       # %bb.0:
556 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
557 ; CHECK-NEXT:    vsra.vi v8, v8, 5
558 ; CHECK-NEXT:    ret
559   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> splat (i16 5), <16 x i1> splat (i1 true), i32 %evl)
560   ret <16 x i16> %v
563 declare <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
565 define <2 x i32> @vsra_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
566 ; CHECK-LABEL: vsra_vv_v2i32:
567 ; CHECK:       # %bb.0:
568 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
569 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
570 ; CHECK-NEXT:    ret
571   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
572   ret <2 x i32> %v
575 define <2 x i32> @vsra_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
576 ; CHECK-LABEL: vsra_vv_v2i32_unmasked:
577 ; CHECK:       # %bb.0:
578 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
579 ; CHECK-NEXT:    vsra.vv v8, v8, v9
580 ; CHECK-NEXT:    ret
581   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
582   ret <2 x i32> %v
585 define <2 x i32> @vsra_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
586 ; CHECK-LABEL: vsra_vx_v2i32:
587 ; CHECK:       # %bb.0:
588 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
589 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
590 ; CHECK-NEXT:    ret
591   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
592   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
593   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
594   ret <2 x i32> %v
597 define <2 x i32> @vsra_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
598 ; CHECK-LABEL: vsra_vx_v2i32_unmasked:
599 ; CHECK:       # %bb.0:
600 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
601 ; CHECK-NEXT:    vsra.vx v8, v8, a0
602 ; CHECK-NEXT:    ret
603   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
604   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
605   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
606   ret <2 x i32> %v
609 define <2 x i32> @vsra_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
610 ; CHECK-LABEL: vsra_vi_v2i32:
611 ; CHECK:       # %bb.0:
612 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
613 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
614 ; CHECK-NEXT:    ret
615   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> splat (i32 5), <2 x i1> %m, i32 %evl)
616   ret <2 x i32> %v
619 define <2 x i32> @vsra_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
620 ; CHECK-LABEL: vsra_vi_v2i32_unmasked:
621 ; CHECK:       # %bb.0:
622 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
623 ; CHECK-NEXT:    vsra.vi v8, v8, 5
624 ; CHECK-NEXT:    ret
625   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> splat (i32 5), <2 x i1> splat (i1 true), i32 %evl)
626   ret <2 x i32> %v
629 declare <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
631 define <4 x i32> @vsra_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
632 ; CHECK-LABEL: vsra_vv_v4i32:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
635 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
636 ; CHECK-NEXT:    ret
637   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
638   ret <4 x i32> %v
641 define <4 x i32> @vsra_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
642 ; CHECK-LABEL: vsra_vv_v4i32_unmasked:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
645 ; CHECK-NEXT:    vsra.vv v8, v8, v9
646 ; CHECK-NEXT:    ret
647   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
648   ret <4 x i32> %v
651 define <4 x i32> @vsra_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
652 ; CHECK-LABEL: vsra_vx_v4i32:
653 ; CHECK:       # %bb.0:
654 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
655 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
656 ; CHECK-NEXT:    ret
657   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
658   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
659   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
660   ret <4 x i32> %v
663 define <4 x i32> @vsra_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
664 ; CHECK-LABEL: vsra_vx_v4i32_unmasked:
665 ; CHECK:       # %bb.0:
666 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
667 ; CHECK-NEXT:    vsra.vx v8, v8, a0
668 ; CHECK-NEXT:    ret
669   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
670   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
671   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
672   ret <4 x i32> %v
675 define <4 x i32> @vsra_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
676 ; CHECK-LABEL: vsra_vi_v4i32:
677 ; CHECK:       # %bb.0:
678 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
679 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
680 ; CHECK-NEXT:    ret
681   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> splat (i32 5), <4 x i1> %m, i32 %evl)
682   ret <4 x i32> %v
685 define <4 x i32> @vsra_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
686 ; CHECK-LABEL: vsra_vi_v4i32_unmasked:
687 ; CHECK:       # %bb.0:
688 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
689 ; CHECK-NEXT:    vsra.vi v8, v8, 5
690 ; CHECK-NEXT:    ret
691   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> splat (i32 5), <4 x i1> splat (i1 true), i32 %evl)
692   ret <4 x i32> %v
695 declare <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
697 define <8 x i32> @vsra_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
698 ; CHECK-LABEL: vsra_vv_v8i32:
699 ; CHECK:       # %bb.0:
700 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
701 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
702 ; CHECK-NEXT:    ret
703   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
704   ret <8 x i32> %v
707 define <8 x i32> @vsra_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
708 ; CHECK-LABEL: vsra_vv_v8i32_unmasked:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
711 ; CHECK-NEXT:    vsra.vv v8, v8, v10
712 ; CHECK-NEXT:    ret
713   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
714   ret <8 x i32> %v
717 define <8 x i32> @vsra_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
718 ; CHECK-LABEL: vsra_vx_v8i32:
719 ; CHECK:       # %bb.0:
720 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
721 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
722 ; CHECK-NEXT:    ret
723   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
724   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
725   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
726   ret <8 x i32> %v
729 define <8 x i32> @vsra_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
730 ; CHECK-LABEL: vsra_vx_v8i32_unmasked:
731 ; CHECK:       # %bb.0:
732 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
733 ; CHECK-NEXT:    vsra.vx v8, v8, a0
734 ; CHECK-NEXT:    ret
735   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
736   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
737   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
738   ret <8 x i32> %v
741 define <8 x i32> @vsra_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
742 ; CHECK-LABEL: vsra_vi_v8i32:
743 ; CHECK:       # %bb.0:
744 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
745 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
746 ; CHECK-NEXT:    ret
747   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> splat (i32 5), <8 x i1> %m, i32 %evl)
748   ret <8 x i32> %v
751 define <8 x i32> @vsra_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
752 ; CHECK-LABEL: vsra_vi_v8i32_unmasked:
753 ; CHECK:       # %bb.0:
754 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
755 ; CHECK-NEXT:    vsra.vi v8, v8, 5
756 ; CHECK-NEXT:    ret
757   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> splat (i32 5), <8 x i1> splat (i1 true), i32 %evl)
758   ret <8 x i32> %v
761 declare <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
763 define <16 x i32> @vsra_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
764 ; CHECK-LABEL: vsra_vv_v16i32:
765 ; CHECK:       # %bb.0:
766 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
767 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
768 ; CHECK-NEXT:    ret
769   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
770   ret <16 x i32> %v
773 define <16 x i32> @vsra_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
774 ; CHECK-LABEL: vsra_vv_v16i32_unmasked:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
777 ; CHECK-NEXT:    vsra.vv v8, v8, v12
778 ; CHECK-NEXT:    ret
779   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
780   ret <16 x i32> %v
783 define <16 x i32> @vsra_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
784 ; CHECK-LABEL: vsra_vx_v16i32:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
787 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
788 ; CHECK-NEXT:    ret
789   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
790   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
791   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
792   ret <16 x i32> %v
795 define <16 x i32> @vsra_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
796 ; CHECK-LABEL: vsra_vx_v16i32_unmasked:
797 ; CHECK:       # %bb.0:
798 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
799 ; CHECK-NEXT:    vsra.vx v8, v8, a0
800 ; CHECK-NEXT:    ret
801   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
802   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
803   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
804   ret <16 x i32> %v
807 define <16 x i32> @vsra_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
808 ; CHECK-LABEL: vsra_vi_v16i32:
809 ; CHECK:       # %bb.0:
810 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
811 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
812 ; CHECK-NEXT:    ret
813   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> splat (i32 5), <16 x i1> %m, i32 %evl)
814   ret <16 x i32> %v
817 define <16 x i32> @vsra_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
818 ; CHECK-LABEL: vsra_vi_v16i32_unmasked:
819 ; CHECK:       # %bb.0:
820 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
821 ; CHECK-NEXT:    vsra.vi v8, v8, 5
822 ; CHECK-NEXT:    ret
823   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> splat (i32 5), <16 x i1> splat (i1 true), i32 %evl)
824   ret <16 x i32> %v
827 declare <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
829 define <2 x i64> @vsra_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
830 ; CHECK-LABEL: vsra_vv_v2i64:
831 ; CHECK:       # %bb.0:
832 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
833 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
834 ; CHECK-NEXT:    ret
835   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
836   ret <2 x i64> %v
839 define <2 x i64> @vsra_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
840 ; CHECK-LABEL: vsra_vv_v2i64_unmasked:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
843 ; CHECK-NEXT:    vsra.vv v8, v8, v9
844 ; CHECK-NEXT:    ret
845   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
846   ret <2 x i64> %v
849 define <2 x i64> @vsra_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
850 ; RV32-LABEL: vsra_vx_v2i64:
851 ; RV32:       # %bb.0:
852 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
853 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
854 ; RV32-NEXT:    ret
856 ; RV64-LABEL: vsra_vx_v2i64:
857 ; RV64:       # %bb.0:
858 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
859 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
860 ; RV64-NEXT:    ret
861   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
862   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
863   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
864   ret <2 x i64> %v
867 define <2 x i64> @vsra_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
868 ; RV32-LABEL: vsra_vx_v2i64_unmasked:
869 ; RV32:       # %bb.0:
870 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
871 ; RV32-NEXT:    vsra.vx v8, v8, a0
872 ; RV32-NEXT:    ret
874 ; RV64-LABEL: vsra_vx_v2i64_unmasked:
875 ; RV64:       # %bb.0:
876 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
877 ; RV64-NEXT:    vsra.vx v8, v8, a0
878 ; RV64-NEXT:    ret
879   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
880   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
881   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
882   ret <2 x i64> %v
885 define <2 x i64> @vsra_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
886 ; CHECK-LABEL: vsra_vi_v2i64:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
889 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
890 ; CHECK-NEXT:    ret
891   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> splat (i64 5), <2 x i1> %m, i32 %evl)
892   ret <2 x i64> %v
895 define <2 x i64> @vsra_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
896 ; CHECK-LABEL: vsra_vi_v2i64_unmasked:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
899 ; CHECK-NEXT:    vsra.vi v8, v8, 5
900 ; CHECK-NEXT:    ret
901   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> splat (i64 5), <2 x i1> splat (i1 true), i32 %evl)
902   ret <2 x i64> %v
905 declare <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
907 define <4 x i64> @vsra_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
908 ; CHECK-LABEL: vsra_vv_v4i64:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
911 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
912 ; CHECK-NEXT:    ret
913   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
914   ret <4 x i64> %v
917 define <4 x i64> @vsra_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
918 ; CHECK-LABEL: vsra_vv_v4i64_unmasked:
919 ; CHECK:       # %bb.0:
920 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
921 ; CHECK-NEXT:    vsra.vv v8, v8, v10
922 ; CHECK-NEXT:    ret
923   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
924   ret <4 x i64> %v
927 define <4 x i64> @vsra_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
928 ; RV32-LABEL: vsra_vx_v4i64:
929 ; RV32:       # %bb.0:
930 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
931 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
932 ; RV32-NEXT:    ret
934 ; RV64-LABEL: vsra_vx_v4i64:
935 ; RV64:       # %bb.0:
936 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
937 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
938 ; RV64-NEXT:    ret
939   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
940   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
941   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
942   ret <4 x i64> %v
945 define <4 x i64> @vsra_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
946 ; RV32-LABEL: vsra_vx_v4i64_unmasked:
947 ; RV32:       # %bb.0:
948 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
949 ; RV32-NEXT:    vsra.vx v8, v8, a0
950 ; RV32-NEXT:    ret
952 ; RV64-LABEL: vsra_vx_v4i64_unmasked:
953 ; RV64:       # %bb.0:
954 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
955 ; RV64-NEXT:    vsra.vx v8, v8, a0
956 ; RV64-NEXT:    ret
957   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
958   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
959   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
960   ret <4 x i64> %v
963 define <4 x i64> @vsra_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
964 ; CHECK-LABEL: vsra_vi_v4i64:
965 ; CHECK:       # %bb.0:
966 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
967 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
968 ; CHECK-NEXT:    ret
969   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> splat (i64 5), <4 x i1> %m, i32 %evl)
970   ret <4 x i64> %v
973 define <4 x i64> @vsra_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
974 ; CHECK-LABEL: vsra_vi_v4i64_unmasked:
975 ; CHECK:       # %bb.0:
976 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
977 ; CHECK-NEXT:    vsra.vi v8, v8, 5
978 ; CHECK-NEXT:    ret
979   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> splat (i64 5), <4 x i1> splat (i1 true), i32 %evl)
980   ret <4 x i64> %v
983 declare <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
985 define <8 x i64> @vsra_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
986 ; CHECK-LABEL: vsra_vv_v8i64:
987 ; CHECK:       # %bb.0:
988 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
989 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
990 ; CHECK-NEXT:    ret
991   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
992   ret <8 x i64> %v
995 define <8 x i64> @vsra_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
996 ; CHECK-LABEL: vsra_vv_v8i64_unmasked:
997 ; CHECK:       # %bb.0:
998 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
999 ; CHECK-NEXT:    vsra.vv v8, v8, v12
1000 ; CHECK-NEXT:    ret
1001   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
1002   ret <8 x i64> %v
1005 define <8 x i64> @vsra_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1006 ; RV32-LABEL: vsra_vx_v8i64:
1007 ; RV32:       # %bb.0:
1008 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1009 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1010 ; RV32-NEXT:    ret
1012 ; RV64-LABEL: vsra_vx_v8i64:
1013 ; RV64:       # %bb.0:
1014 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1015 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1016 ; RV64-NEXT:    ret
1017   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1018   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1019   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1020   ret <8 x i64> %v
1023 define <8 x i64> @vsra_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1024 ; RV32-LABEL: vsra_vx_v8i64_unmasked:
1025 ; RV32:       # %bb.0:
1026 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1027 ; RV32-NEXT:    vsra.vx v8, v8, a0
1028 ; RV32-NEXT:    ret
1030 ; RV64-LABEL: vsra_vx_v8i64_unmasked:
1031 ; RV64:       # %bb.0:
1032 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1033 ; RV64-NEXT:    vsra.vx v8, v8, a0
1034 ; RV64-NEXT:    ret
1035   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1036   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1037   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
1038   ret <8 x i64> %v
1041 define <8 x i64> @vsra_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1042 ; CHECK-LABEL: vsra_vi_v8i64:
1043 ; CHECK:       # %bb.0:
1044 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1045 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1046 ; CHECK-NEXT:    ret
1047   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> splat (i64 5), <8 x i1> %m, i32 %evl)
1048   ret <8 x i64> %v
1051 define <8 x i64> @vsra_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1052 ; CHECK-LABEL: vsra_vi_v8i64_unmasked:
1053 ; CHECK:       # %bb.0:
1054 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1055 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1056 ; CHECK-NEXT:    ret
1057   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> splat (i64 5), <8 x i1> splat (i1 true), i32 %evl)
1058   ret <8 x i64> %v
1061 declare <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1063 define <16 x i64> @vsra_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1064 ; CHECK-LABEL: vsra_vv_v16i64:
1065 ; CHECK:       # %bb.0:
1066 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1067 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
1068 ; CHECK-NEXT:    ret
1069   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1070   ret <16 x i64> %v
1073 define <16 x i64> @vsra_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1074 ; CHECK-LABEL: vsra_vv_v16i64_unmasked:
1075 ; CHECK:       # %bb.0:
1076 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1077 ; CHECK-NEXT:    vsra.vv v8, v8, v16
1078 ; CHECK-NEXT:    ret
1079   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
1080   ret <16 x i64> %v
1083 define <16 x i64> @vsra_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1084 ; RV32-LABEL: vsra_vx_v16i64:
1085 ; RV32:       # %bb.0:
1086 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1087 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1088 ; RV32-NEXT:    ret
1090 ; RV64-LABEL: vsra_vx_v16i64:
1091 ; RV64:       # %bb.0:
1092 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1093 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1094 ; RV64-NEXT:    ret
1095   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1096   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1097   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1098   ret <16 x i64> %v
1101 define <16 x i64> @vsra_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1102 ; RV32-LABEL: vsra_vx_v16i64_unmasked:
1103 ; RV32:       # %bb.0:
1104 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1105 ; RV32-NEXT:    vsra.vx v8, v8, a0
1106 ; RV32-NEXT:    ret
1108 ; RV64-LABEL: vsra_vx_v16i64_unmasked:
1109 ; RV64:       # %bb.0:
1110 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1111 ; RV64-NEXT:    vsra.vx v8, v8, a0
1112 ; RV64-NEXT:    ret
1113   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1114   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1115   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
1116   ret <16 x i64> %v
1119 define <16 x i64> @vsra_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1120 ; CHECK-LABEL: vsra_vi_v16i64:
1121 ; CHECK:       # %bb.0:
1122 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1123 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1124 ; CHECK-NEXT:    ret
1125   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> splat (i64 5), <16 x i1> %m, i32 %evl)
1126   ret <16 x i64> %v
1129 define <16 x i64> @vsra_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1130 ; CHECK-LABEL: vsra_vi_v16i64_unmasked:
1131 ; CHECK:       # %bb.0:
1132 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1133 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1134 ; CHECK-NEXT:    ret
1135   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> splat (i64 5), <16 x i1> splat (i1 true), i32 %evl)
1136   ret <16 x i64> %v