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