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