Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsra-vp.ll
blobfc84e6ce3b6c7c81ed7262cddd32bc27b3e722da
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:    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
19 ; CHECK-NEXT:    ret
20   %v = call <8 x i7> @llvm.vp.ashr.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
21   ret <8 x i7> %v
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:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
30 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
31 ; CHECK-NEXT:    ret
32   %v = call <2 x i8> @llvm.vp.ashr.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
33   ret <2 x i8> %v
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:
38 ; CHECK:       # %bb.0:
39 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
40 ; CHECK-NEXT:    vsra.vv v8, v8, v9
41 ; CHECK-NEXT:    ret
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)
45   ret <2 x i8> %v
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:
50 ; CHECK:       # %bb.0:
51 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
52 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
53 ; CHECK-NEXT:    ret
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)
57   ret <2 x i8> %v
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:
62 ; CHECK:       # %bb.0:
63 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
64 ; CHECK-NEXT:    vsra.vx v8, v8, a0
65 ; CHECK-NEXT:    ret
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)
71   ret <2 x i8> %v
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:
76 ; CHECK:       # %bb.0:
77 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
78 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
79 ; CHECK-NEXT:    ret
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)
83   ret <2 x i8> %v
86 define <2 x i8> @vsra_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
87 ; CHECK-LABEL: vsra_vi_v2i8_unmasked:
88 ; CHECK:       # %bb.0:
89 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
90 ; CHECK-NEXT:    vsra.vi v8, v8, 5
91 ; CHECK-NEXT:    ret
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)
97   ret <2 x i8> %v
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:
104 ; CHECK:       # %bb.0:
105 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
106 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
107 ; CHECK-NEXT:    ret
108   %v = call <4 x i8> @llvm.vp.ashr.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
109   ret <4 x i8> %v
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:
114 ; CHECK:       # %bb.0:
115 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
116 ; CHECK-NEXT:    vsra.vv v8, v8, v9
117 ; CHECK-NEXT:    ret
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)
121   ret <4 x i8> %v
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:
126 ; CHECK:       # %bb.0:
127 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
128 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
129 ; CHECK-NEXT:    ret
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)
133   ret <4 x i8> %v
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:
138 ; CHECK:       # %bb.0:
139 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
140 ; CHECK-NEXT:    vsra.vx v8, v8, a0
141 ; CHECK-NEXT:    ret
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)
147   ret <4 x i8> %v
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:
152 ; CHECK:       # %bb.0:
153 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
154 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
155 ; CHECK-NEXT:    ret
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)
159   ret <4 x i8> %v
162 define <4 x i8> @vsra_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
163 ; CHECK-LABEL: vsra_vi_v4i8_unmasked:
164 ; CHECK:       # %bb.0:
165 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
166 ; CHECK-NEXT:    vsra.vi v8, v8, 5
167 ; CHECK-NEXT:    ret
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)
173   ret <4 x i8> %v
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:
180 ; CHECK:       # %bb.0:
181 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
182 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
183 ; CHECK-NEXT:    ret
184   %v = call <7 x i8> @llvm.vp.ashr.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> %m, i32 %evl)
185   ret <7 x i8> %v
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:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
194 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
195 ; CHECK-NEXT:    ret
196   %v = call <8 x i8> @llvm.vp.ashr.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
197   ret <8 x i8> %v
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:
202 ; CHECK:       # %bb.0:
203 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
204 ; CHECK-NEXT:    vsra.vv v8, v8, v9
205 ; CHECK-NEXT:    ret
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)
209   ret <8 x i8> %v
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:
214 ; CHECK:       # %bb.0:
215 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
216 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
217 ; CHECK-NEXT:    ret
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)
221   ret <8 x i8> %v
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:
226 ; CHECK:       # %bb.0:
227 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
228 ; CHECK-NEXT:    vsra.vx v8, v8, a0
229 ; CHECK-NEXT:    ret
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)
235   ret <8 x i8> %v
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:
240 ; CHECK:       # %bb.0:
241 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
242 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
243 ; CHECK-NEXT:    ret
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)
247   ret <8 x i8> %v
250 define <8 x i8> @vsra_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
251 ; CHECK-LABEL: vsra_vi_v8i8_unmasked:
252 ; CHECK:       # %bb.0:
253 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
254 ; CHECK-NEXT:    vsra.vi v8, v8, 5
255 ; CHECK-NEXT:    ret
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)
261   ret <8 x i8> %v
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:
268 ; CHECK:       # %bb.0:
269 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
270 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
271 ; CHECK-NEXT:    ret
272   %v = call <16 x i8> @llvm.vp.ashr.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
273   ret <16 x i8> %v
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:
278 ; CHECK:       # %bb.0:
279 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
280 ; CHECK-NEXT:    vsra.vv v8, v8, v9
281 ; CHECK-NEXT:    ret
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)
285   ret <16 x i8> %v
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:
290 ; CHECK:       # %bb.0:
291 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
292 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
293 ; CHECK-NEXT:    ret
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)
297   ret <16 x i8> %v
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:
302 ; CHECK:       # %bb.0:
303 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
304 ; CHECK-NEXT:    vsra.vx v8, v8, a0
305 ; CHECK-NEXT:    ret
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)
311   ret <16 x i8> %v
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:
316 ; CHECK:       # %bb.0:
317 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
318 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
319 ; CHECK-NEXT:    ret
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)
323   ret <16 x i8> %v
326 define <16 x i8> @vsra_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
327 ; CHECK-LABEL: vsra_vi_v16i8_unmasked:
328 ; CHECK:       # %bb.0:
329 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
330 ; CHECK-NEXT:    vsra.vi v8, v8, 5
331 ; CHECK-NEXT:    ret
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)
337   ret <16 x i8> %v
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:
344 ; CHECK:       # %bb.0:
345 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
346 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
347 ; CHECK-NEXT:    ret
348   %v = call <2 x i16> @llvm.vp.ashr.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
349   ret <2 x i16> %v
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:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
356 ; CHECK-NEXT:    vsra.vv v8, v8, v9
357 ; CHECK-NEXT:    ret
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)
361   ret <2 x i16> %v
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:
366 ; CHECK:       # %bb.0:
367 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
368 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
369 ; CHECK-NEXT:    ret
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)
373   ret <2 x i16> %v
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:
378 ; CHECK:       # %bb.0:
379 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
380 ; CHECK-NEXT:    vsra.vx v8, v8, a0
381 ; CHECK-NEXT:    ret
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)
387   ret <2 x i16> %v
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:
392 ; CHECK:       # %bb.0:
393 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
394 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
395 ; CHECK-NEXT:    ret
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)
399   ret <2 x i16> %v
402 define <2 x i16> @vsra_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
403 ; CHECK-LABEL: vsra_vi_v2i16_unmasked:
404 ; CHECK:       # %bb.0:
405 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
406 ; CHECK-NEXT:    vsra.vi v8, v8, 5
407 ; CHECK-NEXT:    ret
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)
413   ret <2 x i16> %v
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:
420 ; CHECK:       # %bb.0:
421 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
422 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
423 ; CHECK-NEXT:    ret
424   %v = call <4 x i16> @llvm.vp.ashr.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
425   ret <4 x i16> %v
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:
430 ; CHECK:       # %bb.0:
431 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
432 ; CHECK-NEXT:    vsra.vv v8, v8, v9
433 ; CHECK-NEXT:    ret
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)
437   ret <4 x i16> %v
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:
442 ; CHECK:       # %bb.0:
443 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
444 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
445 ; CHECK-NEXT:    ret
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)
449   ret <4 x i16> %v
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:
454 ; CHECK:       # %bb.0:
455 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
456 ; CHECK-NEXT:    vsra.vx v8, v8, a0
457 ; CHECK-NEXT:    ret
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)
463   ret <4 x i16> %v
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:
468 ; CHECK:       # %bb.0:
469 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
470 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
471 ; CHECK-NEXT:    ret
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)
475   ret <4 x i16> %v
478 define <4 x i16> @vsra_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
479 ; CHECK-LABEL: vsra_vi_v4i16_unmasked:
480 ; CHECK:       # %bb.0:
481 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
482 ; CHECK-NEXT:    vsra.vi v8, v8, 5
483 ; CHECK-NEXT:    ret
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)
489   ret <4 x i16> %v
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:
496 ; CHECK:       # %bb.0:
497 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
498 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
499 ; CHECK-NEXT:    ret
500   %v = call <8 x i16> @llvm.vp.ashr.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
501   ret <8 x i16> %v
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:
506 ; CHECK:       # %bb.0:
507 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
508 ; CHECK-NEXT:    vsra.vv v8, v8, v9
509 ; CHECK-NEXT:    ret
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)
513   ret <8 x i16> %v
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:
518 ; CHECK:       # %bb.0:
519 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
520 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
521 ; CHECK-NEXT:    ret
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)
525   ret <8 x i16> %v
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:
530 ; CHECK:       # %bb.0:
531 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
532 ; CHECK-NEXT:    vsra.vx v8, v8, a0
533 ; CHECK-NEXT:    ret
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)
539   ret <8 x i16> %v
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:
544 ; CHECK:       # %bb.0:
545 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
546 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
547 ; CHECK-NEXT:    ret
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)
551   ret <8 x i16> %v
554 define <8 x i16> @vsra_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
555 ; CHECK-LABEL: vsra_vi_v8i16_unmasked:
556 ; CHECK:       # %bb.0:
557 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
558 ; CHECK-NEXT:    vsra.vi v8, v8, 5
559 ; CHECK-NEXT:    ret
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)
565   ret <8 x i16> %v
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:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
574 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
575 ; CHECK-NEXT:    ret
576   %v = call <16 x i16> @llvm.vp.ashr.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
577   ret <16 x i16> %v
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:
582 ; CHECK:       # %bb.0:
583 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
584 ; CHECK-NEXT:    vsra.vv v8, v8, v10
585 ; CHECK-NEXT:    ret
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)
589   ret <16 x i16> %v
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:
594 ; CHECK:       # %bb.0:
595 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
596 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
597 ; CHECK-NEXT:    ret
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)
601   ret <16 x i16> %v
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:
606 ; CHECK:       # %bb.0:
607 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
608 ; CHECK-NEXT:    vsra.vx v8, v8, a0
609 ; CHECK-NEXT:    ret
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)
615   ret <16 x i16> %v
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:
620 ; CHECK:       # %bb.0:
621 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
622 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
623 ; CHECK-NEXT:    ret
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)
627   ret <16 x i16> %v
630 define <16 x i16> @vsra_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
631 ; CHECK-LABEL: vsra_vi_v16i16_unmasked:
632 ; CHECK:       # %bb.0:
633 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
634 ; CHECK-NEXT:    vsra.vi v8, v8, 5
635 ; CHECK-NEXT:    ret
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)
641   ret <16 x i16> %v
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:
648 ; CHECK:       # %bb.0:
649 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
650 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
651 ; CHECK-NEXT:    ret
652   %v = call <2 x i32> @llvm.vp.ashr.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
653   ret <2 x i32> %v
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:
658 ; CHECK:       # %bb.0:
659 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
660 ; CHECK-NEXT:    vsra.vv v8, v8, v9
661 ; CHECK-NEXT:    ret
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)
665   ret <2 x i32> %v
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:
670 ; CHECK:       # %bb.0:
671 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
672 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
673 ; CHECK-NEXT:    ret
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)
677   ret <2 x i32> %v
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:
682 ; CHECK:       # %bb.0:
683 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
684 ; CHECK-NEXT:    vsra.vx v8, v8, a0
685 ; CHECK-NEXT:    ret
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)
691   ret <2 x i32> %v
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:
696 ; CHECK:       # %bb.0:
697 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
698 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
699 ; CHECK-NEXT:    ret
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)
703   ret <2 x i32> %v
706 define <2 x i32> @vsra_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
707 ; CHECK-LABEL: vsra_vi_v2i32_unmasked:
708 ; CHECK:       # %bb.0:
709 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
710 ; CHECK-NEXT:    vsra.vi v8, v8, 5
711 ; CHECK-NEXT:    ret
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)
717   ret <2 x i32> %v
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:
724 ; CHECK:       # %bb.0:
725 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
726 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
727 ; CHECK-NEXT:    ret
728   %v = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
729   ret <4 x i32> %v
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:
734 ; CHECK:       # %bb.0:
735 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
736 ; CHECK-NEXT:    vsra.vv v8, v8, v9
737 ; CHECK-NEXT:    ret
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)
741   ret <4 x i32> %v
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:
746 ; CHECK:       # %bb.0:
747 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
748 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
749 ; CHECK-NEXT:    ret
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)
753   ret <4 x i32> %v
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:
758 ; CHECK:       # %bb.0:
759 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
760 ; CHECK-NEXT:    vsra.vx v8, v8, a0
761 ; CHECK-NEXT:    ret
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)
767   ret <4 x i32> %v
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:
772 ; CHECK:       # %bb.0:
773 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
774 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
775 ; CHECK-NEXT:    ret
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)
779   ret <4 x i32> %v
782 define <4 x i32> @vsra_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
783 ; CHECK-LABEL: vsra_vi_v4i32_unmasked:
784 ; CHECK:       # %bb.0:
785 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
786 ; CHECK-NEXT:    vsra.vi v8, v8, 5
787 ; CHECK-NEXT:    ret
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)
793   ret <4 x i32> %v
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:
800 ; CHECK:       # %bb.0:
801 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
802 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
803 ; CHECK-NEXT:    ret
804   %v = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
805   ret <8 x i32> %v
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:
810 ; CHECK:       # %bb.0:
811 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
812 ; CHECK-NEXT:    vsra.vv v8, v8, v10
813 ; CHECK-NEXT:    ret
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)
817   ret <8 x i32> %v
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:
822 ; CHECK:       # %bb.0:
823 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
824 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
825 ; CHECK-NEXT:    ret
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)
829   ret <8 x i32> %v
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:
834 ; CHECK:       # %bb.0:
835 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
836 ; CHECK-NEXT:    vsra.vx v8, v8, a0
837 ; CHECK-NEXT:    ret
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)
843   ret <8 x i32> %v
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:
848 ; CHECK:       # %bb.0:
849 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
850 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
851 ; CHECK-NEXT:    ret
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)
855   ret <8 x i32> %v
858 define <8 x i32> @vsra_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
859 ; CHECK-LABEL: vsra_vi_v8i32_unmasked:
860 ; CHECK:       # %bb.0:
861 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
862 ; CHECK-NEXT:    vsra.vi v8, v8, 5
863 ; CHECK-NEXT:    ret
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)
869   ret <8 x i32> %v
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:
876 ; CHECK:       # %bb.0:
877 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
878 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
879 ; CHECK-NEXT:    ret
880   %v = call <16 x i32> @llvm.vp.ashr.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
881   ret <16 x i32> %v
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:
886 ; CHECK:       # %bb.0:
887 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
888 ; CHECK-NEXT:    vsra.vv v8, v8, v12
889 ; CHECK-NEXT:    ret
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)
893   ret <16 x i32> %v
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:
898 ; CHECK:       # %bb.0:
899 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
900 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
901 ; CHECK-NEXT:    ret
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)
905   ret <16 x i32> %v
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:
910 ; CHECK:       # %bb.0:
911 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
912 ; CHECK-NEXT:    vsra.vx v8, v8, a0
913 ; CHECK-NEXT:    ret
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)
919   ret <16 x i32> %v
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:
924 ; CHECK:       # %bb.0:
925 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
926 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
927 ; CHECK-NEXT:    ret
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)
931   ret <16 x i32> %v
934 define <16 x i32> @vsra_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
935 ; CHECK-LABEL: vsra_vi_v16i32_unmasked:
936 ; CHECK:       # %bb.0:
937 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
938 ; CHECK-NEXT:    vsra.vi v8, v8, 5
939 ; CHECK-NEXT:    ret
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)
945   ret <16 x i32> %v
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:
952 ; CHECK:       # %bb.0:
953 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
954 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
955 ; CHECK-NEXT:    ret
956   %v = call <2 x i64> @llvm.vp.ashr.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
957   ret <2 x i64> %v
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:
962 ; CHECK:       # %bb.0:
963 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
964 ; CHECK-NEXT:    vsra.vv v8, v8, v9
965 ; CHECK-NEXT:    ret
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)
969   ret <2 x i64> %v
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:
974 ; RV32:       # %bb.0:
975 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
976 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
977 ; RV32-NEXT:    ret
979 ; RV64-LABEL: vsra_vx_v2i64:
980 ; RV64:       # %bb.0:
981 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
982 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
983 ; RV64-NEXT:    ret
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)
987   ret <2 x i64> %v
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:
992 ; RV32:       # %bb.0:
993 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
994 ; RV32-NEXT:    vsra.vx v8, v8, a0
995 ; RV32-NEXT:    ret
997 ; RV64-LABEL: vsra_vx_v2i64_unmasked:
998 ; RV64:       # %bb.0:
999 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1000 ; RV64-NEXT:    vsra.vx v8, v8, a0
1001 ; RV64-NEXT:    ret
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)
1007   ret <2 x i64> %v
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:
1012 ; CHECK:       # %bb.0:
1013 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1014 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1015 ; CHECK-NEXT:    ret
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)
1019   ret <2 x i64> %v
1022 define <2 x i64> @vsra_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1023 ; CHECK-LABEL: vsra_vi_v2i64_unmasked:
1024 ; CHECK:       # %bb.0:
1025 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1026 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1027 ; CHECK-NEXT:    ret
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)
1033   ret <2 x i64> %v
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:
1040 ; CHECK:       # %bb.0:
1041 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1042 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
1043 ; CHECK-NEXT:    ret
1044   %v = call <4 x i64> @llvm.vp.ashr.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1045   ret <4 x i64> %v
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:
1050 ; CHECK:       # %bb.0:
1051 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1052 ; CHECK-NEXT:    vsra.vv v8, v8, v10
1053 ; CHECK-NEXT:    ret
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)
1057   ret <4 x i64> %v
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:
1062 ; RV32:       # %bb.0:
1063 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1064 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1065 ; RV32-NEXT:    ret
1067 ; RV64-LABEL: vsra_vx_v4i64:
1068 ; RV64:       # %bb.0:
1069 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1070 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1071 ; RV64-NEXT:    ret
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)
1075   ret <4 x i64> %v
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:
1080 ; RV32:       # %bb.0:
1081 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1082 ; RV32-NEXT:    vsra.vx v8, v8, a0
1083 ; RV32-NEXT:    ret
1085 ; RV64-LABEL: vsra_vx_v4i64_unmasked:
1086 ; RV64:       # %bb.0:
1087 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1088 ; RV64-NEXT:    vsra.vx v8, v8, a0
1089 ; RV64-NEXT:    ret
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)
1095   ret <4 x i64> %v
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:
1100 ; CHECK:       # %bb.0:
1101 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1102 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1103 ; CHECK-NEXT:    ret
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)
1107   ret <4 x i64> %v
1110 define <4 x i64> @vsra_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1111 ; CHECK-LABEL: vsra_vi_v4i64_unmasked:
1112 ; CHECK:       # %bb.0:
1113 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1114 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1115 ; CHECK-NEXT:    ret
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)
1121   ret <4 x i64> %v
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:
1128 ; CHECK:       # %bb.0:
1129 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1130 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
1131 ; CHECK-NEXT:    ret
1132   %v = call <8 x i64> @llvm.vp.ashr.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1133   ret <8 x i64> %v
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:
1138 ; CHECK:       # %bb.0:
1139 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1140 ; CHECK-NEXT:    vsra.vv v8, v8, v12
1141 ; CHECK-NEXT:    ret
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)
1145   ret <8 x i64> %v
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:
1150 ; RV32:       # %bb.0:
1151 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1152 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1153 ; RV32-NEXT:    ret
1155 ; RV64-LABEL: vsra_vx_v8i64:
1156 ; RV64:       # %bb.0:
1157 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1158 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1159 ; RV64-NEXT:    ret
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)
1163   ret <8 x i64> %v
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:
1168 ; RV32:       # %bb.0:
1169 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1170 ; RV32-NEXT:    vsra.vx v8, v8, a0
1171 ; RV32-NEXT:    ret
1173 ; RV64-LABEL: vsra_vx_v8i64_unmasked:
1174 ; RV64:       # %bb.0:
1175 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1176 ; RV64-NEXT:    vsra.vx v8, v8, a0
1177 ; RV64-NEXT:    ret
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)
1183   ret <8 x i64> %v
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:
1188 ; CHECK:       # %bb.0:
1189 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1190 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1191 ; CHECK-NEXT:    ret
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)
1195   ret <8 x i64> %v
1198 define <8 x i64> @vsra_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1199 ; CHECK-LABEL: vsra_vi_v8i64_unmasked:
1200 ; CHECK:       # %bb.0:
1201 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1202 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1203 ; CHECK-NEXT:    ret
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)
1209   ret <8 x i64> %v
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:
1216 ; CHECK:       # %bb.0:
1217 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1218 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
1219 ; CHECK-NEXT:    ret
1220   %v = call <16 x i64> @llvm.vp.ashr.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1221   ret <16 x i64> %v
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:
1226 ; CHECK:       # %bb.0:
1227 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1228 ; CHECK-NEXT:    vsra.vv v8, v8, v16
1229 ; CHECK-NEXT:    ret
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)
1233   ret <16 x i64> %v
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:
1238 ; RV32:       # %bb.0:
1239 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1240 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1241 ; RV32-NEXT:    ret
1243 ; RV64-LABEL: vsra_vx_v16i64:
1244 ; RV64:       # %bb.0:
1245 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1246 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1247 ; RV64-NEXT:    ret
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)
1251   ret <16 x i64> %v
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:
1256 ; RV32:       # %bb.0:
1257 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1258 ; RV32-NEXT:    vsra.vx v8, v8, a0
1259 ; RV32-NEXT:    ret
1261 ; RV64-LABEL: vsra_vx_v16i64_unmasked:
1262 ; RV64:       # %bb.0:
1263 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1264 ; RV64-NEXT:    vsra.vx v8, v8, a0
1265 ; RV64-NEXT:    ret
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)
1271   ret <16 x i64> %v
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:
1276 ; CHECK:       # %bb.0:
1277 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1278 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1279 ; CHECK-NEXT:    ret
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)
1283   ret <16 x i64> %v
1286 define <16 x i64> @vsra_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1287 ; CHECK-LABEL: vsra_vi_v16i64_unmasked:
1288 ; CHECK:       # %bb.0:
1289 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1290 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1291 ; CHECK-NEXT:    ret
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)
1297   ret <16 x i64> %v