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 a2, zero, e8, m1, ta, ma
13 ; CHECK-NEXT: vadd.vv v8, v8, v8
14 ; CHECK-NEXT: vsra.vi v8, v8, 1
15 ; CHECK-NEXT: vmv.v.x v9, a0
16 ; CHECK-NEXT: li a0, 127
17 ; CHECK-NEXT: vand.vx v9, v9, a0
18 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
19 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
21 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
22 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
23 %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)
24 ret <vscale x 8 x i7> %v
27 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)
29 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) {
30 ; CHECK-LABEL: vsra_vv_nxv1i8:
32 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
33 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
35 %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)
36 ret <vscale x 1 x i8> %v
39 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) {
40 ; CHECK-LABEL: vsra_vv_nxv1i8_unmasked:
42 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
43 ; CHECK-NEXT: vsra.vv v8, v8, v9
45 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
46 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
47 %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)
48 ret <vscale x 1 x i8> %v
51 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) {
52 ; CHECK-LABEL: vsra_vx_nxv1i8:
54 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
55 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
57 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
58 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
59 %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)
60 ret <vscale x 1 x i8> %v
63 define <vscale x 1 x i8> @vsra_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
64 ; CHECK-LABEL: vsra_vx_nxv1i8_unmasked:
66 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
67 ; CHECK-NEXT: vsra.vx v8, v8, a0
69 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
70 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
71 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
72 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
73 %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)
74 ret <vscale x 1 x i8> %v
77 define <vscale x 1 x i8> @vsra_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
78 ; CHECK-LABEL: vsra_vi_nxv1i8:
80 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
81 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
83 %elt.head = insertelement <vscale x 1 x i8> poison, i8 5, i32 0
84 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
85 %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)
86 ret <vscale x 1 x i8> %v
89 define <vscale x 1 x i8> @vsra_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
90 ; CHECK-LABEL: vsra_vi_nxv1i8_unmasked:
92 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
93 ; CHECK-NEXT: vsra.vi v8, v8, 5
95 %elt.head = insertelement <vscale x 1 x i8> poison, i8 5, i32 0
96 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
97 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
98 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
99 %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)
100 ret <vscale x 1 x i8> %v
103 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)
105 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) {
106 ; CHECK-LABEL: vsra_vv_nxv2i8:
108 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
109 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
111 %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)
112 ret <vscale x 2 x i8> %v
115 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) {
116 ; CHECK-LABEL: vsra_vv_nxv2i8_unmasked:
118 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
119 ; CHECK-NEXT: vsra.vv v8, v8, v9
121 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
122 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
123 %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)
124 ret <vscale x 2 x i8> %v
127 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) {
128 ; CHECK-LABEL: vsra_vx_nxv2i8:
130 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
131 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
133 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
134 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
135 %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)
136 ret <vscale x 2 x i8> %v
139 define <vscale x 2 x i8> @vsra_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
140 ; CHECK-LABEL: vsra_vx_nxv2i8_unmasked:
142 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
143 ; CHECK-NEXT: vsra.vx v8, v8, a0
145 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
146 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
147 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
148 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
149 %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)
150 ret <vscale x 2 x i8> %v
153 define <vscale x 2 x i8> @vsra_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
154 ; CHECK-LABEL: vsra_vi_nxv2i8:
156 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
157 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
159 %elt.head = insertelement <vscale x 2 x i8> poison, i8 5, i32 0
160 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
161 %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)
162 ret <vscale x 2 x i8> %v
165 define <vscale x 2 x i8> @vsra_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
166 ; CHECK-LABEL: vsra_vi_nxv2i8_unmasked:
168 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
169 ; CHECK-NEXT: vsra.vi v8, v8, 5
171 %elt.head = insertelement <vscale x 2 x i8> poison, i8 5, i32 0
172 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
173 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
174 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
175 %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)
176 ret <vscale x 2 x i8> %v
179 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)
181 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) {
182 ; CHECK-LABEL: vsra_vv_nxv4i8:
184 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
185 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
187 %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)
188 ret <vscale x 4 x i8> %v
191 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) {
192 ; CHECK-LABEL: vsra_vv_nxv4i8_unmasked:
194 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
195 ; CHECK-NEXT: vsra.vv v8, v8, v9
197 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
198 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
199 %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)
200 ret <vscale x 4 x i8> %v
203 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) {
204 ; CHECK-LABEL: vsra_vx_nxv4i8:
206 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
207 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
209 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
210 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
211 %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)
212 ret <vscale x 4 x i8> %v
215 define <vscale x 4 x i8> @vsra_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
216 ; CHECK-LABEL: vsra_vx_nxv4i8_unmasked:
218 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
219 ; CHECK-NEXT: vsra.vx v8, v8, a0
221 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
222 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
223 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
224 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
225 %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)
226 ret <vscale x 4 x i8> %v
229 define <vscale x 4 x i8> @vsra_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
230 ; CHECK-LABEL: vsra_vi_nxv4i8:
232 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
233 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
235 %elt.head = insertelement <vscale x 4 x i8> poison, i8 5, i32 0
236 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
237 %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)
238 ret <vscale x 4 x i8> %v
241 define <vscale x 4 x i8> @vsra_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
242 ; CHECK-LABEL: vsra_vi_nxv4i8_unmasked:
244 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
245 ; CHECK-NEXT: vsra.vi v8, v8, 5
247 %elt.head = insertelement <vscale x 4 x i8> poison, i8 5, i32 0
248 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
249 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
250 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
251 %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)
252 ret <vscale x 4 x i8> %v
255 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)
257 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) {
258 ; CHECK-LABEL: vsra_vv_nxv8i8:
260 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
261 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
263 %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)
264 ret <vscale x 8 x i8> %v
267 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) {
268 ; CHECK-LABEL: vsra_vv_nxv8i8_unmasked:
270 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
271 ; CHECK-NEXT: vsra.vv v8, v8, v9
273 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
274 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
275 %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)
276 ret <vscale x 8 x i8> %v
279 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) {
280 ; CHECK-LABEL: vsra_vx_nxv8i8:
282 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
283 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
285 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
286 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
287 %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)
288 ret <vscale x 8 x i8> %v
291 define <vscale x 8 x i8> @vsra_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
292 ; CHECK-LABEL: vsra_vx_nxv8i8_unmasked:
294 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
295 ; CHECK-NEXT: vsra.vx v8, v8, a0
297 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
298 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
299 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
300 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
301 %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)
302 ret <vscale x 8 x i8> %v
305 define <vscale x 8 x i8> @vsra_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
306 ; CHECK-LABEL: vsra_vi_nxv8i8:
308 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
309 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
311 %elt.head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0
312 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
313 %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)
314 ret <vscale x 8 x i8> %v
317 define <vscale x 8 x i8> @vsra_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
318 ; CHECK-LABEL: vsra_vi_nxv8i8_unmasked:
320 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
321 ; CHECK-NEXT: vsra.vi v8, v8, 5
323 %elt.head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0
324 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
325 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
326 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
327 %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)
328 ret <vscale x 8 x i8> %v
331 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)
333 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) {
334 ; CHECK-LABEL: vsra_vv_nxv16i8:
336 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
337 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
339 %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)
340 ret <vscale x 16 x i8> %v
343 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) {
344 ; CHECK-LABEL: vsra_vv_nxv16i8_unmasked:
346 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
347 ; CHECK-NEXT: vsra.vv v8, v8, v10
349 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
350 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
351 %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)
352 ret <vscale x 16 x i8> %v
355 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) {
356 ; CHECK-LABEL: vsra_vx_nxv16i8:
358 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
359 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
361 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
362 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
363 %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)
364 ret <vscale x 16 x i8> %v
367 define <vscale x 16 x i8> @vsra_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
368 ; CHECK-LABEL: vsra_vx_nxv16i8_unmasked:
370 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
371 ; CHECK-NEXT: vsra.vx v8, v8, a0
373 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
374 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
375 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
376 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
377 %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)
378 ret <vscale x 16 x i8> %v
381 define <vscale x 16 x i8> @vsra_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
382 ; CHECK-LABEL: vsra_vi_nxv16i8:
384 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
385 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
387 %elt.head = insertelement <vscale x 16 x i8> poison, i8 5, i32 0
388 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
389 %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)
390 ret <vscale x 16 x i8> %v
393 define <vscale x 16 x i8> @vsra_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
394 ; CHECK-LABEL: vsra_vi_nxv16i8_unmasked:
396 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
397 ; CHECK-NEXT: vsra.vi v8, v8, 5
399 %elt.head = insertelement <vscale x 16 x i8> poison, i8 5, i32 0
400 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
401 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
402 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
403 %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)
404 ret <vscale x 16 x i8> %v
407 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)
409 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) {
410 ; CHECK-LABEL: vsra_vv_nxv32i8:
412 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
413 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
415 %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)
416 ret <vscale x 32 x i8> %v
419 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) {
420 ; CHECK-LABEL: vsra_vv_nxv32i8_unmasked:
422 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
423 ; CHECK-NEXT: vsra.vv v8, v8, v12
425 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
426 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
427 %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)
428 ret <vscale x 32 x i8> %v
431 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) {
432 ; CHECK-LABEL: vsra_vx_nxv32i8:
434 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
435 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
437 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
438 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
439 %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)
440 ret <vscale x 32 x i8> %v
443 define <vscale x 32 x i8> @vsra_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
444 ; CHECK-LABEL: vsra_vx_nxv32i8_unmasked:
446 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
447 ; CHECK-NEXT: vsra.vx v8, v8, a0
449 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
450 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
451 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
452 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
453 %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)
454 ret <vscale x 32 x i8> %v
457 define <vscale x 32 x i8> @vsra_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
458 ; CHECK-LABEL: vsra_vi_nxv32i8:
460 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
461 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
463 %elt.head = insertelement <vscale x 32 x i8> poison, i8 5, i32 0
464 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
465 %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)
466 ret <vscale x 32 x i8> %v
469 define <vscale x 32 x i8> @vsra_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
470 ; CHECK-LABEL: vsra_vi_nxv32i8_unmasked:
472 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
473 ; CHECK-NEXT: vsra.vi v8, v8, 5
475 %elt.head = insertelement <vscale x 32 x i8> poison, i8 5, i32 0
476 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
477 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
478 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
479 %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)
480 ret <vscale x 32 x i8> %v
483 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)
485 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) {
486 ; CHECK-LABEL: vsra_vv_nxv64i8:
488 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
489 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
491 %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)
492 ret <vscale x 64 x i8> %v
495 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) {
496 ; CHECK-LABEL: vsra_vv_nxv64i8_unmasked:
498 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
499 ; CHECK-NEXT: vsra.vv v8, v8, v16
501 %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
502 %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
503 %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)
504 ret <vscale x 64 x i8> %v
507 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) {
508 ; CHECK-LABEL: vsra_vx_nxv64i8:
510 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
511 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
513 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
514 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
515 %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)
516 ret <vscale x 64 x i8> %v
519 define <vscale x 64 x i8> @vsra_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
520 ; CHECK-LABEL: vsra_vx_nxv64i8_unmasked:
522 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
523 ; CHECK-NEXT: vsra.vx v8, v8, a0
525 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
526 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
527 %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
528 %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
529 %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)
530 ret <vscale x 64 x i8> %v
533 define <vscale x 64 x i8> @vsra_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
534 ; CHECK-LABEL: vsra_vi_nxv64i8:
536 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
537 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
539 %elt.head = insertelement <vscale x 64 x i8> poison, i8 5, i32 0
540 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
541 %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)
542 ret <vscale x 64 x i8> %v
545 define <vscale x 64 x i8> @vsra_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
546 ; CHECK-LABEL: vsra_vi_nxv64i8_unmasked:
548 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
549 ; CHECK-NEXT: vsra.vi v8, v8, 5
551 %elt.head = insertelement <vscale x 64 x i8> poison, i8 5, i32 0
552 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
553 %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
554 %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
555 %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)
556 ret <vscale x 64 x i8> %v
559 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)
561 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) {
562 ; CHECK-LABEL: vsra_vv_nxv1i16:
564 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
565 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
567 %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)
568 ret <vscale x 1 x i16> %v
571 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) {
572 ; CHECK-LABEL: vsra_vv_nxv1i16_unmasked:
574 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
575 ; CHECK-NEXT: vsra.vv v8, v8, v9
577 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
578 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
579 %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)
580 ret <vscale x 1 x i16> %v
583 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) {
584 ; CHECK-LABEL: vsra_vx_nxv1i16:
586 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
587 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
589 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
590 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
591 %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)
592 ret <vscale x 1 x i16> %v
595 define <vscale x 1 x i16> @vsra_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
596 ; CHECK-LABEL: vsra_vx_nxv1i16_unmasked:
598 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
599 ; CHECK-NEXT: vsra.vx v8, v8, a0
601 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
602 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
603 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
604 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
605 %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)
606 ret <vscale x 1 x i16> %v
609 define <vscale x 1 x i16> @vsra_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
610 ; CHECK-LABEL: vsra_vi_nxv1i16:
612 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
613 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
615 %elt.head = insertelement <vscale x 1 x i16> poison, i16 5, i32 0
616 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
617 %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)
618 ret <vscale x 1 x i16> %v
621 define <vscale x 1 x i16> @vsra_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
622 ; CHECK-LABEL: vsra_vi_nxv1i16_unmasked:
624 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
625 ; CHECK-NEXT: vsra.vi v8, v8, 5
627 %elt.head = insertelement <vscale x 1 x i16> poison, i16 5, i32 0
628 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
629 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
630 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
631 %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)
632 ret <vscale x 1 x i16> %v
635 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)
637 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) {
638 ; CHECK-LABEL: vsra_vv_nxv2i16:
640 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
641 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
643 %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)
644 ret <vscale x 2 x i16> %v
647 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) {
648 ; CHECK-LABEL: vsra_vv_nxv2i16_unmasked:
650 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
651 ; CHECK-NEXT: vsra.vv v8, v8, v9
653 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
654 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
655 %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)
656 ret <vscale x 2 x i16> %v
659 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) {
660 ; CHECK-LABEL: vsra_vx_nxv2i16:
662 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
663 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
665 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
666 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
667 %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)
668 ret <vscale x 2 x i16> %v
671 define <vscale x 2 x i16> @vsra_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
672 ; CHECK-LABEL: vsra_vx_nxv2i16_unmasked:
674 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
675 ; CHECK-NEXT: vsra.vx v8, v8, a0
677 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
678 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
679 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
680 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
681 %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)
682 ret <vscale x 2 x i16> %v
685 define <vscale x 2 x i16> @vsra_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
686 ; CHECK-LABEL: vsra_vi_nxv2i16:
688 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
689 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
691 %elt.head = insertelement <vscale x 2 x i16> poison, i16 5, i32 0
692 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
693 %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)
694 ret <vscale x 2 x i16> %v
697 define <vscale x 2 x i16> @vsra_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
698 ; CHECK-LABEL: vsra_vi_nxv2i16_unmasked:
700 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
701 ; CHECK-NEXT: vsra.vi v8, v8, 5
703 %elt.head = insertelement <vscale x 2 x i16> poison, i16 5, i32 0
704 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
705 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
706 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
707 %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)
708 ret <vscale x 2 x i16> %v
711 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)
713 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) {
714 ; CHECK-LABEL: vsra_vv_nxv4i16:
716 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
717 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
719 %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)
720 ret <vscale x 4 x i16> %v
723 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) {
724 ; CHECK-LABEL: vsra_vv_nxv4i16_unmasked:
726 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
727 ; CHECK-NEXT: vsra.vv v8, v8, v9
729 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
730 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
731 %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)
732 ret <vscale x 4 x i16> %v
735 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) {
736 ; CHECK-LABEL: vsra_vx_nxv4i16:
738 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
739 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
741 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
742 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
743 %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)
744 ret <vscale x 4 x i16> %v
747 define <vscale x 4 x i16> @vsra_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
748 ; CHECK-LABEL: vsra_vx_nxv4i16_unmasked:
750 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
751 ; CHECK-NEXT: vsra.vx v8, v8, a0
753 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
754 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
755 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
756 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
757 %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)
758 ret <vscale x 4 x i16> %v
761 define <vscale x 4 x i16> @vsra_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
762 ; CHECK-LABEL: vsra_vi_nxv4i16:
764 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
765 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
767 %elt.head = insertelement <vscale x 4 x i16> poison, i16 5, i32 0
768 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
769 %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)
770 ret <vscale x 4 x i16> %v
773 define <vscale x 4 x i16> @vsra_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
774 ; CHECK-LABEL: vsra_vi_nxv4i16_unmasked:
776 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
777 ; CHECK-NEXT: vsra.vi v8, v8, 5
779 %elt.head = insertelement <vscale x 4 x i16> poison, i16 5, i32 0
780 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
781 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
782 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
783 %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)
784 ret <vscale x 4 x i16> %v
787 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)
789 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) {
790 ; CHECK-LABEL: vsra_vv_nxv8i16:
792 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
793 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
795 %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)
796 ret <vscale x 8 x i16> %v
799 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) {
800 ; CHECK-LABEL: vsra_vv_nxv8i16_unmasked:
802 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
803 ; CHECK-NEXT: vsra.vv v8, v8, v10
805 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
806 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
807 %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)
808 ret <vscale x 8 x i16> %v
811 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) {
812 ; CHECK-LABEL: vsra_vx_nxv8i16:
814 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
815 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
817 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
818 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
819 %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)
820 ret <vscale x 8 x i16> %v
823 define <vscale x 8 x i16> @vsra_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
824 ; CHECK-LABEL: vsra_vx_nxv8i16_unmasked:
826 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
827 ; CHECK-NEXT: vsra.vx v8, v8, a0
829 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
830 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
831 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
832 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
833 %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)
834 ret <vscale x 8 x i16> %v
837 define <vscale x 8 x i16> @vsra_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
838 ; CHECK-LABEL: vsra_vi_nxv8i16:
840 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
841 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
843 %elt.head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0
844 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
845 %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)
846 ret <vscale x 8 x i16> %v
849 define <vscale x 8 x i16> @vsra_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
850 ; CHECK-LABEL: vsra_vi_nxv8i16_unmasked:
852 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
853 ; CHECK-NEXT: vsra.vi v8, v8, 5
855 %elt.head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0
856 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
857 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
858 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
859 %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)
860 ret <vscale x 8 x i16> %v
863 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)
865 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) {
866 ; CHECK-LABEL: vsra_vv_nxv16i16:
868 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
869 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
871 %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)
872 ret <vscale x 16 x i16> %v
875 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) {
876 ; CHECK-LABEL: vsra_vv_nxv16i16_unmasked:
878 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
879 ; CHECK-NEXT: vsra.vv v8, v8, v12
881 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
882 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
883 %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)
884 ret <vscale x 16 x i16> %v
887 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) {
888 ; CHECK-LABEL: vsra_vx_nxv16i16:
890 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
891 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
893 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
894 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
895 %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)
896 ret <vscale x 16 x i16> %v
899 define <vscale x 16 x i16> @vsra_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
900 ; CHECK-LABEL: vsra_vx_nxv16i16_unmasked:
902 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
903 ; CHECK-NEXT: vsra.vx v8, v8, a0
905 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
906 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
907 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
908 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
909 %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)
910 ret <vscale x 16 x i16> %v
913 define <vscale x 16 x i16> @vsra_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
914 ; CHECK-LABEL: vsra_vi_nxv16i16:
916 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
917 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
919 %elt.head = insertelement <vscale x 16 x i16> poison, i16 5, i32 0
920 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
921 %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)
922 ret <vscale x 16 x i16> %v
925 define <vscale x 16 x i16> @vsra_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
926 ; CHECK-LABEL: vsra_vi_nxv16i16_unmasked:
928 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
929 ; CHECK-NEXT: vsra.vi v8, v8, 5
931 %elt.head = insertelement <vscale x 16 x i16> poison, i16 5, i32 0
932 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
933 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
934 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
935 %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)
936 ret <vscale x 16 x i16> %v
939 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)
941 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) {
942 ; CHECK-LABEL: vsra_vv_nxv32i16:
944 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
945 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
947 %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)
948 ret <vscale x 32 x i16> %v
951 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) {
952 ; CHECK-LABEL: vsra_vv_nxv32i16_unmasked:
954 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
955 ; CHECK-NEXT: vsra.vv v8, v8, v16
957 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
958 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
959 %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)
960 ret <vscale x 32 x i16> %v
963 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) {
964 ; CHECK-LABEL: vsra_vx_nxv32i16:
966 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
967 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
969 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
970 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
971 %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)
972 ret <vscale x 32 x i16> %v
975 define <vscale x 32 x i16> @vsra_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
976 ; CHECK-LABEL: vsra_vx_nxv32i16_unmasked:
978 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
979 ; CHECK-NEXT: vsra.vx v8, v8, a0
981 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
982 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
983 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
984 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
985 %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)
986 ret <vscale x 32 x i16> %v
989 define <vscale x 32 x i16> @vsra_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
990 ; CHECK-LABEL: vsra_vi_nxv32i16:
992 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
993 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
995 %elt.head = insertelement <vscale x 32 x i16> poison, i16 5, i32 0
996 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
997 %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)
998 ret <vscale x 32 x i16> %v
1001 define <vscale x 32 x i16> @vsra_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
1002 ; CHECK-LABEL: vsra_vi_nxv32i16_unmasked:
1004 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
1005 ; CHECK-NEXT: vsra.vi v8, v8, 5
1007 %elt.head = insertelement <vscale x 32 x i16> poison, i16 5, i32 0
1008 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
1009 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
1010 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
1011 %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)
1012 ret <vscale x 32 x i16> %v
1015 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)
1017 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) {
1018 ; CHECK-LABEL: vsra_vv_nxv1i32:
1020 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1021 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
1023 %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)
1024 ret <vscale x 1 x i32> %v
1027 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) {
1028 ; CHECK-LABEL: vsra_vv_nxv1i32_unmasked:
1030 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1031 ; CHECK-NEXT: vsra.vv v8, v8, v9
1033 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1034 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1035 %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)
1036 ret <vscale x 1 x i32> %v
1039 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) {
1040 ; CHECK-LABEL: vsra_vx_nxv1i32:
1042 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
1043 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1045 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1046 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1047 %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)
1048 ret <vscale x 1 x i32> %v
1051 define <vscale x 1 x i32> @vsra_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
1052 ; CHECK-LABEL: vsra_vx_nxv1i32_unmasked:
1054 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
1055 ; CHECK-NEXT: vsra.vx v8, v8, a0
1057 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1058 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1059 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1060 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1061 %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)
1062 ret <vscale x 1 x i32> %v
1065 define <vscale x 1 x i32> @vsra_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1066 ; CHECK-LABEL: vsra_vi_nxv1i32:
1068 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1069 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1071 %elt.head = insertelement <vscale x 1 x i32> poison, i32 5, i32 0
1072 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1073 %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)
1074 ret <vscale x 1 x i32> %v
1077 define <vscale x 1 x i32> @vsra_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
1078 ; CHECK-LABEL: vsra_vi_nxv1i32_unmasked:
1080 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1081 ; CHECK-NEXT: vsra.vi v8, v8, 5
1083 %elt.head = insertelement <vscale x 1 x i32> poison, i32 5, i32 0
1084 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1085 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1086 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1087 %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)
1088 ret <vscale x 1 x i32> %v
1091 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)
1093 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) {
1094 ; CHECK-LABEL: vsra_vv_nxv2i32:
1096 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1097 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
1099 %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)
1100 ret <vscale x 2 x i32> %v
1103 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) {
1104 ; CHECK-LABEL: vsra_vv_nxv2i32_unmasked:
1106 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1107 ; CHECK-NEXT: vsra.vv v8, v8, v9
1109 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1110 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1111 %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)
1112 ret <vscale x 2 x i32> %v
1115 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) {
1116 ; CHECK-LABEL: vsra_vx_nxv2i32:
1118 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
1119 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1121 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1122 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1123 %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)
1124 ret <vscale x 2 x i32> %v
1127 define <vscale x 2 x i32> @vsra_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
1128 ; CHECK-LABEL: vsra_vx_nxv2i32_unmasked:
1130 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
1131 ; CHECK-NEXT: vsra.vx v8, v8, a0
1133 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1134 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1135 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1136 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1137 %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)
1138 ret <vscale x 2 x i32> %v
1141 define <vscale x 2 x i32> @vsra_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1142 ; CHECK-LABEL: vsra_vi_nxv2i32:
1144 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1145 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1147 %elt.head = insertelement <vscale x 2 x i32> poison, i32 5, i32 0
1148 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1149 %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)
1150 ret <vscale x 2 x i32> %v
1153 define <vscale x 2 x i32> @vsra_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1154 ; CHECK-LABEL: vsra_vi_nxv2i32_unmasked:
1156 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1157 ; CHECK-NEXT: vsra.vi v8, v8, 5
1159 %elt.head = insertelement <vscale x 2 x i32> poison, i32 5, i32 0
1160 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1161 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1162 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1163 %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)
1164 ret <vscale x 2 x i32> %v
1167 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)
1169 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) {
1170 ; CHECK-LABEL: vsra_vv_nxv4i32:
1172 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1173 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
1175 %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)
1176 ret <vscale x 4 x i32> %v
1179 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) {
1180 ; CHECK-LABEL: vsra_vv_nxv4i32_unmasked:
1182 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1183 ; CHECK-NEXT: vsra.vv v8, v8, v10
1185 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1186 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1187 %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)
1188 ret <vscale x 4 x i32> %v
1191 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) {
1192 ; CHECK-LABEL: vsra_vx_nxv4i32:
1194 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1195 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1197 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1198 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1199 %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)
1200 ret <vscale x 4 x i32> %v
1203 define <vscale x 4 x i32> @vsra_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1204 ; CHECK-LABEL: vsra_vx_nxv4i32_unmasked:
1206 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1207 ; CHECK-NEXT: vsra.vx v8, v8, a0
1209 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1210 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1211 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1212 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1213 %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)
1214 ret <vscale x 4 x i32> %v
1217 define <vscale x 4 x i32> @vsra_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1218 ; CHECK-LABEL: vsra_vi_nxv4i32:
1220 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1221 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1223 %elt.head = insertelement <vscale x 4 x i32> poison, i32 5, i32 0
1224 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1225 %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)
1226 ret <vscale x 4 x i32> %v
1229 define <vscale x 4 x i32> @vsra_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1230 ; CHECK-LABEL: vsra_vi_nxv4i32_unmasked:
1232 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1233 ; CHECK-NEXT: vsra.vi v8, v8, 5
1235 %elt.head = insertelement <vscale x 4 x i32> poison, i32 5, i32 0
1236 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1237 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1238 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1239 %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)
1240 ret <vscale x 4 x i32> %v
1243 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)
1245 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) {
1246 ; CHECK-LABEL: vsra_vv_nxv8i32:
1248 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1249 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
1251 %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)
1252 ret <vscale x 8 x i32> %v
1255 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) {
1256 ; CHECK-LABEL: vsra_vv_nxv8i32_unmasked:
1258 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1259 ; CHECK-NEXT: vsra.vv v8, v8, v12
1261 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1262 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1263 %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)
1264 ret <vscale x 8 x i32> %v
1267 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) {
1268 ; CHECK-LABEL: vsra_vx_nxv8i32:
1270 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1271 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1273 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1274 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1275 %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)
1276 ret <vscale x 8 x i32> %v
1279 define <vscale x 8 x i32> @vsra_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1280 ; CHECK-LABEL: vsra_vx_nxv8i32_unmasked:
1282 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1283 ; CHECK-NEXT: vsra.vx v8, v8, a0
1285 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1286 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1287 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1288 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1289 %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)
1290 ret <vscale x 8 x i32> %v
1293 define <vscale x 8 x i32> @vsra_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1294 ; CHECK-LABEL: vsra_vi_nxv8i32:
1296 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1297 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1299 %elt.head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0
1300 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1301 %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)
1302 ret <vscale x 8 x i32> %v
1305 define <vscale x 8 x i32> @vsra_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1306 ; CHECK-LABEL: vsra_vi_nxv8i32_unmasked:
1308 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1309 ; CHECK-NEXT: vsra.vi v8, v8, 5
1311 %elt.head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0
1312 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1313 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1314 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1315 %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)
1316 ret <vscale x 8 x i32> %v
1319 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)
1321 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) {
1322 ; CHECK-LABEL: vsra_vv_nxv16i32:
1324 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1325 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1327 %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)
1328 ret <vscale x 16 x i32> %v
1331 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) {
1332 ; CHECK-LABEL: vsra_vv_nxv16i32_unmasked:
1334 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1335 ; CHECK-NEXT: vsra.vv v8, v8, v16
1337 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1338 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1339 %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)
1340 ret <vscale x 16 x i32> %v
1343 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) {
1344 ; CHECK-LABEL: vsra_vx_nxv16i32:
1346 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1347 ; CHECK-NEXT: vsra.vx v8, v8, a0, v0.t
1349 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1350 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1351 %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)
1352 ret <vscale x 16 x i32> %v
1355 define <vscale x 16 x i32> @vsra_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1356 ; CHECK-LABEL: vsra_vx_nxv16i32_unmasked:
1358 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1359 ; CHECK-NEXT: vsra.vx v8, v8, a0
1361 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1362 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1363 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1364 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1365 %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)
1366 ret <vscale x 16 x i32> %v
1369 define <vscale x 16 x i32> @vsra_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1370 ; CHECK-LABEL: vsra_vi_nxv16i32:
1372 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1373 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1375 %elt.head = insertelement <vscale x 16 x i32> poison, i32 5, i32 0
1376 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1377 %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)
1378 ret <vscale x 16 x i32> %v
1381 define <vscale x 16 x i32> @vsra_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1382 ; CHECK-LABEL: vsra_vi_nxv16i32_unmasked:
1384 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1385 ; CHECK-NEXT: vsra.vi v8, v8, 5
1387 %elt.head = insertelement <vscale x 16 x i32> poison, i32 5, i32 0
1388 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1389 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1390 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1391 %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)
1392 ret <vscale x 16 x i32> %v
1395 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)
1397 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) {
1398 ; CHECK-LABEL: vsra_vv_nxv1i64:
1400 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1401 ; CHECK-NEXT: vsra.vv v8, v8, v9, v0.t
1403 %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)
1404 ret <vscale x 1 x i64> %v
1407 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) {
1408 ; CHECK-LABEL: vsra_vv_nxv1i64_unmasked:
1410 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1411 ; CHECK-NEXT: vsra.vv v8, v8, v9
1413 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1414 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1415 %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)
1416 ret <vscale x 1 x i64> %v
1419 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) {
1420 ; RV32-LABEL: vsra_vx_nxv1i64:
1422 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1423 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1426 ; RV64-LABEL: vsra_vx_nxv1i64:
1428 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1429 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1431 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1432 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1433 %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)
1434 ret <vscale x 1 x i64> %v
1437 define <vscale x 1 x i64> @vsra_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1438 ; RV32-LABEL: vsra_vx_nxv1i64_unmasked:
1440 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1441 ; RV32-NEXT: vsra.vx v8, v8, a0
1444 ; RV64-LABEL: vsra_vx_nxv1i64_unmasked:
1446 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1447 ; RV64-NEXT: vsra.vx v8, v8, a0
1449 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1450 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1451 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1452 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1453 %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)
1454 ret <vscale x 1 x i64> %v
1457 define <vscale x 1 x i64> @vsra_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1458 ; CHECK-LABEL: vsra_vi_nxv1i64:
1460 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1461 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1463 %elt.head = insertelement <vscale x 1 x i64> poison, i64 5, i32 0
1464 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1465 %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)
1466 ret <vscale x 1 x i64> %v
1469 define <vscale x 1 x i64> @vsra_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1470 ; CHECK-LABEL: vsra_vi_nxv1i64_unmasked:
1472 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1473 ; CHECK-NEXT: vsra.vi v8, v8, 5
1475 %elt.head = insertelement <vscale x 1 x i64> poison, i64 5, i32 0
1476 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1477 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1478 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1479 %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)
1480 ret <vscale x 1 x i64> %v
1483 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)
1485 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) {
1486 ; CHECK-LABEL: vsra_vv_nxv2i64:
1488 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1489 ; CHECK-NEXT: vsra.vv v8, v8, v10, v0.t
1491 %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)
1492 ret <vscale x 2 x i64> %v
1495 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) {
1496 ; CHECK-LABEL: vsra_vv_nxv2i64_unmasked:
1498 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1499 ; CHECK-NEXT: vsra.vv v8, v8, v10
1501 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1502 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1503 %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)
1504 ret <vscale x 2 x i64> %v
1507 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) {
1508 ; RV32-LABEL: vsra_vx_nxv2i64:
1510 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1511 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1514 ; RV64-LABEL: vsra_vx_nxv2i64:
1516 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1517 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1519 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1520 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1521 %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)
1522 ret <vscale x 2 x i64> %v
1525 define <vscale x 2 x i64> @vsra_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1526 ; RV32-LABEL: vsra_vx_nxv2i64_unmasked:
1528 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1529 ; RV32-NEXT: vsra.vx v8, v8, a0
1532 ; RV64-LABEL: vsra_vx_nxv2i64_unmasked:
1534 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1535 ; RV64-NEXT: vsra.vx v8, v8, a0
1537 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1538 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1539 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1540 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1541 %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)
1542 ret <vscale x 2 x i64> %v
1545 define <vscale x 2 x i64> @vsra_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1546 ; CHECK-LABEL: vsra_vi_nxv2i64:
1548 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1549 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1551 %elt.head = insertelement <vscale x 2 x i64> poison, i64 5, i32 0
1552 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1553 %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)
1554 ret <vscale x 2 x i64> %v
1557 define <vscale x 2 x i64> @vsra_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1558 ; CHECK-LABEL: vsra_vi_nxv2i64_unmasked:
1560 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1561 ; CHECK-NEXT: vsra.vi v8, v8, 5
1563 %elt.head = insertelement <vscale x 2 x i64> poison, i64 5, i32 0
1564 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1565 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1566 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1567 %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)
1568 ret <vscale x 2 x i64> %v
1571 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)
1573 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) {
1574 ; CHECK-LABEL: vsra_vv_nxv4i64:
1576 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1577 ; CHECK-NEXT: vsra.vv v8, v8, v12, v0.t
1579 %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)
1580 ret <vscale x 4 x i64> %v
1583 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) {
1584 ; CHECK-LABEL: vsra_vv_nxv4i64_unmasked:
1586 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1587 ; CHECK-NEXT: vsra.vv v8, v8, v12
1589 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1590 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1591 %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)
1592 ret <vscale x 4 x i64> %v
1595 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) {
1596 ; RV32-LABEL: vsra_vx_nxv4i64:
1598 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1599 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1602 ; RV64-LABEL: vsra_vx_nxv4i64:
1604 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1605 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1607 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1608 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1609 %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)
1610 ret <vscale x 4 x i64> %v
1613 define <vscale x 4 x i64> @vsra_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1614 ; RV32-LABEL: vsra_vx_nxv4i64_unmasked:
1616 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1617 ; RV32-NEXT: vsra.vx v8, v8, a0
1620 ; RV64-LABEL: vsra_vx_nxv4i64_unmasked:
1622 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1623 ; RV64-NEXT: vsra.vx v8, v8, a0
1625 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1626 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1627 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1628 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1629 %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)
1630 ret <vscale x 4 x i64> %v
1633 define <vscale x 4 x i64> @vsra_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1634 ; CHECK-LABEL: vsra_vi_nxv4i64:
1636 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1637 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1639 %elt.head = insertelement <vscale x 4 x i64> poison, i64 5, i32 0
1640 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1641 %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)
1642 ret <vscale x 4 x i64> %v
1645 define <vscale x 4 x i64> @vsra_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1646 ; CHECK-LABEL: vsra_vi_nxv4i64_unmasked:
1648 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1649 ; CHECK-NEXT: vsra.vi v8, v8, 5
1651 %elt.head = insertelement <vscale x 4 x i64> poison, i64 5, i32 0
1652 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1653 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1654 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1655 %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)
1656 ret <vscale x 4 x i64> %v
1659 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)
1661 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) {
1662 ; CHECK-LABEL: vsra_vv_nxv6i64:
1664 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1665 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1667 %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)
1668 ret <vscale x 6 x i64> %v
1671 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)
1673 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) {
1674 ; CHECK-LABEL: vsra_vv_nxv8i64:
1676 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1677 ; CHECK-NEXT: vsra.vv v8, v8, v16, v0.t
1679 %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)
1680 ret <vscale x 8 x i64> %v
1683 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) {
1684 ; CHECK-LABEL: vsra_vv_nxv8i64_unmasked:
1686 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1687 ; CHECK-NEXT: vsra.vv v8, v8, v16
1689 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1690 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1691 %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)
1692 ret <vscale x 8 x i64> %v
1695 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) {
1696 ; RV32-LABEL: vsra_vx_nxv8i64:
1698 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1699 ; RV32-NEXT: vsra.vx v8, v8, a0, v0.t
1702 ; RV64-LABEL: vsra_vx_nxv8i64:
1704 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1705 ; RV64-NEXT: vsra.vx v8, v8, a0, v0.t
1707 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1708 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1709 %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)
1710 ret <vscale x 8 x i64> %v
1713 define <vscale x 8 x i64> @vsra_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1714 ; RV32-LABEL: vsra_vx_nxv8i64_unmasked:
1716 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1717 ; RV32-NEXT: vsra.vx v8, v8, a0
1720 ; RV64-LABEL: vsra_vx_nxv8i64_unmasked:
1722 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1723 ; RV64-NEXT: vsra.vx v8, v8, a0
1725 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1726 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1727 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1728 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1729 %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)
1730 ret <vscale x 8 x i64> %v
1733 define <vscale x 8 x i64> @vsra_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1734 ; CHECK-LABEL: vsra_vi_nxv8i64:
1736 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1737 ; CHECK-NEXT: vsra.vi v8, v8, 5, v0.t
1739 %elt.head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0
1740 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1741 %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)
1742 ret <vscale x 8 x i64> %v
1745 define <vscale x 8 x i64> @vsra_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1746 ; CHECK-LABEL: vsra_vi_nxv8i64_unmasked:
1748 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1749 ; CHECK-NEXT: vsra.vi v8, v8, 5
1751 %elt.head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0
1752 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1753 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1754 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1755 %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)
1756 ret <vscale x 8 x i64> %v