Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsrl-vp.ll
blobff6771b643031fb3a5fd7e1ffe5040e4544b33f3
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.lshr.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsrl_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsrl_vx_nxv8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    li a2, 127
13 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
14 ; CHECK-NEXT:    vand.vx v8, v8, a2, v0.t
15 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
16 ; CHECK-NEXT:    vmv.v.x v9, a0
17 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
18 ; CHECK-NEXT:    vand.vx v9, v9, a2, v0.t
19 ; CHECK-NEXT:    vsrl.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.lshr.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.lshr.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
29 define <vscale x 1 x i8> @vsrl_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: vsrl_vv_nxv1i8:
31 ; CHECK:       # %bb.0:
32 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
33 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
34 ; CHECK-NEXT:    ret
35   %v = call <vscale x 1 x i8> @llvm.vp.lshr.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> @vsrl_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
40 ; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked:
41 ; CHECK:       # %bb.0:
42 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
43 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
44 ; CHECK-NEXT:    ret
45   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
46   ret <vscale x 1 x i8> %v
49 define <vscale x 1 x i8> @vsrl_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
50 ; CHECK-LABEL: vsrl_vx_nxv1i8:
51 ; CHECK:       # %bb.0:
52 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
53 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
54 ; CHECK-NEXT:    ret
55   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
56   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
57   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
58   ret <vscale x 1 x i8> %v
61 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
62 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
63 ; CHECK:       # %bb.0:
64 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
65 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
66 ; CHECK-NEXT:    ret
67   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
68   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
69   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
70   ret <vscale x 1 x i8> %v
73 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
74 ; CHECK-LABEL: vsrl_vi_nxv1i8:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
77 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
78 ; CHECK-NEXT:    ret
79   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> %m, i32 %evl)
80   ret <vscale x 1 x i8> %v
83 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
84 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
87 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
88 ; CHECK-NEXT:    ret
89   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
90   ret <vscale x 1 x i8> %v
93 declare <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
95 define <vscale x 2 x i8> @vsrl_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
96 ; CHECK-LABEL: vsrl_vv_nxv2i8:
97 ; CHECK:       # %bb.0:
98 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
99 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
100 ; CHECK-NEXT:    ret
101   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
102   ret <vscale x 2 x i8> %v
105 define <vscale x 2 x i8> @vsrl_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
106 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
109 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
110 ; CHECK-NEXT:    ret
111   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
112   ret <vscale x 2 x i8> %v
115 define <vscale x 2 x i8> @vsrl_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
116 ; CHECK-LABEL: vsrl_vx_nxv2i8:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
119 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
120 ; CHECK-NEXT:    ret
121   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
122   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
123   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
124   ret <vscale x 2 x i8> %v
127 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
128 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
131 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
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.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
136   ret <vscale x 2 x i8> %v
139 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
140 ; CHECK-LABEL: vsrl_vi_nxv2i8:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
143 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
144 ; CHECK-NEXT:    ret
145   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> %m, i32 %evl)
146   ret <vscale x 2 x i8> %v
149 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
150 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
151 ; CHECK:       # %bb.0:
152 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
153 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
154 ; CHECK-NEXT:    ret
155   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
156   ret <vscale x 2 x i8> %v
159 declare <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
161 define <vscale x 4 x i8> @vsrl_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
162 ; CHECK-LABEL: vsrl_vv_nxv4i8:
163 ; CHECK:       # %bb.0:
164 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
165 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
166 ; CHECK-NEXT:    ret
167   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
168   ret <vscale x 4 x i8> %v
171 define <vscale x 4 x i8> @vsrl_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
172 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
173 ; CHECK:       # %bb.0:
174 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
175 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
176 ; CHECK-NEXT:    ret
177   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
178   ret <vscale x 4 x i8> %v
181 define <vscale x 4 x i8> @vsrl_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
182 ; CHECK-LABEL: vsrl_vx_nxv4i8:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
185 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
186 ; CHECK-NEXT:    ret
187   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
188   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
189   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
190   ret <vscale x 4 x i8> %v
193 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
194 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
195 ; CHECK:       # %bb.0:
196 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
197 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
198 ; CHECK-NEXT:    ret
199   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
200   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
201   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
202   ret <vscale x 4 x i8> %v
205 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
206 ; CHECK-LABEL: vsrl_vi_nxv4i8:
207 ; CHECK:       # %bb.0:
208 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
209 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
210 ; CHECK-NEXT:    ret
211   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> %m, i32 %evl)
212   ret <vscale x 4 x i8> %v
215 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
216 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
219 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
220 ; CHECK-NEXT:    ret
221   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
222   ret <vscale x 4 x i8> %v
225 declare <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
227 define <vscale x 8 x i8> @vsrl_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
228 ; CHECK-LABEL: vsrl_vv_nxv8i8:
229 ; CHECK:       # %bb.0:
230 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
231 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
232 ; CHECK-NEXT:    ret
233   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
234   ret <vscale x 8 x i8> %v
237 define <vscale x 8 x i8> @vsrl_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
238 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
239 ; CHECK:       # %bb.0:
240 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
241 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
242 ; CHECK-NEXT:    ret
243   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
244   ret <vscale x 8 x i8> %v
247 define <vscale x 8 x i8> @vsrl_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
248 ; CHECK-LABEL: vsrl_vx_nxv8i8:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
251 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
252 ; CHECK-NEXT:    ret
253   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
254   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
255   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
256   ret <vscale x 8 x i8> %v
259 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
260 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
263 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
264 ; CHECK-NEXT:    ret
265   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
266   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
267   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
268   ret <vscale x 8 x i8> %v
271 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
272 ; CHECK-LABEL: vsrl_vi_nxv8i8:
273 ; CHECK:       # %bb.0:
274 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
275 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
276 ; CHECK-NEXT:    ret
277   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> %m, i32 %evl)
278   ret <vscale x 8 x i8> %v
281 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
282 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
285 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
286 ; CHECK-NEXT:    ret
287   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
288   ret <vscale x 8 x i8> %v
291 declare <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
293 define <vscale x 16 x i8> @vsrl_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vsrl_vv_nxv16i8:
295 ; CHECK:       # %bb.0:
296 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
297 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
298 ; CHECK-NEXT:    ret
299   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
300   ret <vscale x 16 x i8> %v
303 define <vscale x 16 x i8> @vsrl_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
304 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
307 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
308 ; CHECK-NEXT:    ret
309   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
310   ret <vscale x 16 x i8> %v
313 define <vscale x 16 x i8> @vsrl_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
314 ; CHECK-LABEL: vsrl_vx_nxv16i8:
315 ; CHECK:       # %bb.0:
316 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
317 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
318 ; CHECK-NEXT:    ret
319   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
320   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
321   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
322   ret <vscale x 16 x i8> %v
325 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
326 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
327 ; CHECK:       # %bb.0:
328 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
329 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
330 ; CHECK-NEXT:    ret
331   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
332   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
333   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
334   ret <vscale x 16 x i8> %v
337 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
338 ; CHECK-LABEL: vsrl_vi_nxv16i8:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
341 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
342 ; CHECK-NEXT:    ret
343   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> %m, i32 %evl)
344   ret <vscale x 16 x i8> %v
347 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
348 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
349 ; CHECK:       # %bb.0:
350 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
351 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
352 ; CHECK-NEXT:    ret
353   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
354   ret <vscale x 16 x i8> %v
357 declare <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
359 define <vscale x 32 x i8> @vsrl_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
360 ; CHECK-LABEL: vsrl_vv_nxv32i8:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
363 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
364 ; CHECK-NEXT:    ret
365   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
366   ret <vscale x 32 x i8> %v
369 define <vscale x 32 x i8> @vsrl_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
370 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
373 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
374 ; CHECK-NEXT:    ret
375   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
376   ret <vscale x 32 x i8> %v
379 define <vscale x 32 x i8> @vsrl_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
380 ; CHECK-LABEL: vsrl_vx_nxv32i8:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
383 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
384 ; CHECK-NEXT:    ret
385   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
386   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
387   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
388   ret <vscale x 32 x i8> %v
391 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
392 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
393 ; CHECK:       # %bb.0:
394 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
395 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
396 ; CHECK-NEXT:    ret
397   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
398   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
399   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
400   ret <vscale x 32 x i8> %v
403 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
404 ; CHECK-LABEL: vsrl_vi_nxv32i8:
405 ; CHECK:       # %bb.0:
406 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
407 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
408 ; CHECK-NEXT:    ret
409   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> %m, i32 %evl)
410   ret <vscale x 32 x i8> %v
413 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
414 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
415 ; CHECK:       # %bb.0:
416 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
417 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
418 ; CHECK-NEXT:    ret
419   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> splat (i1 true), i32 %evl)
420   ret <vscale x 32 x i8> %v
423 declare <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
425 define <vscale x 64 x i8> @vsrl_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
426 ; CHECK-LABEL: vsrl_vv_nxv64i8:
427 ; CHECK:       # %bb.0:
428 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
429 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
430 ; CHECK-NEXT:    ret
431   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
432   ret <vscale x 64 x i8> %v
435 define <vscale x 64 x i8> @vsrl_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
436 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
437 ; CHECK:       # %bb.0:
438 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
439 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
440 ; CHECK-NEXT:    ret
441   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
442   ret <vscale x 64 x i8> %v
445 define <vscale x 64 x i8> @vsrl_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
446 ; CHECK-LABEL: vsrl_vx_nxv64i8:
447 ; CHECK:       # %bb.0:
448 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
449 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
450 ; CHECK-NEXT:    ret
451   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
452   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
453   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
454   ret <vscale x 64 x i8> %v
457 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
458 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
461 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
462 ; CHECK-NEXT:    ret
463   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
464   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
465   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
466   ret <vscale x 64 x i8> %v
469 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
470 ; CHECK-LABEL: vsrl_vi_nxv64i8:
471 ; CHECK:       # %bb.0:
472 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
473 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
474 ; CHECK-NEXT:    ret
475   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> %m, i32 %evl)
476   ret <vscale x 64 x i8> %v
479 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
480 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
481 ; CHECK:       # %bb.0:
482 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
483 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
484 ; CHECK-NEXT:    ret
485   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> splat (i1 true), i32 %evl)
486   ret <vscale x 64 x i8> %v
489 declare <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
491 define <vscale x 1 x i16> @vsrl_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
492 ; CHECK-LABEL: vsrl_vv_nxv1i16:
493 ; CHECK:       # %bb.0:
494 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
495 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
496 ; CHECK-NEXT:    ret
497   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
498   ret <vscale x 1 x i16> %v
501 define <vscale x 1 x i16> @vsrl_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
502 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
503 ; CHECK:       # %bb.0:
504 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
505 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
506 ; CHECK-NEXT:    ret
507   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
508   ret <vscale x 1 x i16> %v
511 define <vscale x 1 x i16> @vsrl_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
512 ; CHECK-LABEL: vsrl_vx_nxv1i16:
513 ; CHECK:       # %bb.0:
514 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
515 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
516 ; CHECK-NEXT:    ret
517   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
518   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
519   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
520   ret <vscale x 1 x i16> %v
523 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
524 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
525 ; CHECK:       # %bb.0:
526 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
527 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
528 ; CHECK-NEXT:    ret
529   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
530   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
531   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
532   ret <vscale x 1 x i16> %v
535 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
536 ; CHECK-LABEL: vsrl_vi_nxv1i16:
537 ; CHECK:       # %bb.0:
538 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
539 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
540 ; CHECK-NEXT:    ret
541   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> %m, i32 %evl)
542   ret <vscale x 1 x i16> %v
545 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
546 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
547 ; CHECK:       # %bb.0:
548 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
549 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
550 ; CHECK-NEXT:    ret
551   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
552   ret <vscale x 1 x i16> %v
555 declare <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
557 define <vscale x 2 x i16> @vsrl_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
558 ; CHECK-LABEL: vsrl_vv_nxv2i16:
559 ; CHECK:       # %bb.0:
560 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
561 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
562 ; CHECK-NEXT:    ret
563   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
564   ret <vscale x 2 x i16> %v
567 define <vscale x 2 x i16> @vsrl_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
568 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
571 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
572 ; CHECK-NEXT:    ret
573   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
574   ret <vscale x 2 x i16> %v
577 define <vscale x 2 x i16> @vsrl_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
578 ; CHECK-LABEL: vsrl_vx_nxv2i16:
579 ; CHECK:       # %bb.0:
580 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
581 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
582 ; CHECK-NEXT:    ret
583   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
584   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
585   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
586   ret <vscale x 2 x i16> %v
589 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
590 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
591 ; CHECK:       # %bb.0:
592 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
593 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
594 ; CHECK-NEXT:    ret
595   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
596   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
597   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
598   ret <vscale x 2 x i16> %v
601 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
602 ; CHECK-LABEL: vsrl_vi_nxv2i16:
603 ; CHECK:       # %bb.0:
604 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
605 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
606 ; CHECK-NEXT:    ret
607   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> %m, i32 %evl)
608   ret <vscale x 2 x i16> %v
611 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
612 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
613 ; CHECK:       # %bb.0:
614 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
615 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
616 ; CHECK-NEXT:    ret
617   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
618   ret <vscale x 2 x i16> %v
621 declare <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
623 define <vscale x 4 x i16> @vsrl_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
624 ; CHECK-LABEL: vsrl_vv_nxv4i16:
625 ; CHECK:       # %bb.0:
626 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
627 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
628 ; CHECK-NEXT:    ret
629   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
630   ret <vscale x 4 x i16> %v
633 define <vscale x 4 x i16> @vsrl_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
634 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
637 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
638 ; CHECK-NEXT:    ret
639   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
640   ret <vscale x 4 x i16> %v
643 define <vscale x 4 x i16> @vsrl_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
644 ; CHECK-LABEL: vsrl_vx_nxv4i16:
645 ; CHECK:       # %bb.0:
646 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
647 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
648 ; CHECK-NEXT:    ret
649   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
650   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
651   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
652   ret <vscale x 4 x i16> %v
655 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
656 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
657 ; CHECK:       # %bb.0:
658 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
659 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
660 ; CHECK-NEXT:    ret
661   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
662   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
663   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
664   ret <vscale x 4 x i16> %v
667 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
668 ; CHECK-LABEL: vsrl_vi_nxv4i16:
669 ; CHECK:       # %bb.0:
670 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
671 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
672 ; CHECK-NEXT:    ret
673   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> %m, i32 %evl)
674   ret <vscale x 4 x i16> %v
677 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
678 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
679 ; CHECK:       # %bb.0:
680 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
681 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
682 ; CHECK-NEXT:    ret
683   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
684   ret <vscale x 4 x i16> %v
687 declare <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
689 define <vscale x 8 x i16> @vsrl_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
690 ; CHECK-LABEL: vsrl_vv_nxv8i16:
691 ; CHECK:       # %bb.0:
692 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
693 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
694 ; CHECK-NEXT:    ret
695   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
696   ret <vscale x 8 x i16> %v
699 define <vscale x 8 x i16> @vsrl_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
700 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
701 ; CHECK:       # %bb.0:
702 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
703 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
704 ; CHECK-NEXT:    ret
705   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
706   ret <vscale x 8 x i16> %v
709 define <vscale x 8 x i16> @vsrl_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
710 ; CHECK-LABEL: vsrl_vx_nxv8i16:
711 ; CHECK:       # %bb.0:
712 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
713 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
714 ; CHECK-NEXT:    ret
715   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
716   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
717   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
718   ret <vscale x 8 x i16> %v
721 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
722 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
723 ; CHECK:       # %bb.0:
724 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
725 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
726 ; CHECK-NEXT:    ret
727   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
728   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
729   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
730   ret <vscale x 8 x i16> %v
733 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
734 ; CHECK-LABEL: vsrl_vi_nxv8i16:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
737 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
738 ; CHECK-NEXT:    ret
739   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> %m, i32 %evl)
740   ret <vscale x 8 x i16> %v
743 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
744 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
745 ; CHECK:       # %bb.0:
746 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
747 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
748 ; CHECK-NEXT:    ret
749   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
750   ret <vscale x 8 x i16> %v
753 declare <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
755 define <vscale x 16 x i16> @vsrl_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
756 ; CHECK-LABEL: vsrl_vv_nxv16i16:
757 ; CHECK:       # %bb.0:
758 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
759 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
760 ; CHECK-NEXT:    ret
761   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
762   ret <vscale x 16 x i16> %v
765 define <vscale x 16 x i16> @vsrl_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
766 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
769 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
770 ; CHECK-NEXT:    ret
771   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
772   ret <vscale x 16 x i16> %v
775 define <vscale x 16 x i16> @vsrl_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
776 ; CHECK-LABEL: vsrl_vx_nxv16i16:
777 ; CHECK:       # %bb.0:
778 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
779 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
780 ; CHECK-NEXT:    ret
781   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
782   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
783   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
784   ret <vscale x 16 x i16> %v
787 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
788 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
789 ; CHECK:       # %bb.0:
790 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
791 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
792 ; CHECK-NEXT:    ret
793   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
794   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
795   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
796   ret <vscale x 16 x i16> %v
799 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
800 ; CHECK-LABEL: vsrl_vi_nxv16i16:
801 ; CHECK:       # %bb.0:
802 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
803 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
804 ; CHECK-NEXT:    ret
805   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> %m, i32 %evl)
806   ret <vscale x 16 x i16> %v
809 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
810 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
811 ; CHECK:       # %bb.0:
812 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
813 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
814 ; CHECK-NEXT:    ret
815   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
816   ret <vscale x 16 x i16> %v
819 declare <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
821 define <vscale x 32 x i16> @vsrl_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
822 ; CHECK-LABEL: vsrl_vv_nxv32i16:
823 ; CHECK:       # %bb.0:
824 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
825 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
826 ; CHECK-NEXT:    ret
827   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
828   ret <vscale x 32 x i16> %v
831 define <vscale x 32 x i16> @vsrl_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
832 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
833 ; CHECK:       # %bb.0:
834 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
835 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
836 ; CHECK-NEXT:    ret
837   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
838   ret <vscale x 32 x i16> %v
841 define <vscale x 32 x i16> @vsrl_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
842 ; CHECK-LABEL: vsrl_vx_nxv32i16:
843 ; CHECK:       # %bb.0:
844 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
845 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
846 ; CHECK-NEXT:    ret
847   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
848   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
849   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
850   ret <vscale x 32 x i16> %v
853 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
854 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
855 ; CHECK:       # %bb.0:
856 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
857 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
858 ; CHECK-NEXT:    ret
859   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
860   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
861   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
862   ret <vscale x 32 x i16> %v
865 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
866 ; CHECK-LABEL: vsrl_vi_nxv32i16:
867 ; CHECK:       # %bb.0:
868 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
869 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
870 ; CHECK-NEXT:    ret
871   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> %m, i32 %evl)
872   ret <vscale x 32 x i16> %v
875 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
876 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
877 ; CHECK:       # %bb.0:
878 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
879 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
880 ; CHECK-NEXT:    ret
881   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> splat (i1 true), i32 %evl)
882   ret <vscale x 32 x i16> %v
885 declare <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
887 define <vscale x 1 x i32> @vsrl_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
888 ; CHECK-LABEL: vsrl_vv_nxv1i32:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
891 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
892 ; CHECK-NEXT:    ret
893   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
894   ret <vscale x 1 x i32> %v
897 define <vscale x 1 x i32> @vsrl_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
898 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
899 ; CHECK:       # %bb.0:
900 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
901 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
902 ; CHECK-NEXT:    ret
903   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
904   ret <vscale x 1 x i32> %v
907 define <vscale x 1 x i32> @vsrl_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
908 ; CHECK-LABEL: vsrl_vx_nxv1i32:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
911 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
912 ; CHECK-NEXT:    ret
913   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
914   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
915   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
916   ret <vscale x 1 x i32> %v
919 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
920 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
921 ; CHECK:       # %bb.0:
922 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
923 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
924 ; CHECK-NEXT:    ret
925   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
926   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
927   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
928   ret <vscale x 1 x i32> %v
931 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
932 ; CHECK-LABEL: vsrl_vi_nxv1i32:
933 ; CHECK:       # %bb.0:
934 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
935 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
936 ; CHECK-NEXT:    ret
937   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> %m, i32 %evl)
938   ret <vscale x 1 x i32> %v
941 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
942 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
943 ; CHECK:       # %bb.0:
944 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
945 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
946 ; CHECK-NEXT:    ret
947   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
948   ret <vscale x 1 x i32> %v
951 declare <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
953 define <vscale x 2 x i32> @vsrl_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
954 ; CHECK-LABEL: vsrl_vv_nxv2i32:
955 ; CHECK:       # %bb.0:
956 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
957 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
958 ; CHECK-NEXT:    ret
959   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
960   ret <vscale x 2 x i32> %v
963 define <vscale x 2 x i32> @vsrl_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
964 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
965 ; CHECK:       # %bb.0:
966 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
967 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
968 ; CHECK-NEXT:    ret
969   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
970   ret <vscale x 2 x i32> %v
973 define <vscale x 2 x i32> @vsrl_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
974 ; CHECK-LABEL: vsrl_vx_nxv2i32:
975 ; CHECK:       # %bb.0:
976 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
977 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
978 ; CHECK-NEXT:    ret
979   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
980   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
981   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
982   ret <vscale x 2 x i32> %v
985 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
986 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
987 ; CHECK:       # %bb.0:
988 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
989 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
990 ; CHECK-NEXT:    ret
991   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
992   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
993   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
994   ret <vscale x 2 x i32> %v
997 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
998 ; CHECK-LABEL: vsrl_vi_nxv2i32:
999 ; CHECK:       # %bb.0:
1000 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1001 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1002 ; CHECK-NEXT:    ret
1003   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> %m, i32 %evl)
1004   ret <vscale x 2 x i32> %v
1007 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1008 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1009 ; CHECK:       # %bb.0:
1010 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1011 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1012 ; CHECK-NEXT:    ret
1013   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1014   ret <vscale x 2 x i32> %v
1017 declare <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1019 define <vscale x 4 x i32> @vsrl_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1020 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1021 ; CHECK:       # %bb.0:
1022 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1023 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1024 ; CHECK-NEXT:    ret
1025   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1026   ret <vscale x 4 x i32> %v
1029 define <vscale x 4 x i32> @vsrl_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1030 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1031 ; CHECK:       # %bb.0:
1032 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1033 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1034 ; CHECK-NEXT:    ret
1035   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1036   ret <vscale x 4 x i32> %v
1039 define <vscale x 4 x i32> @vsrl_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1040 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1041 ; CHECK:       # %bb.0:
1042 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1043 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1044 ; CHECK-NEXT:    ret
1045   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1046   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1047   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1048   ret <vscale x 4 x i32> %v
1051 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1052 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1053 ; CHECK:       # %bb.0:
1054 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1055 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1056 ; CHECK-NEXT:    ret
1057   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1058   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1059   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1060   ret <vscale x 4 x i32> %v
1063 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1064 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1065 ; CHECK:       # %bb.0:
1066 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1067 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1068 ; CHECK-NEXT:    ret
1069   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> %m, i32 %evl)
1070   ret <vscale x 4 x i32> %v
1073 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1074 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1075 ; CHECK:       # %bb.0:
1076 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1077 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1078 ; CHECK-NEXT:    ret
1079   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1080   ret <vscale x 4 x i32> %v
1083 declare <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1085 define <vscale x 8 x i32> @vsrl_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1086 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1087 ; CHECK:       # %bb.0:
1088 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1089 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1090 ; CHECK-NEXT:    ret
1091   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1092   ret <vscale x 8 x i32> %v
1095 define <vscale x 8 x i32> @vsrl_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1096 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1097 ; CHECK:       # %bb.0:
1098 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1099 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1100 ; CHECK-NEXT:    ret
1101   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1102   ret <vscale x 8 x i32> %v
1105 define <vscale x 8 x i32> @vsrl_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1106 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1107 ; CHECK:       # %bb.0:
1108 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1109 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1110 ; CHECK-NEXT:    ret
1111   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1112   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1113   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1114   ret <vscale x 8 x i32> %v
1117 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1118 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1119 ; CHECK:       # %bb.0:
1120 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1121 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1122 ; CHECK-NEXT:    ret
1123   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1124   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1125   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1126   ret <vscale x 8 x i32> %v
1129 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1130 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1131 ; CHECK:       # %bb.0:
1132 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1133 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1134 ; CHECK-NEXT:    ret
1135   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> %m, i32 %evl)
1136   ret <vscale x 8 x i32> %v
1139 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1140 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1141 ; CHECK:       # %bb.0:
1142 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1143 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1144 ; CHECK-NEXT:    ret
1145   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1146   ret <vscale x 8 x i32> %v
1149 declare <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1151 define <vscale x 16 x i32> @vsrl_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1152 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1153 ; CHECK:       # %bb.0:
1154 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1155 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1156 ; CHECK-NEXT:    ret
1157   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1158   ret <vscale x 16 x i32> %v
1161 define <vscale x 16 x i32> @vsrl_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1162 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1163 ; CHECK:       # %bb.0:
1164 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1165 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1166 ; CHECK-NEXT:    ret
1167   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1168   ret <vscale x 16 x i32> %v
1171 define <vscale x 16 x i32> @vsrl_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1172 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1173 ; CHECK:       # %bb.0:
1174 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1175 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1176 ; CHECK-NEXT:    ret
1177   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1178   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1179   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1180   ret <vscale x 16 x i32> %v
1183 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1184 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1185 ; CHECK:       # %bb.0:
1186 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1187 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1188 ; CHECK-NEXT:    ret
1189   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1190   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1191   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1192   ret <vscale x 16 x i32> %v
1195 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1196 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1197 ; CHECK:       # %bb.0:
1198 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1199 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1200 ; CHECK-NEXT:    ret
1201   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> %m, i32 %evl)
1202   ret <vscale x 16 x i32> %v
1205 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1206 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1207 ; CHECK:       # %bb.0:
1208 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1209 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1210 ; CHECK-NEXT:    ret
1211   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1212   ret <vscale x 16 x i32> %v
1215 declare <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1217 define <vscale x 1 x i64> @vsrl_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1218 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1219 ; CHECK:       # %bb.0:
1220 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1221 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
1222 ; CHECK-NEXT:    ret
1223   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1224   ret <vscale x 1 x i64> %v
1227 define <vscale x 1 x i64> @vsrl_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1228 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1229 ; CHECK:       # %bb.0:
1230 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1231 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
1232 ; CHECK-NEXT:    ret
1233   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1234   ret <vscale x 1 x i64> %v
1237 define <vscale x 1 x i64> @vsrl_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1238 ; RV32-LABEL: vsrl_vx_nxv1i64:
1239 ; RV32:       # %bb.0:
1240 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1241 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1242 ; RV32-NEXT:    ret
1244 ; RV64-LABEL: vsrl_vx_nxv1i64:
1245 ; RV64:       # %bb.0:
1246 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1247 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1248 ; RV64-NEXT:    ret
1249   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1250   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1251   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1252   ret <vscale x 1 x i64> %v
1255 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1256 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1257 ; RV32:       # %bb.0:
1258 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1259 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1260 ; RV32-NEXT:    ret
1262 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1263 ; RV64:       # %bb.0:
1264 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1265 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1266 ; RV64-NEXT:    ret
1267   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1268   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1269   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1270   ret <vscale x 1 x i64> %v
1273 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1274 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1275 ; CHECK:       # %bb.0:
1276 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1277 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1278 ; CHECK-NEXT:    ret
1279   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> %m, i32 %evl)
1280   ret <vscale x 1 x i64> %v
1283 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1284 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1285 ; CHECK:       # %bb.0:
1286 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1287 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1288 ; CHECK-NEXT:    ret
1289   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1290   ret <vscale x 1 x i64> %v
1293 declare <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1295 define <vscale x 2 x i64> @vsrl_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1296 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1297 ; CHECK:       # %bb.0:
1298 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1299 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1300 ; CHECK-NEXT:    ret
1301   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1302   ret <vscale x 2 x i64> %v
1305 define <vscale x 2 x i64> @vsrl_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1306 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1307 ; CHECK:       # %bb.0:
1308 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1309 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1310 ; CHECK-NEXT:    ret
1311   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1312   ret <vscale x 2 x i64> %v
1315 define <vscale x 2 x i64> @vsrl_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1316 ; RV32-LABEL: vsrl_vx_nxv2i64:
1317 ; RV32:       # %bb.0:
1318 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1319 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1320 ; RV32-NEXT:    ret
1322 ; RV64-LABEL: vsrl_vx_nxv2i64:
1323 ; RV64:       # %bb.0:
1324 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1325 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1326 ; RV64-NEXT:    ret
1327   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1328   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1329   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1330   ret <vscale x 2 x i64> %v
1333 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1334 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1335 ; RV32:       # %bb.0:
1336 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1337 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1338 ; RV32-NEXT:    ret
1340 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1341 ; RV64:       # %bb.0:
1342 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1343 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1344 ; RV64-NEXT:    ret
1345   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1346   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1347   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1348   ret <vscale x 2 x i64> %v
1351 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1352 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1353 ; CHECK:       # %bb.0:
1354 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1355 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1356 ; CHECK-NEXT:    ret
1357   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> %m, i32 %evl)
1358   ret <vscale x 2 x i64> %v
1361 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1362 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1363 ; CHECK:       # %bb.0:
1364 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1365 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1366 ; CHECK-NEXT:    ret
1367   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1368   ret <vscale x 2 x i64> %v
1371 declare <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1373 define <vscale x 4 x i64> @vsrl_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1374 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1375 ; CHECK:       # %bb.0:
1376 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1377 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1378 ; CHECK-NEXT:    ret
1379   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1380   ret <vscale x 4 x i64> %v
1383 define <vscale x 4 x i64> @vsrl_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1384 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1385 ; CHECK:       # %bb.0:
1386 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1387 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1388 ; CHECK-NEXT:    ret
1389   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1390   ret <vscale x 4 x i64> %v
1393 define <vscale x 4 x i64> @vsrl_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1394 ; RV32-LABEL: vsrl_vx_nxv4i64:
1395 ; RV32:       # %bb.0:
1396 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1397 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1398 ; RV32-NEXT:    ret
1400 ; RV64-LABEL: vsrl_vx_nxv4i64:
1401 ; RV64:       # %bb.0:
1402 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1403 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1404 ; RV64-NEXT:    ret
1405   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1406   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1407   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1408   ret <vscale x 4 x i64> %v
1411 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1412 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1413 ; RV32:       # %bb.0:
1414 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1415 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1416 ; RV32-NEXT:    ret
1418 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1419 ; RV64:       # %bb.0:
1420 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1421 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1422 ; RV64-NEXT:    ret
1423   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1424   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1425   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1426   ret <vscale x 4 x i64> %v
1429 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1430 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1431 ; CHECK:       # %bb.0:
1432 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1433 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1434 ; CHECK-NEXT:    ret
1435   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> %m, i32 %evl)
1436   ret <vscale x 4 x i64> %v
1439 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1440 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1441 ; CHECK:       # %bb.0:
1442 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1443 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1444 ; CHECK-NEXT:    ret
1445   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1446   ret <vscale x 4 x i64> %v
1449 declare <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64>, <vscale x 5 x i64>, <vscale x 5 x i1>, i32)
1451 define <vscale x 5 x i64> @vsrl_vv_nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 zeroext %evl) {
1452 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1453 ; CHECK:       # %bb.0:
1454 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1455 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1456 ; CHECK-NEXT:    ret
1457   %v = call <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 %evl)
1458   ret <vscale x 5 x i64> %v
1461 declare <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1463 define <vscale x 8 x i64> @vsrl_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1464 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1465 ; CHECK:       # %bb.0:
1466 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1467 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1468 ; CHECK-NEXT:    ret
1469   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1470   ret <vscale x 8 x i64> %v
1473 define <vscale x 8 x i64> @vsrl_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1474 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1475 ; CHECK:       # %bb.0:
1476 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1477 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1478 ; CHECK-NEXT:    ret
1479   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1480   ret <vscale x 8 x i64> %v
1483 define <vscale x 8 x i64> @vsrl_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1484 ; RV32-LABEL: vsrl_vx_nxv8i64:
1485 ; RV32:       # %bb.0:
1486 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1487 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1488 ; RV32-NEXT:    ret
1490 ; RV64-LABEL: vsrl_vx_nxv8i64:
1491 ; RV64:       # %bb.0:
1492 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1493 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1494 ; RV64-NEXT:    ret
1495   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1496   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1497   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1498   ret <vscale x 8 x i64> %v
1501 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1502 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1503 ; RV32:       # %bb.0:
1504 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1505 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1506 ; RV32-NEXT:    ret
1508 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1509 ; RV64:       # %bb.0:
1510 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1511 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1512 ; RV64-NEXT:    ret
1513   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1514   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1515   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1516   ret <vscale x 8 x i64> %v
1519 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1520 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1521 ; CHECK:       # %bb.0:
1522 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1523 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1524 ; CHECK-NEXT:    ret
1525   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> %m, i32 %evl)
1526   ret <vscale x 8 x i64> %v
1529 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1530 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1531 ; CHECK:       # %bb.0:
1532 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1533 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1534 ; CHECK-NEXT:    ret
1535   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1536   ret <vscale x 8 x i64> %v