Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsra-vp.ll
blobcff8cc710d21f334c36aad556d3495d1b3d72102
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:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
13 ; CHECK-NEXT:    vsll.vi v8, v8, 1, v0.t
14 ; CHECK-NEXT:    vsra.vi v8, v8, 1, v0.t
15 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
16 ; CHECK-NEXT:    vmv.v.x v9, a0
17 ; CHECK-NEXT:    li a0, 127
18 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
19 ; CHECK-NEXT:    vand.vx v9, v9, a0, v0.t
20 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
21 ; CHECK-NEXT:    ret
22   %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
23   %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
24   %v = call <vscale x 8 x i7> @llvm.vp.ashr.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
25   ret <vscale x 8 x i7> %v
28 declare <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
30 define <vscale x 1 x i8> @vsra_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
31 ; CHECK-LABEL: vsra_vv_nxv1i8:
32 ; CHECK:       # %bb.0:
33 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
34 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
35 ; CHECK-NEXT:    ret
36   %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
37   ret <vscale x 1 x i8> %v
40 define <vscale x 1 x i8> @vsra_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
41 ; CHECK-LABEL: vsra_vv_nxv1i8_unmasked:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
44 ; CHECK-NEXT:    vsra.vv v8, v8, v9
45 ; CHECK-NEXT:    ret
46   %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
47   ret <vscale x 1 x i8> %v
50 define <vscale x 1 x i8> @vsra_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
51 ; CHECK-LABEL: vsra_vx_nxv1i8:
52 ; CHECK:       # %bb.0:
53 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
54 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
55 ; CHECK-NEXT:    ret
56   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
57   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
58   %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
59   ret <vscale x 1 x i8> %v
62 define <vscale x 1 x i8> @vsra_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
63 ; CHECK-LABEL: vsra_vx_nxv1i8_unmasked:
64 ; CHECK:       # %bb.0:
65 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
66 ; CHECK-NEXT:    vsra.vx v8, v8, a0
67 ; CHECK-NEXT:    ret
68   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
69   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
70   %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
71   ret <vscale x 1 x i8> %v
74 define <vscale x 1 x i8> @vsra_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
75 ; CHECK-LABEL: vsra_vi_nxv1i8:
76 ; CHECK:       # %bb.0:
77 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
78 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
79 ; CHECK-NEXT:    ret
80   %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 5), <vscale x 1 x i1> %m, i32 %evl)
81   ret <vscale x 1 x i8> %v
84 define <vscale x 1 x i8> @vsra_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
85 ; CHECK-LABEL: vsra_vi_nxv1i8_unmasked:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
88 ; CHECK-NEXT:    vsra.vi v8, v8, 5
89 ; CHECK-NEXT:    ret
90   %v = call <vscale x 1 x i8> @llvm.vp.ashr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
91   ret <vscale x 1 x i8> %v
94 declare <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
96 define <vscale x 2 x i8> @vsra_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
97 ; CHECK-LABEL: vsra_vv_nxv2i8:
98 ; CHECK:       # %bb.0:
99 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
100 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
101 ; CHECK-NEXT:    ret
102   %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
103   ret <vscale x 2 x i8> %v
106 define <vscale x 2 x i8> @vsra_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
107 ; CHECK-LABEL: vsra_vv_nxv2i8_unmasked:
108 ; CHECK:       # %bb.0:
109 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
110 ; CHECK-NEXT:    vsra.vv v8, v8, v9
111 ; CHECK-NEXT:    ret
112   %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
113   ret <vscale x 2 x i8> %v
116 define <vscale x 2 x i8> @vsra_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
117 ; CHECK-LABEL: vsra_vx_nxv2i8:
118 ; CHECK:       # %bb.0:
119 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
120 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
121 ; CHECK-NEXT:    ret
122   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
123   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
124   %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
125   ret <vscale x 2 x i8> %v
128 define <vscale x 2 x i8> @vsra_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
129 ; CHECK-LABEL: vsra_vx_nxv2i8_unmasked:
130 ; CHECK:       # %bb.0:
131 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
132 ; CHECK-NEXT:    vsra.vx v8, v8, a0
133 ; CHECK-NEXT:    ret
134   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
135   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
136   %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
137   ret <vscale x 2 x i8> %v
140 define <vscale x 2 x i8> @vsra_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
141 ; CHECK-LABEL: vsra_vi_nxv2i8:
142 ; CHECK:       # %bb.0:
143 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
144 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
145 ; CHECK-NEXT:    ret
146   %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 5), <vscale x 2 x i1> %m, i32 %evl)
147   ret <vscale x 2 x i8> %v
150 define <vscale x 2 x i8> @vsra_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
151 ; CHECK-LABEL: vsra_vi_nxv2i8_unmasked:
152 ; CHECK:       # %bb.0:
153 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
154 ; CHECK-NEXT:    vsra.vi v8, v8, 5
155 ; CHECK-NEXT:    ret
156   %v = call <vscale x 2 x i8> @llvm.vp.ashr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
157   ret <vscale x 2 x i8> %v
160 declare <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
162 define <vscale x 4 x i8> @vsra_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
163 ; CHECK-LABEL: vsra_vv_nxv4i8:
164 ; CHECK:       # %bb.0:
165 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
166 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
167 ; CHECK-NEXT:    ret
168   %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
169   ret <vscale x 4 x i8> %v
172 define <vscale x 4 x i8> @vsra_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
173 ; CHECK-LABEL: vsra_vv_nxv4i8_unmasked:
174 ; CHECK:       # %bb.0:
175 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
176 ; CHECK-NEXT:    vsra.vv v8, v8, v9
177 ; CHECK-NEXT:    ret
178   %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
179   ret <vscale x 4 x i8> %v
182 define <vscale x 4 x i8> @vsra_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
183 ; CHECK-LABEL: vsra_vx_nxv4i8:
184 ; CHECK:       # %bb.0:
185 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
186 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
187 ; CHECK-NEXT:    ret
188   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
189   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
190   %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
191   ret <vscale x 4 x i8> %v
194 define <vscale x 4 x i8> @vsra_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
195 ; CHECK-LABEL: vsra_vx_nxv4i8_unmasked:
196 ; CHECK:       # %bb.0:
197 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
198 ; CHECK-NEXT:    vsra.vx v8, v8, a0
199 ; CHECK-NEXT:    ret
200   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
201   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
202   %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
203   ret <vscale x 4 x i8> %v
206 define <vscale x 4 x i8> @vsra_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
207 ; CHECK-LABEL: vsra_vi_nxv4i8:
208 ; CHECK:       # %bb.0:
209 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
210 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
211 ; CHECK-NEXT:    ret
212   %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 5), <vscale x 4 x i1> %m, i32 %evl)
213   ret <vscale x 4 x i8> %v
216 define <vscale x 4 x i8> @vsra_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
217 ; CHECK-LABEL: vsra_vi_nxv4i8_unmasked:
218 ; CHECK:       # %bb.0:
219 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
220 ; CHECK-NEXT:    vsra.vi v8, v8, 5
221 ; CHECK-NEXT:    ret
222   %v = call <vscale x 4 x i8> @llvm.vp.ashr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
223   ret <vscale x 4 x i8> %v
226 declare <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
228 define <vscale x 8 x i8> @vsra_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
229 ; CHECK-LABEL: vsra_vv_nxv8i8:
230 ; CHECK:       # %bb.0:
231 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
232 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
233 ; CHECK-NEXT:    ret
234   %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
235   ret <vscale x 8 x i8> %v
238 define <vscale x 8 x i8> @vsra_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
239 ; CHECK-LABEL: vsra_vv_nxv8i8_unmasked:
240 ; CHECK:       # %bb.0:
241 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
242 ; CHECK-NEXT:    vsra.vv v8, v8, v9
243 ; CHECK-NEXT:    ret
244   %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
245   ret <vscale x 8 x i8> %v
248 define <vscale x 8 x i8> @vsra_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
249 ; CHECK-LABEL: vsra_vx_nxv8i8:
250 ; CHECK:       # %bb.0:
251 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
252 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
253 ; CHECK-NEXT:    ret
254   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
255   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
256   %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
257   ret <vscale x 8 x i8> %v
260 define <vscale x 8 x i8> @vsra_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
261 ; CHECK-LABEL: vsra_vx_nxv8i8_unmasked:
262 ; CHECK:       # %bb.0:
263 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
264 ; CHECK-NEXT:    vsra.vx v8, v8, a0
265 ; CHECK-NEXT:    ret
266   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
267   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
268   %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
269   ret <vscale x 8 x i8> %v
272 define <vscale x 8 x i8> @vsra_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
273 ; CHECK-LABEL: vsra_vi_nxv8i8:
274 ; CHECK:       # %bb.0:
275 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
276 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
277 ; CHECK-NEXT:    ret
278   %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 5), <vscale x 8 x i1> %m, i32 %evl)
279   ret <vscale x 8 x i8> %v
282 define <vscale x 8 x i8> @vsra_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
283 ; CHECK-LABEL: vsra_vi_nxv8i8_unmasked:
284 ; CHECK:       # %bb.0:
285 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
286 ; CHECK-NEXT:    vsra.vi v8, v8, 5
287 ; CHECK-NEXT:    ret
288   %v = call <vscale x 8 x i8> @llvm.vp.ashr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
289   ret <vscale x 8 x i8> %v
292 declare <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
294 define <vscale x 16 x i8> @vsra_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
295 ; CHECK-LABEL: vsra_vv_nxv16i8:
296 ; CHECK:       # %bb.0:
297 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
298 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
299 ; CHECK-NEXT:    ret
300   %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
301   ret <vscale x 16 x i8> %v
304 define <vscale x 16 x i8> @vsra_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
305 ; CHECK-LABEL: vsra_vv_nxv16i8_unmasked:
306 ; CHECK:       # %bb.0:
307 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
308 ; CHECK-NEXT:    vsra.vv v8, v8, v10
309 ; CHECK-NEXT:    ret
310   %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
311   ret <vscale x 16 x i8> %v
314 define <vscale x 16 x i8> @vsra_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
315 ; CHECK-LABEL: vsra_vx_nxv16i8:
316 ; CHECK:       # %bb.0:
317 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
318 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
319 ; CHECK-NEXT:    ret
320   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
321   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
322   %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
323   ret <vscale x 16 x i8> %v
326 define <vscale x 16 x i8> @vsra_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
327 ; CHECK-LABEL: vsra_vx_nxv16i8_unmasked:
328 ; CHECK:       # %bb.0:
329 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
330 ; CHECK-NEXT:    vsra.vx v8, v8, a0
331 ; CHECK-NEXT:    ret
332   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
333   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
334   %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
335   ret <vscale x 16 x i8> %v
338 define <vscale x 16 x i8> @vsra_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
339 ; CHECK-LABEL: vsra_vi_nxv16i8:
340 ; CHECK:       # %bb.0:
341 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
342 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
343 ; CHECK-NEXT:    ret
344   %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 5), <vscale x 16 x i1> %m, i32 %evl)
345   ret <vscale x 16 x i8> %v
348 define <vscale x 16 x i8> @vsra_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
349 ; CHECK-LABEL: vsra_vi_nxv16i8_unmasked:
350 ; CHECK:       # %bb.0:
351 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
352 ; CHECK-NEXT:    vsra.vi v8, v8, 5
353 ; CHECK-NEXT:    ret
354   %v = call <vscale x 16 x i8> @llvm.vp.ashr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 5), <vscale x 16 x i1> splat (i1 true), i32 %evl)
355   ret <vscale x 16 x i8> %v
358 declare <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
360 define <vscale x 32 x i8> @vsra_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
361 ; CHECK-LABEL: vsra_vv_nxv32i8:
362 ; CHECK:       # %bb.0:
363 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
364 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
365 ; CHECK-NEXT:    ret
366   %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
367   ret <vscale x 32 x i8> %v
370 define <vscale x 32 x i8> @vsra_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
371 ; CHECK-LABEL: vsra_vv_nxv32i8_unmasked:
372 ; CHECK:       # %bb.0:
373 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
374 ; CHECK-NEXT:    vsra.vv v8, v8, v12
375 ; CHECK-NEXT:    ret
376   %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
377   ret <vscale x 32 x i8> %v
380 define <vscale x 32 x i8> @vsra_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
381 ; CHECK-LABEL: vsra_vx_nxv32i8:
382 ; CHECK:       # %bb.0:
383 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
384 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
385 ; CHECK-NEXT:    ret
386   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
387   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
388   %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
389   ret <vscale x 32 x i8> %v
392 define <vscale x 32 x i8> @vsra_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
393 ; CHECK-LABEL: vsra_vx_nxv32i8_unmasked:
394 ; CHECK:       # %bb.0:
395 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
396 ; CHECK-NEXT:    vsra.vx v8, v8, a0
397 ; CHECK-NEXT:    ret
398   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
399   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
400   %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
401   ret <vscale x 32 x i8> %v
404 define <vscale x 32 x i8> @vsra_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
405 ; CHECK-LABEL: vsra_vi_nxv32i8:
406 ; CHECK:       # %bb.0:
407 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
408 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
409 ; CHECK-NEXT:    ret
410   %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 5), <vscale x 32 x i1> %m, i32 %evl)
411   ret <vscale x 32 x i8> %v
414 define <vscale x 32 x i8> @vsra_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
415 ; CHECK-LABEL: vsra_vi_nxv32i8_unmasked:
416 ; CHECK:       # %bb.0:
417 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
418 ; CHECK-NEXT:    vsra.vi v8, v8, 5
419 ; CHECK-NEXT:    ret
420   %v = call <vscale x 32 x i8> @llvm.vp.ashr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 5), <vscale x 32 x i1> splat (i1 true), i32 %evl)
421   ret <vscale x 32 x i8> %v
424 declare <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
426 define <vscale x 64 x i8> @vsra_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
427 ; CHECK-LABEL: vsra_vv_nxv64i8:
428 ; CHECK:       # %bb.0:
429 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
430 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
431 ; CHECK-NEXT:    ret
432   %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
433   ret <vscale x 64 x i8> %v
436 define <vscale x 64 x i8> @vsra_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
437 ; CHECK-LABEL: vsra_vv_nxv64i8_unmasked:
438 ; CHECK:       # %bb.0:
439 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
440 ; CHECK-NEXT:    vsra.vv v8, v8, v16
441 ; CHECK-NEXT:    ret
442   %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
443   ret <vscale x 64 x i8> %v
446 define <vscale x 64 x i8> @vsra_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
447 ; CHECK-LABEL: vsra_vx_nxv64i8:
448 ; CHECK:       # %bb.0:
449 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
450 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
451 ; CHECK-NEXT:    ret
452   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
453   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
454   %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
455   ret <vscale x 64 x i8> %v
458 define <vscale x 64 x i8> @vsra_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
459 ; CHECK-LABEL: vsra_vx_nxv64i8_unmasked:
460 ; CHECK:       # %bb.0:
461 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
462 ; CHECK-NEXT:    vsra.vx v8, v8, a0
463 ; CHECK-NEXT:    ret
464   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
465   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
466   %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
467   ret <vscale x 64 x i8> %v
470 define <vscale x 64 x i8> @vsra_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
471 ; CHECK-LABEL: vsra_vi_nxv64i8:
472 ; CHECK:       # %bb.0:
473 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
474 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
475 ; CHECK-NEXT:    ret
476   %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 5), <vscale x 64 x i1> %m, i32 %evl)
477   ret <vscale x 64 x i8> %v
480 define <vscale x 64 x i8> @vsra_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
481 ; CHECK-LABEL: vsra_vi_nxv64i8_unmasked:
482 ; CHECK:       # %bb.0:
483 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
484 ; CHECK-NEXT:    vsra.vi v8, v8, 5
485 ; CHECK-NEXT:    ret
486   %v = call <vscale x 64 x i8> @llvm.vp.ashr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 5), <vscale x 64 x i1> splat (i1 true), i32 %evl)
487   ret <vscale x 64 x i8> %v
490 declare <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
492 define <vscale x 1 x i16> @vsra_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
493 ; CHECK-LABEL: vsra_vv_nxv1i16:
494 ; CHECK:       # %bb.0:
495 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
496 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
497 ; CHECK-NEXT:    ret
498   %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
499   ret <vscale x 1 x i16> %v
502 define <vscale x 1 x i16> @vsra_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
503 ; CHECK-LABEL: vsra_vv_nxv1i16_unmasked:
504 ; CHECK:       # %bb.0:
505 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
506 ; CHECK-NEXT:    vsra.vv v8, v8, v9
507 ; CHECK-NEXT:    ret
508   %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
509   ret <vscale x 1 x i16> %v
512 define <vscale x 1 x i16> @vsra_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
513 ; CHECK-LABEL: vsra_vx_nxv1i16:
514 ; CHECK:       # %bb.0:
515 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
516 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
517 ; CHECK-NEXT:    ret
518   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
519   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
520   %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
521   ret <vscale x 1 x i16> %v
524 define <vscale x 1 x i16> @vsra_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
525 ; CHECK-LABEL: vsra_vx_nxv1i16_unmasked:
526 ; CHECK:       # %bb.0:
527 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
528 ; CHECK-NEXT:    vsra.vx v8, v8, a0
529 ; CHECK-NEXT:    ret
530   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
531   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
532   %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
533   ret <vscale x 1 x i16> %v
536 define <vscale x 1 x i16> @vsra_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
537 ; CHECK-LABEL: vsra_vi_nxv1i16:
538 ; CHECK:       # %bb.0:
539 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
540 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
541 ; CHECK-NEXT:    ret
542   %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 5), <vscale x 1 x i1> %m, i32 %evl)
543   ret <vscale x 1 x i16> %v
546 define <vscale x 1 x i16> @vsra_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
547 ; CHECK-LABEL: vsra_vi_nxv1i16_unmasked:
548 ; CHECK:       # %bb.0:
549 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
550 ; CHECK-NEXT:    vsra.vi v8, v8, 5
551 ; CHECK-NEXT:    ret
552   %v = call <vscale x 1 x i16> @llvm.vp.ashr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
553   ret <vscale x 1 x i16> %v
556 declare <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
558 define <vscale x 2 x i16> @vsra_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
559 ; CHECK-LABEL: vsra_vv_nxv2i16:
560 ; CHECK:       # %bb.0:
561 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
562 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
563 ; CHECK-NEXT:    ret
564   %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
565   ret <vscale x 2 x i16> %v
568 define <vscale x 2 x i16> @vsra_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
569 ; CHECK-LABEL: vsra_vv_nxv2i16_unmasked:
570 ; CHECK:       # %bb.0:
571 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
572 ; CHECK-NEXT:    vsra.vv v8, v8, v9
573 ; CHECK-NEXT:    ret
574   %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
575   ret <vscale x 2 x i16> %v
578 define <vscale x 2 x i16> @vsra_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
579 ; CHECK-LABEL: vsra_vx_nxv2i16:
580 ; CHECK:       # %bb.0:
581 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
582 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
583 ; CHECK-NEXT:    ret
584   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
585   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
586   %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
587   ret <vscale x 2 x i16> %v
590 define <vscale x 2 x i16> @vsra_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
591 ; CHECK-LABEL: vsra_vx_nxv2i16_unmasked:
592 ; CHECK:       # %bb.0:
593 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
594 ; CHECK-NEXT:    vsra.vx v8, v8, a0
595 ; CHECK-NEXT:    ret
596   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
597   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
598   %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
599   ret <vscale x 2 x i16> %v
602 define <vscale x 2 x i16> @vsra_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
603 ; CHECK-LABEL: vsra_vi_nxv2i16:
604 ; CHECK:       # %bb.0:
605 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
606 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
607 ; CHECK-NEXT:    ret
608   %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 5), <vscale x 2 x i1> %m, i32 %evl)
609   ret <vscale x 2 x i16> %v
612 define <vscale x 2 x i16> @vsra_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
613 ; CHECK-LABEL: vsra_vi_nxv2i16_unmasked:
614 ; CHECK:       # %bb.0:
615 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
616 ; CHECK-NEXT:    vsra.vi v8, v8, 5
617 ; CHECK-NEXT:    ret
618   %v = call <vscale x 2 x i16> @llvm.vp.ashr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
619   ret <vscale x 2 x i16> %v
622 declare <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
624 define <vscale x 4 x i16> @vsra_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
625 ; CHECK-LABEL: vsra_vv_nxv4i16:
626 ; CHECK:       # %bb.0:
627 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
628 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
629 ; CHECK-NEXT:    ret
630   %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
631   ret <vscale x 4 x i16> %v
634 define <vscale x 4 x i16> @vsra_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
635 ; CHECK-LABEL: vsra_vv_nxv4i16_unmasked:
636 ; CHECK:       # %bb.0:
637 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
638 ; CHECK-NEXT:    vsra.vv v8, v8, v9
639 ; CHECK-NEXT:    ret
640   %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
641   ret <vscale x 4 x i16> %v
644 define <vscale x 4 x i16> @vsra_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
645 ; CHECK-LABEL: vsra_vx_nxv4i16:
646 ; CHECK:       # %bb.0:
647 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
648 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
649 ; CHECK-NEXT:    ret
650   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
651   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
652   %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
653   ret <vscale x 4 x i16> %v
656 define <vscale x 4 x i16> @vsra_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
657 ; CHECK-LABEL: vsra_vx_nxv4i16_unmasked:
658 ; CHECK:       # %bb.0:
659 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
660 ; CHECK-NEXT:    vsra.vx v8, v8, a0
661 ; CHECK-NEXT:    ret
662   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
663   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
664   %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
665   ret <vscale x 4 x i16> %v
668 define <vscale x 4 x i16> @vsra_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
669 ; CHECK-LABEL: vsra_vi_nxv4i16:
670 ; CHECK:       # %bb.0:
671 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
672 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
673 ; CHECK-NEXT:    ret
674   %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 5), <vscale x 4 x i1> %m, i32 %evl)
675   ret <vscale x 4 x i16> %v
678 define <vscale x 4 x i16> @vsra_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
679 ; CHECK-LABEL: vsra_vi_nxv4i16_unmasked:
680 ; CHECK:       # %bb.0:
681 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
682 ; CHECK-NEXT:    vsra.vi v8, v8, 5
683 ; CHECK-NEXT:    ret
684   %v = call <vscale x 4 x i16> @llvm.vp.ashr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
685   ret <vscale x 4 x i16> %v
688 declare <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
690 define <vscale x 8 x i16> @vsra_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
691 ; CHECK-LABEL: vsra_vv_nxv8i16:
692 ; CHECK:       # %bb.0:
693 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
694 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
695 ; CHECK-NEXT:    ret
696   %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
697   ret <vscale x 8 x i16> %v
700 define <vscale x 8 x i16> @vsra_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
701 ; CHECK-LABEL: vsra_vv_nxv8i16_unmasked:
702 ; CHECK:       # %bb.0:
703 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
704 ; CHECK-NEXT:    vsra.vv v8, v8, v10
705 ; CHECK-NEXT:    ret
706   %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
707   ret <vscale x 8 x i16> %v
710 define <vscale x 8 x i16> @vsra_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
711 ; CHECK-LABEL: vsra_vx_nxv8i16:
712 ; CHECK:       # %bb.0:
713 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
714 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
715 ; CHECK-NEXT:    ret
716   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
717   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
718   %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
719   ret <vscale x 8 x i16> %v
722 define <vscale x 8 x i16> @vsra_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
723 ; CHECK-LABEL: vsra_vx_nxv8i16_unmasked:
724 ; CHECK:       # %bb.0:
725 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
726 ; CHECK-NEXT:    vsra.vx v8, v8, a0
727 ; CHECK-NEXT:    ret
728   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
729   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
730   %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
731   ret <vscale x 8 x i16> %v
734 define <vscale x 8 x i16> @vsra_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
735 ; CHECK-LABEL: vsra_vi_nxv8i16:
736 ; CHECK:       # %bb.0:
737 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
738 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
739 ; CHECK-NEXT:    ret
740   %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 5), <vscale x 8 x i1> %m, i32 %evl)
741   ret <vscale x 8 x i16> %v
744 define <vscale x 8 x i16> @vsra_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
745 ; CHECK-LABEL: vsra_vi_nxv8i16_unmasked:
746 ; CHECK:       # %bb.0:
747 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
748 ; CHECK-NEXT:    vsra.vi v8, v8, 5
749 ; CHECK-NEXT:    ret
750   %v = call <vscale x 8 x i16> @llvm.vp.ashr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
751   ret <vscale x 8 x i16> %v
754 declare <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
756 define <vscale x 16 x i16> @vsra_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
757 ; CHECK-LABEL: vsra_vv_nxv16i16:
758 ; CHECK:       # %bb.0:
759 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
760 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
761 ; CHECK-NEXT:    ret
762   %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
763   ret <vscale x 16 x i16> %v
766 define <vscale x 16 x i16> @vsra_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
767 ; CHECK-LABEL: vsra_vv_nxv16i16_unmasked:
768 ; CHECK:       # %bb.0:
769 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
770 ; CHECK-NEXT:    vsra.vv v8, v8, v12
771 ; CHECK-NEXT:    ret
772   %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
773   ret <vscale x 16 x i16> %v
776 define <vscale x 16 x i16> @vsra_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
777 ; CHECK-LABEL: vsra_vx_nxv16i16:
778 ; CHECK:       # %bb.0:
779 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
780 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
781 ; CHECK-NEXT:    ret
782   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
783   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
784   %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
785   ret <vscale x 16 x i16> %v
788 define <vscale x 16 x i16> @vsra_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
789 ; CHECK-LABEL: vsra_vx_nxv16i16_unmasked:
790 ; CHECK:       # %bb.0:
791 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
792 ; CHECK-NEXT:    vsra.vx v8, v8, a0
793 ; CHECK-NEXT:    ret
794   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
795   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
796   %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
797   ret <vscale x 16 x i16> %v
800 define <vscale x 16 x i16> @vsra_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
801 ; CHECK-LABEL: vsra_vi_nxv16i16:
802 ; CHECK:       # %bb.0:
803 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
804 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
805 ; CHECK-NEXT:    ret
806   %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 5), <vscale x 16 x i1> %m, i32 %evl)
807   ret <vscale x 16 x i16> %v
810 define <vscale x 16 x i16> @vsra_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
811 ; CHECK-LABEL: vsra_vi_nxv16i16_unmasked:
812 ; CHECK:       # %bb.0:
813 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
814 ; CHECK-NEXT:    vsra.vi v8, v8, 5
815 ; CHECK-NEXT:    ret
816   %v = call <vscale x 16 x i16> @llvm.vp.ashr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 5), <vscale x 16 x i1> splat (i1 true), i32 %evl)
817   ret <vscale x 16 x i16> %v
820 declare <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
822 define <vscale x 32 x i16> @vsra_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
823 ; CHECK-LABEL: vsra_vv_nxv32i16:
824 ; CHECK:       # %bb.0:
825 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
826 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
827 ; CHECK-NEXT:    ret
828   %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
829   ret <vscale x 32 x i16> %v
832 define <vscale x 32 x i16> @vsra_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
833 ; CHECK-LABEL: vsra_vv_nxv32i16_unmasked:
834 ; CHECK:       # %bb.0:
835 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
836 ; CHECK-NEXT:    vsra.vv v8, v8, v16
837 ; CHECK-NEXT:    ret
838   %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
839   ret <vscale x 32 x i16> %v
842 define <vscale x 32 x i16> @vsra_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
843 ; CHECK-LABEL: vsra_vx_nxv32i16:
844 ; CHECK:       # %bb.0:
845 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
846 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
847 ; CHECK-NEXT:    ret
848   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
849   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
850   %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
851   ret <vscale x 32 x i16> %v
854 define <vscale x 32 x i16> @vsra_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
855 ; CHECK-LABEL: vsra_vx_nxv32i16_unmasked:
856 ; CHECK:       # %bb.0:
857 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
858 ; CHECK-NEXT:    vsra.vx v8, v8, a0
859 ; CHECK-NEXT:    ret
860   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
861   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
862   %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
863   ret <vscale x 32 x i16> %v
866 define <vscale x 32 x i16> @vsra_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
867 ; CHECK-LABEL: vsra_vi_nxv32i16:
868 ; CHECK:       # %bb.0:
869 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
870 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
871 ; CHECK-NEXT:    ret
872   %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 5), <vscale x 32 x i1> %m, i32 %evl)
873   ret <vscale x 32 x i16> %v
876 define <vscale x 32 x i16> @vsra_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
877 ; CHECK-LABEL: vsra_vi_nxv32i16_unmasked:
878 ; CHECK:       # %bb.0:
879 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
880 ; CHECK-NEXT:    vsra.vi v8, v8, 5
881 ; CHECK-NEXT:    ret
882   %v = call <vscale x 32 x i16> @llvm.vp.ashr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 5), <vscale x 32 x i1> splat (i1 true), i32 %evl)
883   ret <vscale x 32 x i16> %v
886 declare <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
888 define <vscale x 1 x i32> @vsra_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
889 ; CHECK-LABEL: vsra_vv_nxv1i32:
890 ; CHECK:       # %bb.0:
891 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
892 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
893 ; CHECK-NEXT:    ret
894   %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
895   ret <vscale x 1 x i32> %v
898 define <vscale x 1 x i32> @vsra_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
899 ; CHECK-LABEL: vsra_vv_nxv1i32_unmasked:
900 ; CHECK:       # %bb.0:
901 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
902 ; CHECK-NEXT:    vsra.vv v8, v8, v9
903 ; CHECK-NEXT:    ret
904   %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
905   ret <vscale x 1 x i32> %v
908 define <vscale x 1 x i32> @vsra_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
909 ; CHECK-LABEL: vsra_vx_nxv1i32:
910 ; CHECK:       # %bb.0:
911 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
912 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
913 ; CHECK-NEXT:    ret
914   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
915   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
916   %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
917   ret <vscale x 1 x i32> %v
920 define <vscale x 1 x i32> @vsra_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
921 ; CHECK-LABEL: vsra_vx_nxv1i32_unmasked:
922 ; CHECK:       # %bb.0:
923 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
924 ; CHECK-NEXT:    vsra.vx v8, v8, a0
925 ; CHECK-NEXT:    ret
926   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
927   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
928   %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
929   ret <vscale x 1 x i32> %v
932 define <vscale x 1 x i32> @vsra_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
933 ; CHECK-LABEL: vsra_vi_nxv1i32:
934 ; CHECK:       # %bb.0:
935 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
936 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
937 ; CHECK-NEXT:    ret
938   %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 5), <vscale x 1 x i1> %m, i32 %evl)
939   ret <vscale x 1 x i32> %v
942 define <vscale x 1 x i32> @vsra_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
943 ; CHECK-LABEL: vsra_vi_nxv1i32_unmasked:
944 ; CHECK:       # %bb.0:
945 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
946 ; CHECK-NEXT:    vsra.vi v8, v8, 5
947 ; CHECK-NEXT:    ret
948   %v = call <vscale x 1 x i32> @llvm.vp.ashr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
949   ret <vscale x 1 x i32> %v
952 declare <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
954 define <vscale x 2 x i32> @vsra_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
955 ; CHECK-LABEL: vsra_vv_nxv2i32:
956 ; CHECK:       # %bb.0:
957 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
958 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
959 ; CHECK-NEXT:    ret
960   %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
961   ret <vscale x 2 x i32> %v
964 define <vscale x 2 x i32> @vsra_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
965 ; CHECK-LABEL: vsra_vv_nxv2i32_unmasked:
966 ; CHECK:       # %bb.0:
967 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
968 ; CHECK-NEXT:    vsra.vv v8, v8, v9
969 ; CHECK-NEXT:    ret
970   %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
971   ret <vscale x 2 x i32> %v
974 define <vscale x 2 x i32> @vsra_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
975 ; CHECK-LABEL: vsra_vx_nxv2i32:
976 ; CHECK:       # %bb.0:
977 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
978 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
979 ; CHECK-NEXT:    ret
980   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
981   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
982   %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
983   ret <vscale x 2 x i32> %v
986 define <vscale x 2 x i32> @vsra_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
987 ; CHECK-LABEL: vsra_vx_nxv2i32_unmasked:
988 ; CHECK:       # %bb.0:
989 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
990 ; CHECK-NEXT:    vsra.vx v8, v8, a0
991 ; CHECK-NEXT:    ret
992   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
993   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
994   %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
995   ret <vscale x 2 x i32> %v
998 define <vscale x 2 x i32> @vsra_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
999 ; CHECK-LABEL: vsra_vi_nxv2i32:
1000 ; CHECK:       # %bb.0:
1001 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1002 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1003 ; CHECK-NEXT:    ret
1004   %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 5), <vscale x 2 x i1> %m, i32 %evl)
1005   ret <vscale x 2 x i32> %v
1008 define <vscale x 2 x i32> @vsra_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1009 ; CHECK-LABEL: vsra_vi_nxv2i32_unmasked:
1010 ; CHECK:       # %bb.0:
1011 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1012 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1013 ; CHECK-NEXT:    ret
1014   %v = call <vscale x 2 x i32> @llvm.vp.ashr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1015   ret <vscale x 2 x i32> %v
1018 declare <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1020 define <vscale x 4 x i32> @vsra_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1021 ; CHECK-LABEL: vsra_vv_nxv4i32:
1022 ; CHECK:       # %bb.0:
1023 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1024 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
1025 ; CHECK-NEXT:    ret
1026   %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1027   ret <vscale x 4 x i32> %v
1030 define <vscale x 4 x i32> @vsra_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1031 ; CHECK-LABEL: vsra_vv_nxv4i32_unmasked:
1032 ; CHECK:       # %bb.0:
1033 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1034 ; CHECK-NEXT:    vsra.vv v8, v8, v10
1035 ; CHECK-NEXT:    ret
1036   %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1037   ret <vscale x 4 x i32> %v
1040 define <vscale x 4 x i32> @vsra_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1041 ; CHECK-LABEL: vsra_vx_nxv4i32:
1042 ; CHECK:       # %bb.0:
1043 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1044 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
1045 ; CHECK-NEXT:    ret
1046   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1047   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1048   %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1049   ret <vscale x 4 x i32> %v
1052 define <vscale x 4 x i32> @vsra_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1053 ; CHECK-LABEL: vsra_vx_nxv4i32_unmasked:
1054 ; CHECK:       # %bb.0:
1055 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1056 ; CHECK-NEXT:    vsra.vx v8, v8, a0
1057 ; CHECK-NEXT:    ret
1058   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1059   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1060   %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1061   ret <vscale x 4 x i32> %v
1064 define <vscale x 4 x i32> @vsra_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1065 ; CHECK-LABEL: vsra_vi_nxv4i32:
1066 ; CHECK:       # %bb.0:
1067 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1068 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1069 ; CHECK-NEXT:    ret
1070   %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 5), <vscale x 4 x i1> %m, i32 %evl)
1071   ret <vscale x 4 x i32> %v
1074 define <vscale x 4 x i32> @vsra_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1075 ; CHECK-LABEL: vsra_vi_nxv4i32_unmasked:
1076 ; CHECK:       # %bb.0:
1077 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1078 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1079 ; CHECK-NEXT:    ret
1080   %v = call <vscale x 4 x i32> @llvm.vp.ashr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1081   ret <vscale x 4 x i32> %v
1084 declare <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1086 define <vscale x 8 x i32> @vsra_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1087 ; CHECK-LABEL: vsra_vv_nxv8i32:
1088 ; CHECK:       # %bb.0:
1089 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1090 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
1091 ; CHECK-NEXT:    ret
1092   %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1093   ret <vscale x 8 x i32> %v
1096 define <vscale x 8 x i32> @vsra_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1097 ; CHECK-LABEL: vsra_vv_nxv8i32_unmasked:
1098 ; CHECK:       # %bb.0:
1099 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1100 ; CHECK-NEXT:    vsra.vv v8, v8, v12
1101 ; CHECK-NEXT:    ret
1102   %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1103   ret <vscale x 8 x i32> %v
1106 define <vscale x 8 x i32> @vsra_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1107 ; CHECK-LABEL: vsra_vx_nxv8i32:
1108 ; CHECK:       # %bb.0:
1109 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1110 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
1111 ; CHECK-NEXT:    ret
1112   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1113   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1114   %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1115   ret <vscale x 8 x i32> %v
1118 define <vscale x 8 x i32> @vsra_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1119 ; CHECK-LABEL: vsra_vx_nxv8i32_unmasked:
1120 ; CHECK:       # %bb.0:
1121 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1122 ; CHECK-NEXT:    vsra.vx v8, v8, a0
1123 ; CHECK-NEXT:    ret
1124   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1125   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1126   %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1127   ret <vscale x 8 x i32> %v
1130 define <vscale x 8 x i32> @vsra_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1131 ; CHECK-LABEL: vsra_vi_nxv8i32:
1132 ; CHECK:       # %bb.0:
1133 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1134 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1135 ; CHECK-NEXT:    ret
1136   %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 5), <vscale x 8 x i1> %m, i32 %evl)
1137   ret <vscale x 8 x i32> %v
1140 define <vscale x 8 x i32> @vsra_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1141 ; CHECK-LABEL: vsra_vi_nxv8i32_unmasked:
1142 ; CHECK:       # %bb.0:
1143 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1144 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1145 ; CHECK-NEXT:    ret
1146   %v = call <vscale x 8 x i32> @llvm.vp.ashr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1147   ret <vscale x 8 x i32> %v
1150 declare <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1152 define <vscale x 16 x i32> @vsra_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1153 ; CHECK-LABEL: vsra_vv_nxv16i32:
1154 ; CHECK:       # %bb.0:
1155 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1156 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
1157 ; CHECK-NEXT:    ret
1158   %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1159   ret <vscale x 16 x i32> %v
1162 define <vscale x 16 x i32> @vsra_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1163 ; CHECK-LABEL: vsra_vv_nxv16i32_unmasked:
1164 ; CHECK:       # %bb.0:
1165 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1166 ; CHECK-NEXT:    vsra.vv v8, v8, v16
1167 ; CHECK-NEXT:    ret
1168   %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1169   ret <vscale x 16 x i32> %v
1172 define <vscale x 16 x i32> @vsra_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1173 ; CHECK-LABEL: vsra_vx_nxv16i32:
1174 ; CHECK:       # %bb.0:
1175 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1176 ; CHECK-NEXT:    vsra.vx v8, v8, a0, v0.t
1177 ; CHECK-NEXT:    ret
1178   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1179   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1180   %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1181   ret <vscale x 16 x i32> %v
1184 define <vscale x 16 x i32> @vsra_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1185 ; CHECK-LABEL: vsra_vx_nxv16i32_unmasked:
1186 ; CHECK:       # %bb.0:
1187 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1188 ; CHECK-NEXT:    vsra.vx v8, v8, a0
1189 ; CHECK-NEXT:    ret
1190   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1191   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1192   %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1193   ret <vscale x 16 x i32> %v
1196 define <vscale x 16 x i32> @vsra_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1197 ; CHECK-LABEL: vsra_vi_nxv16i32:
1198 ; CHECK:       # %bb.0:
1199 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1200 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1201 ; CHECK-NEXT:    ret
1202   %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 5), <vscale x 16 x i1> %m, i32 %evl)
1203   ret <vscale x 16 x i32> %v
1206 define <vscale x 16 x i32> @vsra_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1207 ; CHECK-LABEL: vsra_vi_nxv16i32_unmasked:
1208 ; CHECK:       # %bb.0:
1209 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1210 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1211 ; CHECK-NEXT:    ret
1212   %v = call <vscale x 16 x i32> @llvm.vp.ashr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 5), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1213   ret <vscale x 16 x i32> %v
1216 declare <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1218 define <vscale x 1 x i64> @vsra_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1219 ; CHECK-LABEL: vsra_vv_nxv1i64:
1220 ; CHECK:       # %bb.0:
1221 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1222 ; CHECK-NEXT:    vsra.vv v8, v8, v9, v0.t
1223 ; CHECK-NEXT:    ret
1224   %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1225   ret <vscale x 1 x i64> %v
1228 define <vscale x 1 x i64> @vsra_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1229 ; CHECK-LABEL: vsra_vv_nxv1i64_unmasked:
1230 ; CHECK:       # %bb.0:
1231 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1232 ; CHECK-NEXT:    vsra.vv v8, v8, v9
1233 ; CHECK-NEXT:    ret
1234   %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1235   ret <vscale x 1 x i64> %v
1238 define <vscale x 1 x i64> @vsra_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1239 ; RV32-LABEL: vsra_vx_nxv1i64:
1240 ; RV32:       # %bb.0:
1241 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1242 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1243 ; RV32-NEXT:    ret
1245 ; RV64-LABEL: vsra_vx_nxv1i64:
1246 ; RV64:       # %bb.0:
1247 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1248 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1249 ; RV64-NEXT:    ret
1250   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1251   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1252   %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1253   ret <vscale x 1 x i64> %v
1256 define <vscale x 1 x i64> @vsra_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1257 ; RV32-LABEL: vsra_vx_nxv1i64_unmasked:
1258 ; RV32:       # %bb.0:
1259 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1260 ; RV32-NEXT:    vsra.vx v8, v8, a0
1261 ; RV32-NEXT:    ret
1263 ; RV64-LABEL: vsra_vx_nxv1i64_unmasked:
1264 ; RV64:       # %bb.0:
1265 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1266 ; RV64-NEXT:    vsra.vx v8, v8, a0
1267 ; RV64-NEXT:    ret
1268   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1269   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1270   %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1271   ret <vscale x 1 x i64> %v
1274 define <vscale x 1 x i64> @vsra_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1275 ; CHECK-LABEL: vsra_vi_nxv1i64:
1276 ; CHECK:       # %bb.0:
1277 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1278 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1279 ; CHECK-NEXT:    ret
1280   %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 5), <vscale x 1 x i1> %m, i32 %evl)
1281   ret <vscale x 1 x i64> %v
1284 define <vscale x 1 x i64> @vsra_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1285 ; CHECK-LABEL: vsra_vi_nxv1i64_unmasked:
1286 ; CHECK:       # %bb.0:
1287 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1288 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1289 ; CHECK-NEXT:    ret
1290   %v = call <vscale x 1 x i64> @llvm.vp.ashr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 5), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1291   ret <vscale x 1 x i64> %v
1294 declare <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1296 define <vscale x 2 x i64> @vsra_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1297 ; CHECK-LABEL: vsra_vv_nxv2i64:
1298 ; CHECK:       # %bb.0:
1299 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1300 ; CHECK-NEXT:    vsra.vv v8, v8, v10, v0.t
1301 ; CHECK-NEXT:    ret
1302   %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1303   ret <vscale x 2 x i64> %v
1306 define <vscale x 2 x i64> @vsra_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1307 ; CHECK-LABEL: vsra_vv_nxv2i64_unmasked:
1308 ; CHECK:       # %bb.0:
1309 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1310 ; CHECK-NEXT:    vsra.vv v8, v8, v10
1311 ; CHECK-NEXT:    ret
1312   %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1313   ret <vscale x 2 x i64> %v
1316 define <vscale x 2 x i64> @vsra_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1317 ; RV32-LABEL: vsra_vx_nxv2i64:
1318 ; RV32:       # %bb.0:
1319 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1320 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1321 ; RV32-NEXT:    ret
1323 ; RV64-LABEL: vsra_vx_nxv2i64:
1324 ; RV64:       # %bb.0:
1325 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1326 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1327 ; RV64-NEXT:    ret
1328   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1329   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1330   %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1331   ret <vscale x 2 x i64> %v
1334 define <vscale x 2 x i64> @vsra_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1335 ; RV32-LABEL: vsra_vx_nxv2i64_unmasked:
1336 ; RV32:       # %bb.0:
1337 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1338 ; RV32-NEXT:    vsra.vx v8, v8, a0
1339 ; RV32-NEXT:    ret
1341 ; RV64-LABEL: vsra_vx_nxv2i64_unmasked:
1342 ; RV64:       # %bb.0:
1343 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1344 ; RV64-NEXT:    vsra.vx v8, v8, a0
1345 ; RV64-NEXT:    ret
1346   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1347   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1348   %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1349   ret <vscale x 2 x i64> %v
1352 define <vscale x 2 x i64> @vsra_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1353 ; CHECK-LABEL: vsra_vi_nxv2i64:
1354 ; CHECK:       # %bb.0:
1355 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1356 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1357 ; CHECK-NEXT:    ret
1358   %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 5), <vscale x 2 x i1> %m, i32 %evl)
1359   ret <vscale x 2 x i64> %v
1362 define <vscale x 2 x i64> @vsra_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1363 ; CHECK-LABEL: vsra_vi_nxv2i64_unmasked:
1364 ; CHECK:       # %bb.0:
1365 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1366 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1367 ; CHECK-NEXT:    ret
1368   %v = call <vscale x 2 x i64> @llvm.vp.ashr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 5), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1369   ret <vscale x 2 x i64> %v
1372 declare <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1374 define <vscale x 4 x i64> @vsra_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1375 ; CHECK-LABEL: vsra_vv_nxv4i64:
1376 ; CHECK:       # %bb.0:
1377 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1378 ; CHECK-NEXT:    vsra.vv v8, v8, v12, v0.t
1379 ; CHECK-NEXT:    ret
1380   %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1381   ret <vscale x 4 x i64> %v
1384 define <vscale x 4 x i64> @vsra_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1385 ; CHECK-LABEL: vsra_vv_nxv4i64_unmasked:
1386 ; CHECK:       # %bb.0:
1387 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1388 ; CHECK-NEXT:    vsra.vv v8, v8, v12
1389 ; CHECK-NEXT:    ret
1390   %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1391   ret <vscale x 4 x i64> %v
1394 define <vscale x 4 x i64> @vsra_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1395 ; RV32-LABEL: vsra_vx_nxv4i64:
1396 ; RV32:       # %bb.0:
1397 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1398 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1399 ; RV32-NEXT:    ret
1401 ; RV64-LABEL: vsra_vx_nxv4i64:
1402 ; RV64:       # %bb.0:
1403 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1404 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1405 ; RV64-NEXT:    ret
1406   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1407   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1408   %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1409   ret <vscale x 4 x i64> %v
1412 define <vscale x 4 x i64> @vsra_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1413 ; RV32-LABEL: vsra_vx_nxv4i64_unmasked:
1414 ; RV32:       # %bb.0:
1415 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1416 ; RV32-NEXT:    vsra.vx v8, v8, a0
1417 ; RV32-NEXT:    ret
1419 ; RV64-LABEL: vsra_vx_nxv4i64_unmasked:
1420 ; RV64:       # %bb.0:
1421 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1422 ; RV64-NEXT:    vsra.vx v8, v8, a0
1423 ; RV64-NEXT:    ret
1424   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1425   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1426   %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1427   ret <vscale x 4 x i64> %v
1430 define <vscale x 4 x i64> @vsra_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1431 ; CHECK-LABEL: vsra_vi_nxv4i64:
1432 ; CHECK:       # %bb.0:
1433 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1434 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1435 ; CHECK-NEXT:    ret
1436   %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 5), <vscale x 4 x i1> %m, i32 %evl)
1437   ret <vscale x 4 x i64> %v
1440 define <vscale x 4 x i64> @vsra_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1441 ; CHECK-LABEL: vsra_vi_nxv4i64_unmasked:
1442 ; CHECK:       # %bb.0:
1443 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1444 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1445 ; CHECK-NEXT:    ret
1446   %v = call <vscale x 4 x i64> @llvm.vp.ashr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 5), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1447   ret <vscale x 4 x i64> %v
1450 declare <vscale x 6 x i64> @llvm.vp.ashr.nxv6i64(<vscale x 6 x i64>, <vscale x 6 x i64>, <vscale x 6 x i1>, i32)
1452 define <vscale x 6 x i64> @vsra_vv_nxv6i64(<vscale x 6 x i64> %va, <vscale x 6 x i64> %b, <vscale x 6 x i1> %m, i32 zeroext %evl) {
1453 ; CHECK-LABEL: vsra_vv_nxv6i64:
1454 ; CHECK:       # %bb.0:
1455 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1456 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
1457 ; CHECK-NEXT:    ret
1458   %v = call <vscale x 6 x i64> @llvm.vp.ashr.nxv6i64(<vscale x 6 x i64> %va, <vscale x 6 x i64> %b, <vscale x 6 x i1> %m, i32 %evl)
1459   ret <vscale x 6 x i64> %v
1462 declare <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1464 define <vscale x 8 x i64> @vsra_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1465 ; CHECK-LABEL: vsra_vv_nxv8i64:
1466 ; CHECK:       # %bb.0:
1467 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1468 ; CHECK-NEXT:    vsra.vv v8, v8, v16, v0.t
1469 ; CHECK-NEXT:    ret
1470   %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1471   ret <vscale x 8 x i64> %v
1474 define <vscale x 8 x i64> @vsra_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1475 ; CHECK-LABEL: vsra_vv_nxv8i64_unmasked:
1476 ; CHECK:       # %bb.0:
1477 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1478 ; CHECK-NEXT:    vsra.vv v8, v8, v16
1479 ; CHECK-NEXT:    ret
1480   %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1481   ret <vscale x 8 x i64> %v
1484 define <vscale x 8 x i64> @vsra_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1485 ; RV32-LABEL: vsra_vx_nxv8i64:
1486 ; RV32:       # %bb.0:
1487 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1488 ; RV32-NEXT:    vsra.vx v8, v8, a0, v0.t
1489 ; RV32-NEXT:    ret
1491 ; RV64-LABEL: vsra_vx_nxv8i64:
1492 ; RV64:       # %bb.0:
1493 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1494 ; RV64-NEXT:    vsra.vx v8, v8, a0, v0.t
1495 ; RV64-NEXT:    ret
1496   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1497   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1498   %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1499   ret <vscale x 8 x i64> %v
1502 define <vscale x 8 x i64> @vsra_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1503 ; RV32-LABEL: vsra_vx_nxv8i64_unmasked:
1504 ; RV32:       # %bb.0:
1505 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1506 ; RV32-NEXT:    vsra.vx v8, v8, a0
1507 ; RV32-NEXT:    ret
1509 ; RV64-LABEL: vsra_vx_nxv8i64_unmasked:
1510 ; RV64:       # %bb.0:
1511 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1512 ; RV64-NEXT:    vsra.vx v8, v8, a0
1513 ; RV64-NEXT:    ret
1514   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1515   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1516   %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1517   ret <vscale x 8 x i64> %v
1520 define <vscale x 8 x i64> @vsra_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1521 ; CHECK-LABEL: vsra_vi_nxv8i64:
1522 ; CHECK:       # %bb.0:
1523 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1524 ; CHECK-NEXT:    vsra.vi v8, v8, 5, v0.t
1525 ; CHECK-NEXT:    ret
1526   %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 5), <vscale x 8 x i1> %m, i32 %evl)
1527   ret <vscale x 8 x i64> %v
1530 define <vscale x 8 x i64> @vsra_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1531 ; CHECK-LABEL: vsra_vi_nxv8i64_unmasked:
1532 ; CHECK:       # %bb.0:
1533 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1534 ; CHECK-NEXT:    vsra.vi v8, v8, 5
1535 ; CHECK-NEXT:    ret
1536   %v = call <vscale x 8 x i64> @llvm.vp.ashr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 5), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1537   ret <vscale x 8 x i64> %v