Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsra-sdnode.ll
blob738e9cf805b46f41476368cad3c3db5ba16d053b
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
5 define <vscale x 1 x i8> @vsra_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb) {
6 ; CHECK-LABEL: vsra_vv_nxv1i8:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
9 ; CHECK-NEXT:    vsra.vv v8, v8, v9
10 ; CHECK-NEXT:    ret
11   %vc = ashr <vscale x 1 x i8> %va, %vb
12   ret <vscale x 1 x i8> %vc
15 define <vscale x 1 x i8> @vsra_vv_nxv1i8_sext_zext(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb) {
16 ; CHECK-LABEL: vsra_vv_nxv1i8_sext_zext:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    li a0, 7
19 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
20 ; CHECK-NEXT:    vmin.vx v9, v8, a0
21 ; CHECK-NEXT:    vsra.vv v8, v8, v9
22 ; CHECK-NEXT:    ret
23   %sexted_va = sext <vscale x 1 x i8> %va to <vscale x 1 x i32>
24   %zexted_vb = zext <vscale x 1 x i8> %va to <vscale x 1 x i32>
25   %expand = ashr <vscale x 1 x i32> %sexted_va, %zexted_vb
26   %vc = trunc <vscale x 1 x i32> %expand to <vscale x 1 x i8>
27   ret <vscale x 1 x i8> %vc
30 define <vscale x 1 x i8> @vsra_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) {
31 ; CHECK-LABEL: vsra_vx_nxv1i8:
32 ; CHECK:       # %bb.0:
33 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
34 ; CHECK-NEXT:    vsra.vx v8, v8, a0
35 ; CHECK-NEXT:    ret
36   %head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
37   %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
38   %vc = ashr <vscale x 1 x i8> %va, %splat
39   ret <vscale x 1 x i8> %vc
42 define <vscale x 1 x i8> @vsra_vi_nxv1i8_0(<vscale x 1 x i8> %va) {
43 ; CHECK-LABEL: vsra_vi_nxv1i8_0:
44 ; CHECK:       # %bb.0:
45 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
46 ; CHECK-NEXT:    vsra.vi v8, v8, 6
47 ; CHECK-NEXT:    ret
48   %head = insertelement <vscale x 1 x i8> poison, i8 6, i32 0
49   %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
50   %vc = ashr <vscale x 1 x i8> %va, %splat
51   ret <vscale x 1 x i8> %vc
54 define <vscale x 2 x i8> @vsra_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb) {
55 ; CHECK-LABEL: vsra_vv_nxv2i8:
56 ; CHECK:       # %bb.0:
57 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
58 ; CHECK-NEXT:    vsra.vv v8, v8, v9
59 ; CHECK-NEXT:    ret
60   %vc = ashr <vscale x 2 x i8> %va, %vb
61   ret <vscale x 2 x i8> %vc
64 define <vscale x 2 x i8> @vsra_vv_nxv2i8_sext_zext(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb) {
65 ; CHECK-LABEL: vsra_vv_nxv2i8_sext_zext:
66 ; CHECK:       # %bb.0:
67 ; CHECK-NEXT:    li a0, 7
68 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
69 ; CHECK-NEXT:    vmin.vx v9, v8, a0
70 ; CHECK-NEXT:    vsra.vv v8, v8, v9
71 ; CHECK-NEXT:    ret
72   %sexted_va = sext <vscale x 2 x i8> %va to <vscale x 2 x i32>
73   %zexted_vb = zext <vscale x 2 x i8> %va to <vscale x 2 x i32>
74   %expand = ashr <vscale x 2 x i32> %sexted_va, %zexted_vb
75   %vc = trunc <vscale x 2 x i32> %expand to <vscale x 2 x i8>
76   ret <vscale x 2 x i8> %vc
79 define <vscale x 2 x i8> @vsra_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) {
80 ; CHECK-LABEL: vsra_vx_nxv2i8:
81 ; CHECK:       # %bb.0:
82 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
83 ; CHECK-NEXT:    vsra.vx v8, v8, a0
84 ; CHECK-NEXT:    ret
85   %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
86   %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
87   %vc = ashr <vscale x 2 x i8> %va, %splat
88   ret <vscale x 2 x i8> %vc
91 define <vscale x 2 x i8> @vsra_vi_nxv2i8_0(<vscale x 2 x i8> %va) {
92 ; CHECK-LABEL: vsra_vi_nxv2i8_0:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
95 ; CHECK-NEXT:    vsra.vi v8, v8, 6
96 ; CHECK-NEXT:    ret
97   %head = insertelement <vscale x 2 x i8> poison, i8 6, i32 0
98   %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
99   %vc = ashr <vscale x 2 x i8> %va, %splat
100   ret <vscale x 2 x i8> %vc
103 define <vscale x 4 x i8> @vsra_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb) {
104 ; CHECK-LABEL: vsra_vv_nxv4i8:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
107 ; CHECK-NEXT:    vsra.vv v8, v8, v9
108 ; CHECK-NEXT:    ret
109   %vc = ashr <vscale x 4 x i8> %va, %vb
110   ret <vscale x 4 x i8> %vc
113 define <vscale x 4 x i8> @vsra_vv_nxv4i8_sext_zext(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb) {
114 ; CHECK-LABEL: vsra_vv_nxv4i8_sext_zext:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    li a0, 7
117 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
118 ; CHECK-NEXT:    vmin.vx v9, v8, a0
119 ; CHECK-NEXT:    vsra.vv v8, v8, v9
120 ; CHECK-NEXT:    ret
121   %sexted_va = sext <vscale x 4 x i8> %va to <vscale x 4 x i32>
122   %zexted_vb = zext <vscale x 4 x i8> %va to <vscale x 4 x i32>
123   %expand = ashr <vscale x 4 x i32> %sexted_va, %zexted_vb
124   %vc = trunc <vscale x 4 x i32> %expand to <vscale x 4 x i8>
125   ret <vscale x 4 x i8> %vc
128 define <vscale x 4 x i8> @vsra_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) {
129 ; CHECK-LABEL: vsra_vx_nxv4i8:
130 ; CHECK:       # %bb.0:
131 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
132 ; CHECK-NEXT:    vsra.vx v8, v8, a0
133 ; CHECK-NEXT:    ret
134   %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
135   %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
136   %vc = ashr <vscale x 4 x i8> %va, %splat
137   ret <vscale x 4 x i8> %vc
140 define <vscale x 4 x i8> @vsra_vi_nxv4i8_0(<vscale x 4 x i8> %va) {
141 ; CHECK-LABEL: vsra_vi_nxv4i8_0:
142 ; CHECK:       # %bb.0:
143 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
144 ; CHECK-NEXT:    vsra.vi v8, v8, 6
145 ; CHECK-NEXT:    ret
146   %head = insertelement <vscale x 4 x i8> poison, i8 6, i32 0
147   %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
148   %vc = ashr <vscale x 4 x i8> %va, %splat
149   ret <vscale x 4 x i8> %vc
152 define <vscale x 8 x i8> @vsra_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) {
153 ; CHECK-LABEL: vsra_vv_nxv8i8:
154 ; CHECK:       # %bb.0:
155 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
156 ; CHECK-NEXT:    vsra.vv v8, v8, v9
157 ; CHECK-NEXT:    ret
158   %vc = ashr <vscale x 8 x i8> %va, %vb
159   ret <vscale x 8 x i8> %vc
162 define <vscale x 8 x i8> @vsra_vv_nxv8i8_sext_zext(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) {
163 ; CHECK-LABEL: vsra_vv_nxv8i8_sext_zext:
164 ; CHECK:       # %bb.0:
165 ; CHECK-NEXT:    li a0, 7
166 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
167 ; CHECK-NEXT:    vmin.vx v9, v8, a0
168 ; CHECK-NEXT:    vsra.vv v8, v8, v9
169 ; CHECK-NEXT:    ret
170   %sexted_va = sext <vscale x 8 x i8> %va to <vscale x 8 x i32>
171   %zexted_vb = zext <vscale x 8 x i8> %va to <vscale x 8 x i32>
172   %expand = ashr <vscale x 8 x i32> %sexted_va, %zexted_vb
173   %vc = trunc <vscale x 8 x i32> %expand to <vscale x 8 x i8>
174   ret <vscale x 8 x i8> %vc
177 define <vscale x 8 x i8> @vsra_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) {
178 ; CHECK-LABEL: vsra_vx_nxv8i8:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
181 ; CHECK-NEXT:    vsra.vx v8, v8, a0
182 ; CHECK-NEXT:    ret
183   %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
184   %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
185   %vc = ashr <vscale x 8 x i8> %va, %splat
186   ret <vscale x 8 x i8> %vc
189 define <vscale x 8 x i8> @vsra_vi_nxv8i8_0(<vscale x 8 x i8> %va) {
190 ; CHECK-LABEL: vsra_vi_nxv8i8_0:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
193 ; CHECK-NEXT:    vsra.vi v8, v8, 6
194 ; CHECK-NEXT:    ret
195   %head = insertelement <vscale x 8 x i8> poison, i8 6, i32 0
196   %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
197   %vc = ashr <vscale x 8 x i8> %va, %splat
198   ret <vscale x 8 x i8> %vc
201 define <vscale x 16 x i8> @vsra_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb) {
202 ; CHECK-LABEL: vsra_vv_nxv16i8:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
205 ; CHECK-NEXT:    vsra.vv v8, v8, v10
206 ; CHECK-NEXT:    ret
207   %vc = ashr <vscale x 16 x i8> %va, %vb
208   ret <vscale x 16 x i8> %vc
211 define <vscale x 16 x i8> @vsra_vv_nxv16i8_sext_zext(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb) {
212 ; CHECK-LABEL: vsra_vv_nxv16i8_sext_zext:
213 ; CHECK:       # %bb.0:
214 ; CHECK-NEXT:    li a0, 7
215 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
216 ; CHECK-NEXT:    vmin.vx v10, v8, a0
217 ; CHECK-NEXT:    vsra.vv v8, v8, v10
218 ; CHECK-NEXT:    ret
219   %sexted_va = sext <vscale x 16 x i8> %va to <vscale x 16 x i32>
220   %zexted_vb = zext <vscale x 16 x i8> %va to <vscale x 16 x i32>
221   %expand = ashr <vscale x 16 x i32> %sexted_va, %zexted_vb
222   %vc = trunc <vscale x 16 x i32> %expand to <vscale x 16 x i8>
223   ret <vscale x 16 x i8> %vc
226 define <vscale x 16 x i8> @vsra_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) {
227 ; CHECK-LABEL: vsra_vx_nxv16i8:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
230 ; CHECK-NEXT:    vsra.vx v8, v8, a0
231 ; CHECK-NEXT:    ret
232   %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
233   %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
234   %vc = ashr <vscale x 16 x i8> %va, %splat
235   ret <vscale x 16 x i8> %vc
238 define <vscale x 16 x i8> @vsra_vi_nxv16i8_0(<vscale x 16 x i8> %va) {
239 ; CHECK-LABEL: vsra_vi_nxv16i8_0:
240 ; CHECK:       # %bb.0:
241 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
242 ; CHECK-NEXT:    vsra.vi v8, v8, 6
243 ; CHECK-NEXT:    ret
244   %head = insertelement <vscale x 16 x i8> poison, i8 6, i32 0
245   %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
246   %vc = ashr <vscale x 16 x i8> %va, %splat
247   ret <vscale x 16 x i8> %vc
250 define <vscale x 32 x i8> @vsra_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb) {
251 ; CHECK-LABEL: vsra_vv_nxv32i8:
252 ; CHECK:       # %bb.0:
253 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
254 ; CHECK-NEXT:    vsra.vv v8, v8, v12
255 ; CHECK-NEXT:    ret
256   %vc = ashr <vscale x 32 x i8> %va, %vb
257   ret <vscale x 32 x i8> %vc
260 define <vscale x 32 x i8> @vsra_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) {
261 ; CHECK-LABEL: vsra_vx_nxv32i8:
262 ; CHECK:       # %bb.0:
263 ; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
264 ; CHECK-NEXT:    vsra.vx v8, v8, a0
265 ; CHECK-NEXT:    ret
266   %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
267   %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
268   %vc = ashr <vscale x 32 x i8> %va, %splat
269   ret <vscale x 32 x i8> %vc
272 define <vscale x 32 x i8> @vsra_vi_nxv32i8_0(<vscale x 32 x i8> %va) {
273 ; CHECK-LABEL: vsra_vi_nxv32i8_0:
274 ; CHECK:       # %bb.0:
275 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
276 ; CHECK-NEXT:    vsra.vi v8, v8, 6
277 ; CHECK-NEXT:    ret
278   %head = insertelement <vscale x 32 x i8> poison, i8 6, i32 0
279   %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
280   %vc = ashr <vscale x 32 x i8> %va, %splat
281   ret <vscale x 32 x i8> %vc
284 define <vscale x 64 x i8> @vsra_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb) {
285 ; CHECK-LABEL: vsra_vv_nxv64i8:
286 ; CHECK:       # %bb.0:
287 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
288 ; CHECK-NEXT:    vsra.vv v8, v8, v16
289 ; CHECK-NEXT:    ret
290   %vc = ashr <vscale x 64 x i8> %va, %vb
291   ret <vscale x 64 x i8> %vc
294 define <vscale x 64 x i8> @vsra_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) {
295 ; CHECK-LABEL: vsra_vx_nxv64i8:
296 ; CHECK:       # %bb.0:
297 ; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
298 ; CHECK-NEXT:    vsra.vx v8, v8, a0
299 ; CHECK-NEXT:    ret
300   %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
301   %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
302   %vc = ashr <vscale x 64 x i8> %va, %splat
303   ret <vscale x 64 x i8> %vc
306 define <vscale x 64 x i8> @vsra_vi_nxv64i8_0(<vscale x 64 x i8> %va) {
307 ; CHECK-LABEL: vsra_vi_nxv64i8_0:
308 ; CHECK:       # %bb.0:
309 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
310 ; CHECK-NEXT:    vsra.vi v8, v8, 6
311 ; CHECK-NEXT:    ret
312   %head = insertelement <vscale x 64 x i8> poison, i8 6, i32 0
313   %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
314   %vc = ashr <vscale x 64 x i8> %va, %splat
315   ret <vscale x 64 x i8> %vc
318 define <vscale x 1 x i16> @vsra_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb) {
319 ; CHECK-LABEL: vsra_vv_nxv1i16:
320 ; CHECK:       # %bb.0:
321 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
322 ; CHECK-NEXT:    vsra.vv v8, v8, v9
323 ; CHECK-NEXT:    ret
324   %vc = ashr <vscale x 1 x i16> %va, %vb
325   ret <vscale x 1 x i16> %vc
328 define <vscale x 1 x i16> @vsra_vv_nxv1i16_sext_zext(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb) {
329 ; CHECK-LABEL: vsra_vv_nxv1i16_sext_zext:
330 ; CHECK:       # %bb.0:
331 ; CHECK-NEXT:    li a0, 15
332 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
333 ; CHECK-NEXT:    vmin.vx v9, v8, a0
334 ; CHECK-NEXT:    vsra.vv v8, v8, v9
335 ; CHECK-NEXT:    ret
336   %sexted_va = sext <vscale x 1 x i16> %va to <vscale x 1 x i32>
337   %zexted_vb = zext <vscale x 1 x i16> %va to <vscale x 1 x i32>
338   %expand = ashr <vscale x 1 x i32> %sexted_va, %zexted_vb
339   %vc = trunc <vscale x 1 x i32> %expand to <vscale x 1 x i16>
340   ret <vscale x 1 x i16> %vc
343 define <vscale x 1 x i16> @vsra_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) {
344 ; CHECK-LABEL: vsra_vx_nxv1i16:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
347 ; CHECK-NEXT:    vsra.vx v8, v8, a0
348 ; CHECK-NEXT:    ret
349   %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
350   %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
351   %vc = ashr <vscale x 1 x i16> %va, %splat
352   ret <vscale x 1 x i16> %vc
355 define <vscale x 1 x i16> @vsra_vi_nxv1i16_0(<vscale x 1 x i16> %va) {
356 ; CHECK-LABEL: vsra_vi_nxv1i16_0:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
359 ; CHECK-NEXT:    vsra.vi v8, v8, 6
360 ; CHECK-NEXT:    ret
361   %head = insertelement <vscale x 1 x i16> poison, i16 6, i32 0
362   %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
363   %vc = ashr <vscale x 1 x i16> %va, %splat
364   ret <vscale x 1 x i16> %vc
367 define <vscale x 2 x i16> @vsra_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb) {
368 ; CHECK-LABEL: vsra_vv_nxv2i16:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
371 ; CHECK-NEXT:    vsra.vv v8, v8, v9
372 ; CHECK-NEXT:    ret
373   %vc = ashr <vscale x 2 x i16> %va, %vb
374   ret <vscale x 2 x i16> %vc
377 define <vscale x 2 x i16> @vsra_vv_nxv2i16_sext_zext(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb) {
378 ; CHECK-LABEL: vsra_vv_nxv2i16_sext_zext:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    li a0, 15
381 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
382 ; CHECK-NEXT:    vmin.vx v9, v8, a0
383 ; CHECK-NEXT:    vsra.vv v8, v8, v9
384 ; CHECK-NEXT:    ret
385   %sexted_va = sext <vscale x 2 x i16> %va to <vscale x 2 x i32>
386   %zexted_vb = zext <vscale x 2 x i16> %va to <vscale x 2 x i32>
387   %expand = ashr <vscale x 2 x i32> %sexted_va, %zexted_vb
388   %vc = trunc <vscale x 2 x i32> %expand to <vscale x 2 x i16>
389   ret <vscale x 2 x i16> %vc
392 define <vscale x 2 x i16> @vsra_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) {
393 ; CHECK-LABEL: vsra_vx_nxv2i16:
394 ; CHECK:       # %bb.0:
395 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
396 ; CHECK-NEXT:    vsra.vx v8, v8, a0
397 ; CHECK-NEXT:    ret
398   %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
399   %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
400   %vc = ashr <vscale x 2 x i16> %va, %splat
401   ret <vscale x 2 x i16> %vc
404 define <vscale x 2 x i16> @vsra_vi_nxv2i16_0(<vscale x 2 x i16> %va) {
405 ; CHECK-LABEL: vsra_vi_nxv2i16_0:
406 ; CHECK:       # %bb.0:
407 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
408 ; CHECK-NEXT:    vsra.vi v8, v8, 6
409 ; CHECK-NEXT:    ret
410   %head = insertelement <vscale x 2 x i16> poison, i16 6, i32 0
411   %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
412   %vc = ashr <vscale x 2 x i16> %va, %splat
413   ret <vscale x 2 x i16> %vc
416 define <vscale x 4 x i16> @vsra_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb) {
417 ; CHECK-LABEL: vsra_vv_nxv4i16:
418 ; CHECK:       # %bb.0:
419 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
420 ; CHECK-NEXT:    vsra.vv v8, v8, v9
421 ; CHECK-NEXT:    ret
422   %vc = ashr <vscale x 4 x i16> %va, %vb
423   ret <vscale x 4 x i16> %vc
426 define <vscale x 4 x i16> @vsra_vv_nxv4i16_sext_zext(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb) {
427 ; CHECK-LABEL: vsra_vv_nxv4i16_sext_zext:
428 ; CHECK:       # %bb.0:
429 ; CHECK-NEXT:    li a0, 15
430 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
431 ; CHECK-NEXT:    vmin.vx v9, v8, a0
432 ; CHECK-NEXT:    vsra.vv v8, v8, v9
433 ; CHECK-NEXT:    ret
434   %sexted_va = sext <vscale x 4 x i16> %va to <vscale x 4 x i32>
435   %zexted_vb = zext <vscale x 4 x i16> %va to <vscale x 4 x i32>
436   %expand = ashr <vscale x 4 x i32> %sexted_va, %zexted_vb
437   %vc = trunc <vscale x 4 x i32> %expand to <vscale x 4 x i16>
438   ret <vscale x 4 x i16> %vc
441 define <vscale x 4 x i16> @vsra_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) {
442 ; CHECK-LABEL: vsra_vx_nxv4i16:
443 ; CHECK:       # %bb.0:
444 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
445 ; CHECK-NEXT:    vsra.vx v8, v8, a0
446 ; CHECK-NEXT:    ret
447   %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
448   %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
449   %vc = ashr <vscale x 4 x i16> %va, %splat
450   ret <vscale x 4 x i16> %vc
453 define <vscale x 4 x i16> @vsra_vi_nxv4i16_0(<vscale x 4 x i16> %va) {
454 ; CHECK-LABEL: vsra_vi_nxv4i16_0:
455 ; CHECK:       # %bb.0:
456 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
457 ; CHECK-NEXT:    vsra.vi v8, v8, 6
458 ; CHECK-NEXT:    ret
459   %head = insertelement <vscale x 4 x i16> poison, i16 6, i32 0
460   %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
461   %vc = ashr <vscale x 4 x i16> %va, %splat
462   ret <vscale x 4 x i16> %vc
465 define <vscale x 8 x i16> @vsra_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) {
466 ; CHECK-LABEL: vsra_vv_nxv8i16:
467 ; CHECK:       # %bb.0:
468 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
469 ; CHECK-NEXT:    vsra.vv v8, v8, v10
470 ; CHECK-NEXT:    ret
471   %vc = ashr <vscale x 8 x i16> %va, %vb
472   ret <vscale x 8 x i16> %vc
475 define <vscale x 8 x i16> @vsra_vv_nxv8i16_sext_zext(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) {
476 ; CHECK-LABEL: vsra_vv_nxv8i16_sext_zext:
477 ; CHECK:       # %bb.0:
478 ; CHECK-NEXT:    li a0, 15
479 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
480 ; CHECK-NEXT:    vmin.vx v10, v8, a0
481 ; CHECK-NEXT:    vsra.vv v8, v8, v10
482 ; CHECK-NEXT:    ret
483   %sexted_va = sext <vscale x 8 x i16> %va to <vscale x 8 x i32>
484   %zexted_vb = zext <vscale x 8 x i16> %va to <vscale x 8 x i32>
485   %expand = ashr <vscale x 8 x i32> %sexted_va, %zexted_vb
486   %vc = trunc <vscale x 8 x i32> %expand to <vscale x 8 x i16>
487   ret <vscale x 8 x i16> %vc
490 define <vscale x 8 x i16> @vsra_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) {
491 ; CHECK-LABEL: vsra_vx_nxv8i16:
492 ; CHECK:       # %bb.0:
493 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
494 ; CHECK-NEXT:    vsra.vx v8, v8, a0
495 ; CHECK-NEXT:    ret
496   %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
497   %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
498   %vc = ashr <vscale x 8 x i16> %va, %splat
499   ret <vscale x 8 x i16> %vc
502 define <vscale x 8 x i16> @vsra_vi_nxv8i16_0(<vscale x 8 x i16> %va) {
503 ; CHECK-LABEL: vsra_vi_nxv8i16_0:
504 ; CHECK:       # %bb.0:
505 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
506 ; CHECK-NEXT:    vsra.vi v8, v8, 6
507 ; CHECK-NEXT:    ret
508   %head = insertelement <vscale x 8 x i16> poison, i16 6, i32 0
509   %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
510   %vc = ashr <vscale x 8 x i16> %va, %splat
511   ret <vscale x 8 x i16> %vc
514 define <vscale x 16 x i16> @vsra_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb) {
515 ; CHECK-LABEL: vsra_vv_nxv16i16:
516 ; CHECK:       # %bb.0:
517 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
518 ; CHECK-NEXT:    vsra.vv v8, v8, v12
519 ; CHECK-NEXT:    ret
520   %vc = ashr <vscale x 16 x i16> %va, %vb
521   ret <vscale x 16 x i16> %vc
524 define <vscale x 16 x i16> @vsra_vv_nxv16i16_sext_zext(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb) {
525 ; CHECK-LABEL: vsra_vv_nxv16i16_sext_zext:
526 ; CHECK:       # %bb.0:
527 ; CHECK-NEXT:    li a0, 15
528 ; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
529 ; CHECK-NEXT:    vmin.vx v12, v8, a0
530 ; CHECK-NEXT:    vsra.vv v8, v8, v12
531 ; CHECK-NEXT:    ret
532   %sexted_va = sext <vscale x 16 x i16> %va to <vscale x 16 x i32>
533   %zexted_vb = zext <vscale x 16 x i16> %va to <vscale x 16 x i32>
534   %expand = ashr <vscale x 16 x i32> %sexted_va, %zexted_vb
535   %vc = trunc <vscale x 16 x i32> %expand to <vscale x 16 x i16>
536   ret <vscale x 16 x i16> %vc
539 define <vscale x 16 x i16> @vsra_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) {
540 ; CHECK-LABEL: vsra_vx_nxv16i16:
541 ; CHECK:       # %bb.0:
542 ; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
543 ; CHECK-NEXT:    vsra.vx v8, v8, a0
544 ; CHECK-NEXT:    ret
545   %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
546   %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
547   %vc = ashr <vscale x 16 x i16> %va, %splat
548   ret <vscale x 16 x i16> %vc
551 define <vscale x 16 x i16> @vsra_vi_nxv16i16_0(<vscale x 16 x i16> %va) {
552 ; CHECK-LABEL: vsra_vi_nxv16i16_0:
553 ; CHECK:       # %bb.0:
554 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
555 ; CHECK-NEXT:    vsra.vi v8, v8, 6
556 ; CHECK-NEXT:    ret
557   %head = insertelement <vscale x 16 x i16> poison, i16 6, i32 0
558   %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
559   %vc = ashr <vscale x 16 x i16> %va, %splat
560   ret <vscale x 16 x i16> %vc
563 define <vscale x 32 x i16> @vsra_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb) {
564 ; CHECK-LABEL: vsra_vv_nxv32i16:
565 ; CHECK:       # %bb.0:
566 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
567 ; CHECK-NEXT:    vsra.vv v8, v8, v16
568 ; CHECK-NEXT:    ret
569   %vc = ashr <vscale x 32 x i16> %va, %vb
570   ret <vscale x 32 x i16> %vc
573 define <vscale x 32 x i16> @vsra_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) {
574 ; CHECK-LABEL: vsra_vx_nxv32i16:
575 ; CHECK:       # %bb.0:
576 ; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
577 ; CHECK-NEXT:    vsra.vx v8, v8, a0
578 ; CHECK-NEXT:    ret
579   %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
580   %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
581   %vc = ashr <vscale x 32 x i16> %va, %splat
582   ret <vscale x 32 x i16> %vc
585 define <vscale x 32 x i16> @vsra_vi_nxv32i16_0(<vscale x 32 x i16> %va) {
586 ; CHECK-LABEL: vsra_vi_nxv32i16_0:
587 ; CHECK:       # %bb.0:
588 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
589 ; CHECK-NEXT:    vsra.vi v8, v8, 6
590 ; CHECK-NEXT:    ret
591   %head = insertelement <vscale x 32 x i16> poison, i16 6, i32 0
592   %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
593   %vc = ashr <vscale x 32 x i16> %va, %splat
594   ret <vscale x 32 x i16> %vc
597 define <vscale x 1 x i32> @vsra_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb) {
598 ; CHECK-LABEL: vsra_vv_nxv1i32:
599 ; CHECK:       # %bb.0:
600 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
601 ; CHECK-NEXT:    vsra.vv v8, v8, v9
602 ; CHECK-NEXT:    ret
603   %vc = ashr <vscale x 1 x i32> %va, %vb
604   ret <vscale x 1 x i32> %vc
607 define <vscale x 1 x i32> @vsra_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) {
608 ; CHECK-LABEL: vsra_vx_nxv1i32:
609 ; CHECK:       # %bb.0:
610 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
611 ; CHECK-NEXT:    vsra.vx v8, v8, a0
612 ; CHECK-NEXT:    ret
613   %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
614   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
615   %vc = ashr <vscale x 1 x i32> %va, %splat
616   ret <vscale x 1 x i32> %vc
619 define <vscale x 1 x i32> @vsra_vi_nxv1i32_0(<vscale x 1 x i32> %va) {
620 ; CHECK-LABEL: vsra_vi_nxv1i32_0:
621 ; CHECK:       # %bb.0:
622 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
623 ; CHECK-NEXT:    vsra.vi v8, v8, 31
624 ; CHECK-NEXT:    ret
625   %head = insertelement <vscale x 1 x i32> poison, i32 31, i32 0
626   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
627   %vc = ashr <vscale x 1 x i32> %va, %splat
628   ret <vscale x 1 x i32> %vc
631 define <vscale x 2 x i32> @vsra_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb) {
632 ; CHECK-LABEL: vsra_vv_nxv2i32:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
635 ; CHECK-NEXT:    vsra.vv v8, v8, v9
636 ; CHECK-NEXT:    ret
637   %vc = ashr <vscale x 2 x i32> %va, %vb
638   ret <vscale x 2 x i32> %vc
641 define <vscale x 2 x i32> @vsra_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) {
642 ; CHECK-LABEL: vsra_vx_nxv2i32:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
645 ; CHECK-NEXT:    vsra.vx v8, v8, a0
646 ; CHECK-NEXT:    ret
647   %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
648   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
649   %vc = ashr <vscale x 2 x i32> %va, %splat
650   ret <vscale x 2 x i32> %vc
653 define <vscale x 2 x i32> @vsra_vi_nxv2i32_0(<vscale x 2 x i32> %va) {
654 ; CHECK-LABEL: vsra_vi_nxv2i32_0:
655 ; CHECK:       # %bb.0:
656 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
657 ; CHECK-NEXT:    vsra.vi v8, v8, 31
658 ; CHECK-NEXT:    ret
659   %head = insertelement <vscale x 2 x i32> poison, i32 31, i32 0
660   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
661   %vc = ashr <vscale x 2 x i32> %va, %splat
662   ret <vscale x 2 x i32> %vc
665 define <vscale x 4 x i32> @vsra_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb) {
666 ; CHECK-LABEL: vsra_vv_nxv4i32:
667 ; CHECK:       # %bb.0:
668 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
669 ; CHECK-NEXT:    vsra.vv v8, v8, v10
670 ; CHECK-NEXT:    ret
671   %vc = ashr <vscale x 4 x i32> %va, %vb
672   ret <vscale x 4 x i32> %vc
675 define <vscale x 4 x i32> @vsra_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) {
676 ; CHECK-LABEL: vsra_vx_nxv4i32:
677 ; CHECK:       # %bb.0:
678 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
679 ; CHECK-NEXT:    vsra.vx v8, v8, a0
680 ; CHECK-NEXT:    ret
681   %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
682   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
683   %vc = ashr <vscale x 4 x i32> %va, %splat
684   ret <vscale x 4 x i32> %vc
687 define <vscale x 4 x i32> @vsra_vi_nxv4i32_0(<vscale x 4 x i32> %va) {
688 ; CHECK-LABEL: vsra_vi_nxv4i32_0:
689 ; CHECK:       # %bb.0:
690 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
691 ; CHECK-NEXT:    vsra.vi v8, v8, 31
692 ; CHECK-NEXT:    ret
693   %head = insertelement <vscale x 4 x i32> poison, i32 31, i32 0
694   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
695   %vc = ashr <vscale x 4 x i32> %va, %splat
696   ret <vscale x 4 x i32> %vc
699 define <vscale x 8 x i32> @vsra_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) {
700 ; CHECK-LABEL: vsra_vv_nxv8i32:
701 ; CHECK:       # %bb.0:
702 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
703 ; CHECK-NEXT:    vsra.vv v8, v8, v12
704 ; CHECK-NEXT:    ret
705   %vc = ashr <vscale x 8 x i32> %va, %vb
706   ret <vscale x 8 x i32> %vc
709 define <vscale x 8 x i32> @vsra_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) {
710 ; CHECK-LABEL: vsra_vx_nxv8i32:
711 ; CHECK:       # %bb.0:
712 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
713 ; CHECK-NEXT:    vsra.vx v8, v8, a0
714 ; CHECK-NEXT:    ret
715   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
716   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
717   %vc = ashr <vscale x 8 x i32> %va, %splat
718   ret <vscale x 8 x i32> %vc
721 define <vscale x 8 x i32> @vsra_vi_nxv8i32_0(<vscale x 8 x i32> %va) {
722 ; CHECK-LABEL: vsra_vi_nxv8i32_0:
723 ; CHECK:       # %bb.0:
724 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
725 ; CHECK-NEXT:    vsra.vi v8, v8, 31
726 ; CHECK-NEXT:    ret
727   %head = insertelement <vscale x 8 x i32> poison, i32 31, i32 0
728   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
729   %vc = ashr <vscale x 8 x i32> %va, %splat
730   ret <vscale x 8 x i32> %vc
733 define <vscale x 16 x i32> @vsra_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb) {
734 ; CHECK-LABEL: vsra_vv_nxv16i32:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
737 ; CHECK-NEXT:    vsra.vv v8, v8, v16
738 ; CHECK-NEXT:    ret
739   %vc = ashr <vscale x 16 x i32> %va, %vb
740   ret <vscale x 16 x i32> %vc
743 define <vscale x 16 x i32> @vsra_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) {
744 ; CHECK-LABEL: vsra_vx_nxv16i32:
745 ; CHECK:       # %bb.0:
746 ; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
747 ; CHECK-NEXT:    vsra.vx v8, v8, a0
748 ; CHECK-NEXT:    ret
749   %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
750   %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
751   %vc = ashr <vscale x 16 x i32> %va, %splat
752   ret <vscale x 16 x i32> %vc
755 define <vscale x 16 x i32> @vsra_vi_nxv16i32_0(<vscale x 16 x i32> %va) {
756 ; CHECK-LABEL: vsra_vi_nxv16i32_0:
757 ; CHECK:       # %bb.0:
758 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
759 ; CHECK-NEXT:    vsra.vi v8, v8, 31
760 ; CHECK-NEXT:    ret
761   %head = insertelement <vscale x 16 x i32> poison, i32 31, i32 0
762   %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
763   %vc = ashr <vscale x 16 x i32> %va, %splat
764   ret <vscale x 16 x i32> %vc
767 define <vscale x 1 x i64> @vsra_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb) {
768 ; CHECK-LABEL: vsra_vv_nxv1i64:
769 ; CHECK:       # %bb.0:
770 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
771 ; CHECK-NEXT:    vsra.vv v8, v8, v9
772 ; CHECK-NEXT:    ret
773   %vc = ashr <vscale x 1 x i64> %va, %vb
774   ret <vscale x 1 x i64> %vc
777 define <vscale x 1 x i64> @vsra_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) {
778 ; CHECK-LABEL: vsra_vx_nxv1i64:
779 ; CHECK:       # %bb.0:
780 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
781 ; CHECK-NEXT:    vsra.vx v8, v8, a0
782 ; CHECK-NEXT:    ret
783   %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
784   %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
785   %vc = ashr <vscale x 1 x i64> %va, %splat
786   ret <vscale x 1 x i64> %vc
789 define <vscale x 1 x i64> @vsra_vi_nxv1i64_0(<vscale x 1 x i64> %va) {
790 ; CHECK-LABEL: vsra_vi_nxv1i64_0:
791 ; CHECK:       # %bb.0:
792 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
793 ; CHECK-NEXT:    vsra.vi v8, v8, 31
794 ; CHECK-NEXT:    ret
795   %head = insertelement <vscale x 1 x i64> poison, i64 31, i32 0
796   %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
797   %vc = ashr <vscale x 1 x i64> %va, %splat
798   ret <vscale x 1 x i64> %vc
801 define <vscale x 1 x i64> @vsra_vi_nxv1i64_1(<vscale x 1 x i64> %va) {
802 ; CHECK-LABEL: vsra_vi_nxv1i64_1:
803 ; CHECK:       # %bb.0:
804 ; CHECK-NEXT:    li a0, 32
805 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
806 ; CHECK-NEXT:    vsra.vx v8, v8, a0
807 ; CHECK-NEXT:    ret
808   %head = insertelement <vscale x 1 x i64> poison, i64 32, i32 0
809   %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
810   %vc = ashr <vscale x 1 x i64> %va, %splat
811   ret <vscale x 1 x i64> %vc
814 define <vscale x 2 x i64> @vsra_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb) {
815 ; CHECK-LABEL: vsra_vv_nxv2i64:
816 ; CHECK:       # %bb.0:
817 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
818 ; CHECK-NEXT:    vsra.vv v8, v8, v10
819 ; CHECK-NEXT:    ret
820   %vc = ashr <vscale x 2 x i64> %va, %vb
821   ret <vscale x 2 x i64> %vc
824 define <vscale x 2 x i64> @vsra_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) {
825 ; CHECK-LABEL: vsra_vx_nxv2i64:
826 ; CHECK:       # %bb.0:
827 ; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
828 ; CHECK-NEXT:    vsra.vx v8, v8, a0
829 ; CHECK-NEXT:    ret
830   %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
831   %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
832   %vc = ashr <vscale x 2 x i64> %va, %splat
833   ret <vscale x 2 x i64> %vc
836 define <vscale x 2 x i64> @vsra_vi_nxv2i64_0(<vscale x 2 x i64> %va) {
837 ; CHECK-LABEL: vsra_vi_nxv2i64_0:
838 ; CHECK:       # %bb.0:
839 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
840 ; CHECK-NEXT:    vsra.vi v8, v8, 31
841 ; CHECK-NEXT:    ret
842   %head = insertelement <vscale x 2 x i64> poison, i64 31, i32 0
843   %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
844   %vc = ashr <vscale x 2 x i64> %va, %splat
845   ret <vscale x 2 x i64> %vc
848 define <vscale x 2 x i64> @vsra_vi_nxv2i64_1(<vscale x 2 x i64> %va) {
849 ; CHECK-LABEL: vsra_vi_nxv2i64_1:
850 ; CHECK:       # %bb.0:
851 ; CHECK-NEXT:    li a0, 32
852 ; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
853 ; CHECK-NEXT:    vsra.vx v8, v8, a0
854 ; CHECK-NEXT:    ret
855   %head = insertelement <vscale x 2 x i64> poison, i64 32, i32 0
856   %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
857   %vc = ashr <vscale x 2 x i64> %va, %splat
858   ret <vscale x 2 x i64> %vc
861 define <vscale x 4 x i64> @vsra_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb) {
862 ; CHECK-LABEL: vsra_vv_nxv4i64:
863 ; CHECK:       # %bb.0:
864 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
865 ; CHECK-NEXT:    vsra.vv v8, v8, v12
866 ; CHECK-NEXT:    ret
867   %vc = ashr <vscale x 4 x i64> %va, %vb
868   ret <vscale x 4 x i64> %vc
871 define <vscale x 4 x i64> @vsra_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) {
872 ; CHECK-LABEL: vsra_vx_nxv4i64:
873 ; CHECK:       # %bb.0:
874 ; CHECK-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
875 ; CHECK-NEXT:    vsra.vx v8, v8, a0
876 ; CHECK-NEXT:    ret
877   %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
878   %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
879   %vc = ashr <vscale x 4 x i64> %va, %splat
880   ret <vscale x 4 x i64> %vc
883 define <vscale x 4 x i64> @vsra_vi_nxv4i64_0(<vscale x 4 x i64> %va) {
884 ; CHECK-LABEL: vsra_vi_nxv4i64_0:
885 ; CHECK:       # %bb.0:
886 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
887 ; CHECK-NEXT:    vsra.vi v8, v8, 31
888 ; CHECK-NEXT:    ret
889   %head = insertelement <vscale x 4 x i64> poison, i64 31, i32 0
890   %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
891   %vc = ashr <vscale x 4 x i64> %va, %splat
892   ret <vscale x 4 x i64> %vc
895 define <vscale x 4 x i64> @vsra_vi_nxv4i64_1(<vscale x 4 x i64> %va) {
896 ; CHECK-LABEL: vsra_vi_nxv4i64_1:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    li a0, 32
899 ; CHECK-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
900 ; CHECK-NEXT:    vsra.vx v8, v8, a0
901 ; CHECK-NEXT:    ret
902   %head = insertelement <vscale x 4 x i64> poison, i64 32, i32 0
903   %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
904   %vc = ashr <vscale x 4 x i64> %va, %splat
905   ret <vscale x 4 x i64> %vc
908 define <vscale x 8 x i64> @vsra_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) {
909 ; CHECK-LABEL: vsra_vv_nxv8i64:
910 ; CHECK:       # %bb.0:
911 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
912 ; CHECK-NEXT:    vsra.vv v8, v8, v16
913 ; CHECK-NEXT:    ret
914   %vc = ashr <vscale x 8 x i64> %va, %vb
915   ret <vscale x 8 x i64> %vc
918 define <vscale x 8 x i64> @vsra_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) {
919 ; CHECK-LABEL: vsra_vx_nxv8i64:
920 ; CHECK:       # %bb.0:
921 ; CHECK-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
922 ; CHECK-NEXT:    vsra.vx v8, v8, a0
923 ; CHECK-NEXT:    ret
924   %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
925   %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
926   %vc = ashr <vscale x 8 x i64> %va, %splat
927   ret <vscale x 8 x i64> %vc
930 define <vscale x 8 x i64> @vsra_vi_nxv8i64_0(<vscale x 8 x i64> %va) {
931 ; CHECK-LABEL: vsra_vi_nxv8i64_0:
932 ; CHECK:       # %bb.0:
933 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
934 ; CHECK-NEXT:    vsra.vi v8, v8, 31
935 ; CHECK-NEXT:    ret
936   %head = insertelement <vscale x 8 x i64> poison, i64 31, i32 0
937   %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
938   %vc = ashr <vscale x 8 x i64> %va, %splat
939   ret <vscale x 8 x i64> %vc
942 define <vscale x 8 x i64> @vsra_vi_nxv8i64_1(<vscale x 8 x i64> %va) {
943 ; CHECK-LABEL: vsra_vi_nxv8i64_1:
944 ; CHECK:       # %bb.0:
945 ; CHECK-NEXT:    li a0, 32
946 ; CHECK-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
947 ; CHECK-NEXT:    vsra.vx v8, v8, a0
948 ; CHECK-NEXT:    ret
949   %head = insertelement <vscale x 8 x i64> poison, i64 32, i32 0
950   %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
951   %vc = ashr <vscale x 8 x i64> %va, %splat
952   ret <vscale x 8 x i64> %vc
955 define <vscale x 8 x i32> @vsra_vv_mask_nxv4i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %mask) {
956 ; CHECK-LABEL: vsra_vv_mask_nxv4i32:
957 ; CHECK:       # %bb.0:
958 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
959 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
960 ; CHECK-NEXT:    ret
961   %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %vb, <vscale x 8 x i32> zeroinitializer
962   %vc = ashr <vscale x 8 x i32> %va, %vs
963   ret <vscale x 8 x i32> %vc
966 define <vscale x 8 x i32> @vsra_vx_mask_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b, <vscale x 8 x i1> %mask) {
967 ; CHECK-LABEL: vsra_vx_mask_nxv8i32:
968 ; CHECK:       # %bb.0:
969 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, mu
970 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
971 ; CHECK-NEXT:    ret
972   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
973   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
974   %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %splat, <vscale x 8 x i32> zeroinitializer
975   %vc = ashr <vscale x 8 x i32> %va, %vs
976   ret <vscale x 8 x i32> %vc
979 define <vscale x 8 x i32> @vsra_vi_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %mask) {
980 ; CHECK-LABEL: vsra_vi_mask_nxv8i32:
981 ; CHECK:       # %bb.0:
982 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
983 ; CHECK-NEXT:    vsra.vi v8, v8, 31, v0.t
984 ; CHECK-NEXT:    ret
985   %head = insertelement <vscale x 8 x i32> poison, i32 31, i32 0
986   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
987   %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %splat, <vscale x 8 x i32> zeroinitializer
988   %vc = ashr <vscale x 8 x i32> %va, %vs
989   ret <vscale x 8 x i32> %vc