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 <vscale x 8 x i7> @llvm.vp.ashr.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsra_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsra_vx_nxv8i7:
12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
13 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
14 ; CHECK-NEXT: vsra.vi v8, v8, 1, v0.t
15 ; CHECK-NEXT: vsetvli a2, zero, e8, m1, ta, ma
16 ; CHECK-NEXT: vmv.v.x v9, a0
17 ; CHECK-NEXT: li a0, 127
18 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
19 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
20 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
22 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
23 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
24 %v = call <vscale x 8 x i7> @llvm.vp.ashr.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
25 ret <vscale x 8 x i7> %v
28 declare <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
30 define <vscale x 1 x i8> @vsra_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
31 ; CHECK-LABEL: vsra_vv_nxv1i8:
33 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
34 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
36 %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
37 ret <vscale x 1 x i8> %v
40 define <vscale x 1 x i8> @vsra_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
41 ; CHECK-LABEL: vsra_vv_nxv1i8_unmasked:
43 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
44 ; CHECK-NEXT: vsra.vv v8, v8, v9
46 %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
47 ret <vscale x 1 x i8> %v
50 define <vscale x 1 x i8> @vsra_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
51 ; CHECK-LABEL: vsra_vx_nxv1i8:
53 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
54 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
56 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
57 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
58 %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
59 ret <vscale x 1 x i8> %v
62 define <vscale x 1 x i8> @vsra_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
63 ; CHECK-LABEL: vsra_vx_nxv1i8_unmasked:
65 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
66 ; CHECK-NEXT: vsra.vx v8, v8, a0
68 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
69 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
70 %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
71 ret <vscale x 1 x i8> %v
74 define <vscale x 1 x i8> @vsra_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
75 ; CHECK-LABEL: vsra_vi_nxv1i8:
77 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
78 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
80 %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 5), <vscale x 1 x i1> %m, i32 %evl)
81 ret <vscale x 1 x i8> %v
84 define <vscale x 1 x i8> @vsra_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
85 ; CHECK-LABEL: vsra_vi_nxv1i8_unmasked:
87 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
88 ; CHECK-NEXT: vsra.vi v8, v8, 5
90 %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
91 ret <vscale x 1 x i8> %v
94 declare <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
96 define <vscale x 2 x i8> @vsra_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
97 ; CHECK-LABEL: vsra_vv_nxv2i8:
99 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
100 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
102 %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
103 ret <vscale x 2 x i8> %v
106 define <vscale x 2 x i8> @vsra_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
107 ; CHECK-LABEL: vsra_vv_nxv2i8_unmasked:
109 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
110 ; CHECK-NEXT: vsra.vv v8, v8, v9
112 %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
113 ret <vscale x 2 x i8> %v
116 define <vscale x 2 x i8> @vsra_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
117 ; CHECK-LABEL: vsra_vx_nxv2i8:
119 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
120 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
122 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
123 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
124 %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
125 ret <vscale x 2 x i8> %v
128 define <vscale x 2 x i8> @vsra_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
129 ; CHECK-LABEL: vsra_vx_nxv2i8_unmasked:
131 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
132 ; CHECK-NEXT: vsra.vx v8, v8, a0
134 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
135 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
136 %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
137 ret <vscale x 2 x i8> %v
140 define <vscale x 2 x i8> @vsra_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
141 ; CHECK-LABEL: vsra_vi_nxv2i8:
143 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
144 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
146 %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 5), <vscale x 2 x i1> %m, i32 %evl)
147 ret <vscale x 2 x i8> %v
150 define <vscale x 2 x i8> @vsra_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
151 ; CHECK-LABEL: vsra_vi_nxv2i8_unmasked:
153 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
154 ; CHECK-NEXT: vsra.vi v8, v8, 5
156 %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
157 ret <vscale x 2 x i8> %v
160 declare <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
162 define <vscale x 4 x i8> @vsra_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
163 ; CHECK-LABEL: vsra_vv_nxv4i8:
165 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
166 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
168 %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
169 ret <vscale x 4 x i8> %v
172 define <vscale x 4 x i8> @vsra_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
173 ; CHECK-LABEL: vsra_vv_nxv4i8_unmasked:
175 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
176 ; CHECK-NEXT: vsra.vv v8, v8, v9
178 %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
179 ret <vscale x 4 x i8> %v
182 define <vscale x 4 x i8> @vsra_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
183 ; CHECK-LABEL: vsra_vx_nxv4i8:
185 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
186 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
188 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
189 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
190 %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
191 ret <vscale x 4 x i8> %v
194 define <vscale x 4 x i8> @vsra_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
195 ; CHECK-LABEL: vsra_vx_nxv4i8_unmasked:
197 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
198 ; CHECK-NEXT: vsra.vx v8, v8, a0
200 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
201 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
202 %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
203 ret <vscale x 4 x i8> %v
206 define <vscale x 4 x i8> @vsra_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
207 ; CHECK-LABEL: vsra_vi_nxv4i8:
209 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
210 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
212 %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 5), <vscale x 4 x i1> %m, i32 %evl)
213 ret <vscale x 4 x i8> %v
216 define <vscale x 4 x i8> @vsra_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
217 ; CHECK-LABEL: vsra_vi_nxv4i8_unmasked:
219 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
220 ; CHECK-NEXT: vsra.vi v8, v8, 5
222 %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
223 ret <vscale x 4 x i8> %v
226 declare <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
228 define <vscale x 8 x i8> @vsra_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
229 ; CHECK-LABEL: vsra_vv_nxv8i8:
231 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
232 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
234 %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
235 ret <vscale x 8 x i8> %v
238 define <vscale x 8 x i8> @vsra_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
239 ; CHECK-LABEL: vsra_vv_nxv8i8_unmasked:
241 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
242 ; CHECK-NEXT: vsra.vv v8, v8, v9
244 %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
245 ret <vscale x 8 x i8> %v
248 define <vscale x 8 x i8> @vsra_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
249 ; CHECK-LABEL: vsra_vx_nxv8i8:
251 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
252 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
254 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
255 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
256 %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
257 ret <vscale x 8 x i8> %v
260 define <vscale x 8 x i8> @vsra_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
261 ; CHECK-LABEL: vsra_vx_nxv8i8_unmasked:
263 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
264 ; CHECK-NEXT: vsra.vx v8, v8, a0
266 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
267 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
268 %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
269 ret <vscale x 8 x i8> %v
272 define <vscale x 8 x i8> @vsra_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
273 ; CHECK-LABEL: vsra_vi_nxv8i8:
275 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
276 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
278 %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 5), <vscale x 8 x i1> %m, i32 %evl)
279 ret <vscale x 8 x i8> %v
282 define <vscale x 8 x i8> @vsra_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
283 ; CHECK-LABEL: vsra_vi_nxv8i8_unmasked:
285 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
286 ; CHECK-NEXT: vsra.vi v8, v8, 5
288 %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
289 ret <vscale x 8 x i8> %v
292 declare <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
294 define <vscale x 16 x i8> @vsra_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
295 ; CHECK-LABEL: vsra_vv_nxv16i8:
297 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
298 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
300 %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
301 ret <vscale x 16 x i8> %v
304 define <vscale x 16 x i8> @vsra_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
305 ; CHECK-LABEL: vsra_vv_nxv16i8_unmasked:
307 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
308 ; CHECK-NEXT: vsra.vv v8, v8, v10
310 %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
311 ret <vscale x 16 x i8> %v
314 define <vscale x 16 x i8> @vsra_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
315 ; CHECK-LABEL: vsra_vx_nxv16i8:
317 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
318 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
320 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
321 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
322 %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
323 ret <vscale x 16 x i8> %v
326 define <vscale x 16 x i8> @vsra_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
327 ; CHECK-LABEL: vsra_vx_nxv16i8_unmasked:
329 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
330 ; CHECK-NEXT: vsra.vx v8, v8, a0
332 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
333 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
334 %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
335 ret <vscale x 16 x i8> %v
338 define <vscale x 16 x i8> @vsra_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
339 ; CHECK-LABEL: vsra_vi_nxv16i8:
341 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
342 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
344 %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 5), <vscale x 16 x i1> %m, i32 %evl)
345 ret <vscale x 16 x i8> %v
348 define <vscale x 16 x i8> @vsra_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
349 ; CHECK-LABEL: vsra_vi_nxv16i8_unmasked:
351 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
352 ; CHECK-NEXT: vsra.vi v8, v8, 5
354 %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 5), <vscale x 16 x i1> splat (i1 true), i32 %evl)
355 ret <vscale x 16 x i8> %v
358 declare <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
360 define <vscale x 32 x i8> @vsra_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
361 ; CHECK-LABEL: vsra_vv_nxv32i8:
363 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
364 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
366 %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
367 ret <vscale x 32 x i8> %v
370 define <vscale x 32 x i8> @vsra_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
371 ; CHECK-LABEL: vsra_vv_nxv32i8_unmasked:
373 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
374 ; CHECK-NEXT: vsra.vv v8, v8, v12
376 %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
377 ret <vscale x 32 x i8> %v
380 define <vscale x 32 x i8> @vsra_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
381 ; CHECK-LABEL: vsra_vx_nxv32i8:
383 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
384 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
386 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
387 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
388 %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
389 ret <vscale x 32 x i8> %v
392 define <vscale x 32 x i8> @vsra_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
393 ; CHECK-LABEL: vsra_vx_nxv32i8_unmasked:
395 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
396 ; CHECK-NEXT: vsra.vx v8, v8, a0
398 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
399 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
400 %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
401 ret <vscale x 32 x i8> %v
404 define <vscale x 32 x i8> @vsra_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
405 ; CHECK-LABEL: vsra_vi_nxv32i8:
407 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
408 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
410 %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 5), <vscale x 32 x i1> %m, i32 %evl)
411 ret <vscale x 32 x i8> %v
414 define <vscale x 32 x i8> @vsra_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
415 ; CHECK-LABEL: vsra_vi_nxv32i8_unmasked:
417 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
418 ; CHECK-NEXT: vsra.vi v8, v8, 5
420 %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 5), <vscale x 32 x i1> splat (i1 true), i32 %evl)
421 ret <vscale x 32 x i8> %v
424 declare <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
426 define <vscale x 64 x i8> @vsra_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
427 ; CHECK-LABEL: vsra_vv_nxv64i8:
429 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
430 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
432 %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
433 ret <vscale x 64 x i8> %v
436 define <vscale x 64 x i8> @vsra_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
437 ; CHECK-LABEL: vsra_vv_nxv64i8_unmasked:
439 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
440 ; CHECK-NEXT: vsra.vv v8, v8, v16
442 %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
443 ret <vscale x 64 x i8> %v
446 define <vscale x 64 x i8> @vsra_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
447 ; CHECK-LABEL: vsra_vx_nxv64i8:
449 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
450 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
452 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
453 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
454 %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
455 ret <vscale x 64 x i8> %v
458 define <vscale x 64 x i8> @vsra_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
459 ; CHECK-LABEL: vsra_vx_nxv64i8_unmasked:
461 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
462 ; CHECK-NEXT: vsra.vx v8, v8, a0
464 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
465 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
466 %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
467 ret <vscale x 64 x i8> %v
470 define <vscale x 64 x i8> @vsra_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
471 ; CHECK-LABEL: vsra_vi_nxv64i8:
473 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
474 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
476 %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 5), <vscale x 64 x i1> %m, i32 %evl)
477 ret <vscale x 64 x i8> %v
480 define <vscale x 64 x i8> @vsra_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
481 ; CHECK-LABEL: vsra_vi_nxv64i8_unmasked:
483 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
484 ; CHECK-NEXT: vsra.vi v8, v8, 5
486 %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 5), <vscale x 64 x i1> splat (i1 true), i32 %evl)
487 ret <vscale x 64 x i8> %v
490 declare <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
492 define <vscale x 1 x i16> @vsra_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
493 ; CHECK-LABEL: vsra_vv_nxv1i16:
495 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
496 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
498 %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
499 ret <vscale x 1 x i16> %v
502 define <vscale x 1 x i16> @vsra_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
503 ; CHECK-LABEL: vsra_vv_nxv1i16_unmasked:
505 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
506 ; CHECK-NEXT: vsra.vv v8, v8, v9
508 %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
509 ret <vscale x 1 x i16> %v
512 define <vscale x 1 x i16> @vsra_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
513 ; CHECK-LABEL: vsra_vx_nxv1i16:
515 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
516 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
518 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
519 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
520 %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
521 ret <vscale x 1 x i16> %v
524 define <vscale x 1 x i16> @vsra_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
525 ; CHECK-LABEL: vsra_vx_nxv1i16_unmasked:
527 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
528 ; CHECK-NEXT: vsra.vx v8, v8, a0
530 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
531 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
532 %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
533 ret <vscale x 1 x i16> %v
536 define <vscale x 1 x i16> @vsra_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
537 ; CHECK-LABEL: vsra_vi_nxv1i16:
539 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
540 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
542 %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 5), <vscale x 1 x i1> %m, i32 %evl)
543 ret <vscale x 1 x i16> %v
546 define <vscale x 1 x i16> @vsra_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
547 ; CHECK-LABEL: vsra_vi_nxv1i16_unmasked:
549 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
550 ; CHECK-NEXT: vsra.vi v8, v8, 5
552 %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
553 ret <vscale x 1 x i16> %v
556 declare <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
558 define <vscale x 2 x i16> @vsra_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
559 ; CHECK-LABEL: vsra_vv_nxv2i16:
561 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
562 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
564 %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
565 ret <vscale x 2 x i16> %v
568 define <vscale x 2 x i16> @vsra_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
569 ; CHECK-LABEL: vsra_vv_nxv2i16_unmasked:
571 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
572 ; CHECK-NEXT: vsra.vv v8, v8, v9
574 %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
575 ret <vscale x 2 x i16> %v
578 define <vscale x 2 x i16> @vsra_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
579 ; CHECK-LABEL: vsra_vx_nxv2i16:
581 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
582 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
584 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
585 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
586 %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
587 ret <vscale x 2 x i16> %v
590 define <vscale x 2 x i16> @vsra_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
591 ; CHECK-LABEL: vsra_vx_nxv2i16_unmasked:
593 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
594 ; CHECK-NEXT: vsra.vx v8, v8, a0
596 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
597 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
598 %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
599 ret <vscale x 2 x i16> %v
602 define <vscale x 2 x i16> @vsra_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
603 ; CHECK-LABEL: vsra_vi_nxv2i16:
605 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
606 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
608 %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 5), <vscale x 2 x i1> %m, i32 %evl)
609 ret <vscale x 2 x i16> %v
612 define <vscale x 2 x i16> @vsra_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
613 ; CHECK-LABEL: vsra_vi_nxv2i16_unmasked:
615 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
616 ; CHECK-NEXT: vsra.vi v8, v8, 5
618 %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
619 ret <vscale x 2 x i16> %v
622 declare <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
624 define <vscale x 4 x i16> @vsra_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
625 ; CHECK-LABEL: vsra_vv_nxv4i16:
627 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
628 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
630 %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
631 ret <vscale x 4 x i16> %v
634 define <vscale x 4 x i16> @vsra_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
635 ; CHECK-LABEL: vsra_vv_nxv4i16_unmasked:
637 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
638 ; CHECK-NEXT: vsra.vv v8, v8, v9
640 %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
641 ret <vscale x 4 x i16> %v
644 define <vscale x 4 x i16> @vsra_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
645 ; CHECK-LABEL: vsra_vx_nxv4i16:
647 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
648 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
650 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
651 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
652 %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
653 ret <vscale x 4 x i16> %v
656 define <vscale x 4 x i16> @vsra_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
657 ; CHECK-LABEL: vsra_vx_nxv4i16_unmasked:
659 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
660 ; CHECK-NEXT: vsra.vx v8, v8, a0
662 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
663 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
664 %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
665 ret <vscale x 4 x i16> %v
668 define <vscale x 4 x i16> @vsra_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
669 ; CHECK-LABEL: vsra_vi_nxv4i16:
671 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
672 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
674 %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 5), <vscale x 4 x i1> %m, i32 %evl)
675 ret <vscale x 4 x i16> %v
678 define <vscale x 4 x i16> @vsra_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
679 ; CHECK-LABEL: vsra_vi_nxv4i16_unmasked:
681 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
682 ; CHECK-NEXT: vsra.vi v8, v8, 5
684 %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
685 ret <vscale x 4 x i16> %v
688 declare <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
690 define <vscale x 8 x i16> @vsra_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
691 ; CHECK-LABEL: vsra_vv_nxv8i16:
693 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
694 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
696 %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
697 ret <vscale x 8 x i16> %v
700 define <vscale x 8 x i16> @vsra_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
701 ; CHECK-LABEL: vsra_vv_nxv8i16_unmasked:
703 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
704 ; CHECK-NEXT: vsra.vv v8, v8, v10
706 %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
707 ret <vscale x 8 x i16> %v
710 define <vscale x 8 x i16> @vsra_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
711 ; CHECK-LABEL: vsra_vx_nxv8i16:
713 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
714 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
716 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
717 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
718 %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
719 ret <vscale x 8 x i16> %v
722 define <vscale x 8 x i16> @vsra_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
723 ; CHECK-LABEL: vsra_vx_nxv8i16_unmasked:
725 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
726 ; CHECK-NEXT: vsra.vx v8, v8, a0
728 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
729 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
730 %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
731 ret <vscale x 8 x i16> %v
734 define <vscale x 8 x i16> @vsra_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
735 ; CHECK-LABEL: vsra_vi_nxv8i16:
737 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
738 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
740 %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 5), <vscale x 8 x i1> %m, i32 %evl)
741 ret <vscale x 8 x i16> %v
744 define <vscale x 8 x i16> @vsra_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
745 ; CHECK-LABEL: vsra_vi_nxv8i16_unmasked:
747 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
748 ; CHECK-NEXT: vsra.vi v8, v8, 5
750 %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
751 ret <vscale x 8 x i16> %v
754 declare <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
756 define <vscale x 16 x i16> @vsra_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
757 ; CHECK-LABEL: vsra_vv_nxv16i16:
759 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
760 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
762 %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
763 ret <vscale x 16 x i16> %v
766 define <vscale x 16 x i16> @vsra_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
767 ; CHECK-LABEL: vsra_vv_nxv16i16_unmasked:
769 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
770 ; CHECK-NEXT: vsra.vv v8, v8, v12
772 %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
773 ret <vscale x 16 x i16> %v
776 define <vscale x 16 x i16> @vsra_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
777 ; CHECK-LABEL: vsra_vx_nxv16i16:
779 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
780 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
782 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
783 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
784 %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
785 ret <vscale x 16 x i16> %v
788 define <vscale x 16 x i16> @vsra_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
789 ; CHECK-LABEL: vsra_vx_nxv16i16_unmasked:
791 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
792 ; CHECK-NEXT: vsra.vx v8, v8, a0
794 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
795 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
796 %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
797 ret <vscale x 16 x i16> %v
800 define <vscale x 16 x i16> @vsra_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
801 ; CHECK-LABEL: vsra_vi_nxv16i16:
803 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
804 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
806 %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 5), <vscale x 16 x i1> %m, i32 %evl)
807 ret <vscale x 16 x i16> %v
810 define <vscale x 16 x i16> @vsra_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
811 ; CHECK-LABEL: vsra_vi_nxv16i16_unmasked:
813 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
814 ; CHECK-NEXT: vsra.vi v8, v8, 5
816 %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 5), <vscale x 16 x i1> splat (i1 true), i32 %evl)
817 ret <vscale x 16 x i16> %v
820 declare <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
822 define <vscale x 32 x i16> @vsra_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
823 ; CHECK-LABEL: vsra_vv_nxv32i16:
825 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
826 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
828 %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
829 ret <vscale x 32 x i16> %v
832 define <vscale x 32 x i16> @vsra_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
833 ; CHECK-LABEL: vsra_vv_nxv32i16_unmasked:
835 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
836 ; CHECK-NEXT: vsra.vv v8, v8, v16
838 %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
839 ret <vscale x 32 x i16> %v
842 define <vscale x 32 x i16> @vsra_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
843 ; CHECK-LABEL: vsra_vx_nxv32i16:
845 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
846 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
848 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
849 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
850 %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
851 ret <vscale x 32 x i16> %v
854 define <vscale x 32 x i16> @vsra_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
855 ; CHECK-LABEL: vsra_vx_nxv32i16_unmasked:
857 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
858 ; CHECK-NEXT: vsra.vx v8, v8, a0
860 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
861 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
862 %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
863 ret <vscale x 32 x i16> %v
866 define <vscale x 32 x i16> @vsra_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
867 ; CHECK-LABEL: vsra_vi_nxv32i16:
869 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
870 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
872 %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 5), <vscale x 32 x i1> %m, i32 %evl)
873 ret <vscale x 32 x i16> %v
876 define <vscale x 32 x i16> @vsra_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
877 ; CHECK-LABEL: vsra_vi_nxv32i16_unmasked:
879 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
880 ; CHECK-NEXT: vsra.vi v8, v8, 5
882 %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 5), <vscale x 32 x i1> splat (i1 true), i32 %evl)
883 ret <vscale x 32 x i16> %v
886 declare <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
888 define <vscale x 1 x i32> @vsra_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
889 ; CHECK-LABEL: vsra_vv_nxv1i32:
891 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
892 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
894 %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
895 ret <vscale x 1 x i32> %v
898 define <vscale x 1 x i32> @vsra_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
899 ; CHECK-LABEL: vsra_vv_nxv1i32_unmasked:
901 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
902 ; CHECK-NEXT: vsra.vv v8, v8, v9
904 %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
905 ret <vscale x 1 x i32> %v
908 define <vscale x 1 x i32> @vsra_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
909 ; CHECK-LABEL: vsra_vx_nxv1i32:
911 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
912 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
914 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
915 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
916 %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
917 ret <vscale x 1 x i32> %v
920 define <vscale x 1 x i32> @vsra_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
921 ; CHECK-LABEL: vsra_vx_nxv1i32_unmasked:
923 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
924 ; CHECK-NEXT: vsra.vx v8, v8, a0
926 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
927 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
928 %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
929 ret <vscale x 1 x i32> %v
932 define <vscale x 1 x i32> @vsra_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
933 ; CHECK-LABEL: vsra_vi_nxv1i32:
935 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
936 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
938 %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 5), <vscale x 1 x i1> %m, i32 %evl)
939 ret <vscale x 1 x i32> %v
942 define <vscale x 1 x i32> @vsra_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
943 ; CHECK-LABEL: vsra_vi_nxv1i32_unmasked:
945 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
946 ; CHECK-NEXT: vsra.vi v8, v8, 5
948 %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
949 ret <vscale x 1 x i32> %v
952 declare <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
954 define <vscale x 2 x i32> @vsra_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
955 ; CHECK-LABEL: vsra_vv_nxv2i32:
957 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
958 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
960 %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
961 ret <vscale x 2 x i32> %v
964 define <vscale x 2 x i32> @vsra_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
965 ; CHECK-LABEL: vsra_vv_nxv2i32_unmasked:
967 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
968 ; CHECK-NEXT: vsra.vv v8, v8, v9
970 %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
971 ret <vscale x 2 x i32> %v
974 define <vscale x 2 x i32> @vsra_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
975 ; CHECK-LABEL: vsra_vx_nxv2i32:
977 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
978 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
980 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
981 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
982 %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
983 ret <vscale x 2 x i32> %v
986 define <vscale x 2 x i32> @vsra_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
987 ; CHECK-LABEL: vsra_vx_nxv2i32_unmasked:
989 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
990 ; CHECK-NEXT: vsra.vx v8, v8, a0
992 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
993 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
994 %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
995 ret <vscale x 2 x i32> %v
998 define <vscale x 2 x i32> @vsra_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
999 ; CHECK-LABEL: vsra_vi_nxv2i32:
1001 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1002 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1004 %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 5), <vscale x 2 x i1> %m, i32 %evl)
1005 ret <vscale x 2 x i32> %v
1008 define <vscale x 2 x i32> @vsra_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1009 ; CHECK-LABEL: vsra_vi_nxv2i32_unmasked:
1011 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1012 ; CHECK-NEXT: vsra.vi v8, v8, 5
1014 %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1015 ret <vscale x 2 x i32> %v
1018 declare <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1020 define <vscale x 4 x i32> @vsra_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1021 ; CHECK-LABEL: vsra_vv_nxv4i32:
1023 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1024 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
1026 %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1027 ret <vscale x 4 x i32> %v
1030 define <vscale x 4 x i32> @vsra_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1031 ; CHECK-LABEL: vsra_vv_nxv4i32_unmasked:
1033 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1034 ; CHECK-NEXT: vsra.vv v8, v8, v10
1036 %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1037 ret <vscale x 4 x i32> %v
1040 define <vscale x 4 x i32> @vsra_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1041 ; CHECK-LABEL: vsra_vx_nxv4i32:
1043 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1044 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1046 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1047 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1048 %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1049 ret <vscale x 4 x i32> %v
1052 define <vscale x 4 x i32> @vsra_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1053 ; CHECK-LABEL: vsra_vx_nxv4i32_unmasked:
1055 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1056 ; CHECK-NEXT: vsra.vx v8, v8, a0
1058 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1059 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1060 %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1061 ret <vscale x 4 x i32> %v
1064 define <vscale x 4 x i32> @vsra_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1065 ; CHECK-LABEL: vsra_vi_nxv4i32:
1067 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1068 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1070 %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 5), <vscale x 4 x i1> %m, i32 %evl)
1071 ret <vscale x 4 x i32> %v
1074 define <vscale x 4 x i32> @vsra_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1075 ; CHECK-LABEL: vsra_vi_nxv4i32_unmasked:
1077 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1078 ; CHECK-NEXT: vsra.vi v8, v8, 5
1080 %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1081 ret <vscale x 4 x i32> %v
1084 declare <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1086 define <vscale x 8 x i32> @vsra_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1087 ; CHECK-LABEL: vsra_vv_nxv8i32:
1089 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1090 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
1092 %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1093 ret <vscale x 8 x i32> %v
1096 define <vscale x 8 x i32> @vsra_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1097 ; CHECK-LABEL: vsra_vv_nxv8i32_unmasked:
1099 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1100 ; CHECK-NEXT: vsra.vv v8, v8, v12
1102 %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1103 ret <vscale x 8 x i32> %v
1106 define <vscale x 8 x i32> @vsra_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1107 ; CHECK-LABEL: vsra_vx_nxv8i32:
1109 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1110 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1112 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1113 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1114 %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1115 ret <vscale x 8 x i32> %v
1118 define <vscale x 8 x i32> @vsra_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1119 ; CHECK-LABEL: vsra_vx_nxv8i32_unmasked:
1121 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1122 ; CHECK-NEXT: vsra.vx v8, v8, a0
1124 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1125 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1126 %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1127 ret <vscale x 8 x i32> %v
1130 define <vscale x 8 x i32> @vsra_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1131 ; CHECK-LABEL: vsra_vi_nxv8i32:
1133 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1134 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1136 %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 5), <vscale x 8 x i1> %m, i32 %evl)
1137 ret <vscale x 8 x i32> %v
1140 define <vscale x 8 x i32> @vsra_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1141 ; CHECK-LABEL: vsra_vi_nxv8i32_unmasked:
1143 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1144 ; CHECK-NEXT: vsra.vi v8, v8, 5
1146 %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1147 ret <vscale x 8 x i32> %v
1150 declare <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1152 define <vscale x 16 x i32> @vsra_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1153 ; CHECK-LABEL: vsra_vv_nxv16i32:
1155 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1156 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1158 %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1159 ret <vscale x 16 x i32> %v
1162 define <vscale x 16 x i32> @vsra_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1163 ; CHECK-LABEL: vsra_vv_nxv16i32_unmasked:
1165 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1166 ; CHECK-NEXT: vsra.vv v8, v8, v16
1168 %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1169 ret <vscale x 16 x i32> %v
1172 define <vscale x 16 x i32> @vsra_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1173 ; CHECK-LABEL: vsra_vx_nxv16i32:
1175 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1176 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1178 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1179 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1180 %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1181 ret <vscale x 16 x i32> %v
1184 define <vscale x 16 x i32> @vsra_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1185 ; CHECK-LABEL: vsra_vx_nxv16i32_unmasked:
1187 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1188 ; CHECK-NEXT: vsra.vx v8, v8, a0
1190 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1191 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1192 %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1193 ret <vscale x 16 x i32> %v
1196 define <vscale x 16 x i32> @vsra_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1197 ; CHECK-LABEL: vsra_vi_nxv16i32:
1199 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1200 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1202 %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 5), <vscale x 16 x i1> %m, i32 %evl)
1203 ret <vscale x 16 x i32> %v
1206 define <vscale x 16 x i32> @vsra_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1207 ; CHECK-LABEL: vsra_vi_nxv16i32_unmasked:
1209 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1210 ; CHECK-NEXT: vsra.vi v8, v8, 5
1212 %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 5), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1213 ret <vscale x 16 x i32> %v
1216 declare <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1218 define <vscale x 1 x i64> @vsra_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1219 ; CHECK-LABEL: vsra_vv_nxv1i64:
1221 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1222 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
1224 %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1225 ret <vscale x 1 x i64> %v
1228 define <vscale x 1 x i64> @vsra_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1229 ; CHECK-LABEL: vsra_vv_nxv1i64_unmasked:
1231 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1232 ; CHECK-NEXT: vsra.vv v8, v8, v9
1234 %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1235 ret <vscale x 1 x i64> %v
1238 define <vscale x 1 x i64> @vsra_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1239 ; RV32-LABEL: vsra_vx_nxv1i64:
1241 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1242 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1245 ; RV64-LABEL: vsra_vx_nxv1i64:
1247 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1248 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1250 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1251 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1252 %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1253 ret <vscale x 1 x i64> %v
1256 define <vscale x 1 x i64> @vsra_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1257 ; RV32-LABEL: vsra_vx_nxv1i64_unmasked:
1259 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1260 ; RV32-NEXT: vsra.vx v8, v8, a0
1263 ; RV64-LABEL: vsra_vx_nxv1i64_unmasked:
1265 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1266 ; RV64-NEXT: vsra.vx v8, v8, a0
1268 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1269 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1270 %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1271 ret <vscale x 1 x i64> %v
1274 define <vscale x 1 x i64> @vsra_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1275 ; CHECK-LABEL: vsra_vi_nxv1i64:
1277 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1278 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1280 %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 5), <vscale x 1 x i1> %m, i32 %evl)
1281 ret <vscale x 1 x i64> %v
1284 define <vscale x 1 x i64> @vsra_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1285 ; CHECK-LABEL: vsra_vi_nxv1i64_unmasked:
1287 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1288 ; CHECK-NEXT: vsra.vi v8, v8, 5
1290 %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1291 ret <vscale x 1 x i64> %v
1294 declare <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1296 define <vscale x 2 x i64> @vsra_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1297 ; CHECK-LABEL: vsra_vv_nxv2i64:
1299 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1300 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
1302 %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1303 ret <vscale x 2 x i64> %v
1306 define <vscale x 2 x i64> @vsra_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1307 ; CHECK-LABEL: vsra_vv_nxv2i64_unmasked:
1309 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1310 ; CHECK-NEXT: vsra.vv v8, v8, v10
1312 %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1313 ret <vscale x 2 x i64> %v
1316 define <vscale x 2 x i64> @vsra_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1317 ; RV32-LABEL: vsra_vx_nxv2i64:
1319 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1320 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1323 ; RV64-LABEL: vsra_vx_nxv2i64:
1325 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1326 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1328 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1329 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1330 %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1331 ret <vscale x 2 x i64> %v
1334 define <vscale x 2 x i64> @vsra_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1335 ; RV32-LABEL: vsra_vx_nxv2i64_unmasked:
1337 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1338 ; RV32-NEXT: vsra.vx v8, v8, a0
1341 ; RV64-LABEL: vsra_vx_nxv2i64_unmasked:
1343 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1344 ; RV64-NEXT: vsra.vx v8, v8, a0
1346 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1347 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1348 %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1349 ret <vscale x 2 x i64> %v
1352 define <vscale x 2 x i64> @vsra_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1353 ; CHECK-LABEL: vsra_vi_nxv2i64:
1355 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1356 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1358 %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 5), <vscale x 2 x i1> %m, i32 %evl)
1359 ret <vscale x 2 x i64> %v
1362 define <vscale x 2 x i64> @vsra_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1363 ; CHECK-LABEL: vsra_vi_nxv2i64_unmasked:
1365 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1366 ; CHECK-NEXT: vsra.vi v8, v8, 5
1368 %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1369 ret <vscale x 2 x i64> %v
1372 declare <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1374 define <vscale x 4 x i64> @vsra_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1375 ; CHECK-LABEL: vsra_vv_nxv4i64:
1377 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1378 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
1380 %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1381 ret <vscale x 4 x i64> %v
1384 define <vscale x 4 x i64> @vsra_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1385 ; CHECK-LABEL: vsra_vv_nxv4i64_unmasked:
1387 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1388 ; CHECK-NEXT: vsra.vv v8, v8, v12
1390 %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1391 ret <vscale x 4 x i64> %v
1394 define <vscale x 4 x i64> @vsra_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1395 ; RV32-LABEL: vsra_vx_nxv4i64:
1397 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1398 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1401 ; RV64-LABEL: vsra_vx_nxv4i64:
1403 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1404 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1406 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1407 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1408 %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1409 ret <vscale x 4 x i64> %v
1412 define <vscale x 4 x i64> @vsra_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1413 ; RV32-LABEL: vsra_vx_nxv4i64_unmasked:
1415 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1416 ; RV32-NEXT: vsra.vx v8, v8, a0
1419 ; RV64-LABEL: vsra_vx_nxv4i64_unmasked:
1421 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1422 ; RV64-NEXT: vsra.vx v8, v8, a0
1424 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1425 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1426 %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1427 ret <vscale x 4 x i64> %v
1430 define <vscale x 4 x i64> @vsra_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1431 ; CHECK-LABEL: vsra_vi_nxv4i64:
1433 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1434 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1436 %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 5), <vscale x 4 x i1> %m, i32 %evl)
1437 ret <vscale x 4 x i64> %v
1440 define <vscale x 4 x i64> @vsra_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1441 ; CHECK-LABEL: vsra_vi_nxv4i64_unmasked:
1443 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1444 ; CHECK-NEXT: vsra.vi v8, v8, 5
1446 %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1447 ret <vscale x 4 x i64> %v
1450 declare <vscale x 6 x i64> @llvm.vp.ashr.nxv6i64(<vscale x 6 x i64>, <vscale x 6 x i64>, <vscale x 6 x i1>, i32)
1452 define <vscale x 6 x i64> @vsra_vv_nxv6i64(<vscale x 6 x i64> %va, <vscale x 6 x i64> %b, <vscale x 6 x i1> %m, i32 zeroext %evl) {
1453 ; CHECK-LABEL: vsra_vv_nxv6i64:
1455 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1456 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1458 %v = call <vscale x 6 x i64> @llvm.vp.ashr.nxv6i64(<vscale x 6 x i64> %va, <vscale x 6 x i64> %b, <vscale x 6 x i1> %m, i32 %evl)
1459 ret <vscale x 6 x i64> %v
1462 declare <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1464 define <vscale x 8 x i64> @vsra_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1465 ; CHECK-LABEL: vsra_vv_nxv8i64:
1467 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1468 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1470 %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1471 ret <vscale x 8 x i64> %v
1474 define <vscale x 8 x i64> @vsra_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1475 ; CHECK-LABEL: vsra_vv_nxv8i64_unmasked:
1477 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1478 ; CHECK-NEXT: vsra.vv v8, v8, v16
1480 %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1481 ret <vscale x 8 x i64> %v
1484 define <vscale x 8 x i64> @vsra_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1485 ; RV32-LABEL: vsra_vx_nxv8i64:
1487 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1488 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1491 ; RV64-LABEL: vsra_vx_nxv8i64:
1493 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1494 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1496 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1497 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1498 %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1499 ret <vscale x 8 x i64> %v
1502 define <vscale x 8 x i64> @vsra_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1503 ; RV32-LABEL: vsra_vx_nxv8i64_unmasked:
1505 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1506 ; RV32-NEXT: vsra.vx v8, v8, a0
1509 ; RV64-LABEL: vsra_vx_nxv8i64_unmasked:
1511 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1512 ; RV64-NEXT: vsra.vx v8, v8, a0
1514 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1515 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1516 %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1517 ret <vscale x 8 x i64> %v
1520 define <vscale x 8 x i64> @vsra_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1521 ; CHECK-LABEL: vsra_vi_nxv8i64:
1523 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1524 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1526 %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 5), <vscale x 8 x i1> %m, i32 %evl)
1527 ret <vscale x 8 x i64> %v
1530 define <vscale x 8 x i64> @vsra_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1531 ; CHECK-LABEL: vsra_vi_nxv8i64_unmasked:
1533 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1534 ; CHECK-NEXT: vsra.vi v8, v8, 5
1536 %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1537 ret <vscale x 8 x i64> %v