Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsrl-vp.ll
blobc276599795908bfba53de4ebbacd956d6e7dd1f1
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 a3, zero, e8, m1, ta, ma
14 ; CHECK-NEXT:    vmv.v.x v9, a0
15 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
16 ; CHECK-NEXT:    vand.vx v8, v8, a2, v0.t
17 ; CHECK-NEXT:    vand.vx v9, v9, a2, v0.t
18 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
19 ; CHECK-NEXT:    ret
20   %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
21   %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
22   %v = call <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
23   ret <vscale x 8 x i7> %v
26 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)
28 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) {
29 ; CHECK-LABEL: vsrl_vv_nxv1i8:
30 ; CHECK:       # %bb.0:
31 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
32 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
33 ; CHECK-NEXT:    ret
34   %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)
35   ret <vscale x 1 x i8> %v
38 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) {
39 ; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
42 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
43 ; CHECK-NEXT:    ret
44   %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)
45   ret <vscale x 1 x i8> %v
48 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) {
49 ; CHECK-LABEL: vsrl_vx_nxv1i8:
50 ; CHECK:       # %bb.0:
51 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
52 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
53 ; CHECK-NEXT:    ret
54   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
55   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
56   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
57   ret <vscale x 1 x i8> %v
60 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
61 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
62 ; CHECK:       # %bb.0:
63 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
64 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
65 ; CHECK-NEXT:    ret
66   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
67   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
68   %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
69   ret <vscale x 1 x i8> %v
72 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
73 ; CHECK-LABEL: vsrl_vi_nxv1i8:
74 ; CHECK:       # %bb.0:
75 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
76 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
77 ; CHECK-NEXT:    ret
78   %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)
79   ret <vscale x 1 x i8> %v
82 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
83 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
84 ; CHECK:       # %bb.0:
85 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
86 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
87 ; CHECK-NEXT:    ret
88   %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)
89   ret <vscale x 1 x i8> %v
92 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)
94 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) {
95 ; CHECK-LABEL: vsrl_vv_nxv2i8:
96 ; CHECK:       # %bb.0:
97 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
98 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
99 ; CHECK-NEXT:    ret
100   %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)
101   ret <vscale x 2 x i8> %v
104 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) {
105 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
108 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
109 ; CHECK-NEXT:    ret
110   %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)
111   ret <vscale x 2 x i8> %v
114 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) {
115 ; CHECK-LABEL: vsrl_vx_nxv2i8:
116 ; CHECK:       # %bb.0:
117 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
118 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
119 ; CHECK-NEXT:    ret
120   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
121   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
122   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
123   ret <vscale x 2 x i8> %v
126 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
127 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
128 ; CHECK:       # %bb.0:
129 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
130 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
131 ; CHECK-NEXT:    ret
132   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
133   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
134   %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
135   ret <vscale x 2 x i8> %v
138 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
139 ; CHECK-LABEL: vsrl_vi_nxv2i8:
140 ; CHECK:       # %bb.0:
141 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
142 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
143 ; CHECK-NEXT:    ret
144   %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)
145   ret <vscale x 2 x i8> %v
148 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
149 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
150 ; CHECK:       # %bb.0:
151 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
152 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
153 ; CHECK-NEXT:    ret
154   %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)
155   ret <vscale x 2 x i8> %v
158 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)
160 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) {
161 ; CHECK-LABEL: vsrl_vv_nxv4i8:
162 ; CHECK:       # %bb.0:
163 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
164 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
165 ; CHECK-NEXT:    ret
166   %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)
167   ret <vscale x 4 x i8> %v
170 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) {
171 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
172 ; CHECK:       # %bb.0:
173 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
174 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
175 ; CHECK-NEXT:    ret
176   %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)
177   ret <vscale x 4 x i8> %v
180 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) {
181 ; CHECK-LABEL: vsrl_vx_nxv4i8:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
184 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
185 ; CHECK-NEXT:    ret
186   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
187   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
188   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
189   ret <vscale x 4 x i8> %v
192 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
193 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
194 ; CHECK:       # %bb.0:
195 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
196 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
197 ; CHECK-NEXT:    ret
198   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
199   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
200   %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
201   ret <vscale x 4 x i8> %v
204 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
205 ; CHECK-LABEL: vsrl_vi_nxv4i8:
206 ; CHECK:       # %bb.0:
207 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
208 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
209 ; CHECK-NEXT:    ret
210   %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)
211   ret <vscale x 4 x i8> %v
214 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
215 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
218 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
219 ; CHECK-NEXT:    ret
220   %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)
221   ret <vscale x 4 x i8> %v
224 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)
226 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) {
227 ; CHECK-LABEL: vsrl_vv_nxv8i8:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
230 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
231 ; CHECK-NEXT:    ret
232   %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)
233   ret <vscale x 8 x i8> %v
236 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) {
237 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
238 ; CHECK:       # %bb.0:
239 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
240 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
241 ; CHECK-NEXT:    ret
242   %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)
243   ret <vscale x 8 x i8> %v
246 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) {
247 ; CHECK-LABEL: vsrl_vx_nxv8i8:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
250 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
251 ; CHECK-NEXT:    ret
252   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
253   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
254   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
255   ret <vscale x 8 x i8> %v
258 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
259 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
260 ; CHECK:       # %bb.0:
261 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
262 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
263 ; CHECK-NEXT:    ret
264   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
265   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
266   %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
267   ret <vscale x 8 x i8> %v
270 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
271 ; CHECK-LABEL: vsrl_vi_nxv8i8:
272 ; CHECK:       # %bb.0:
273 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
274 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
275 ; CHECK-NEXT:    ret
276   %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)
277   ret <vscale x 8 x i8> %v
280 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
281 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
282 ; CHECK:       # %bb.0:
283 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
284 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
285 ; CHECK-NEXT:    ret
286   %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)
287   ret <vscale x 8 x i8> %v
290 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)
292 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) {
293 ; CHECK-LABEL: vsrl_vv_nxv16i8:
294 ; CHECK:       # %bb.0:
295 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
296 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
297 ; CHECK-NEXT:    ret
298   %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)
299   ret <vscale x 16 x i8> %v
302 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) {
303 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
304 ; CHECK:       # %bb.0:
305 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
306 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
307 ; CHECK-NEXT:    ret
308   %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)
309   ret <vscale x 16 x i8> %v
312 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) {
313 ; CHECK-LABEL: vsrl_vx_nxv16i8:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
316 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
317 ; CHECK-NEXT:    ret
318   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
319   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
320   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
321   ret <vscale x 16 x i8> %v
324 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
325 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
326 ; CHECK:       # %bb.0:
327 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
328 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
329 ; CHECK-NEXT:    ret
330   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
331   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
332   %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
333   ret <vscale x 16 x i8> %v
336 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
337 ; CHECK-LABEL: vsrl_vi_nxv16i8:
338 ; CHECK:       # %bb.0:
339 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
340 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
341 ; CHECK-NEXT:    ret
342   %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)
343   ret <vscale x 16 x i8> %v
346 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
347 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
348 ; CHECK:       # %bb.0:
349 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
350 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
351 ; CHECK-NEXT:    ret
352   %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)
353   ret <vscale x 16 x i8> %v
356 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)
358 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) {
359 ; CHECK-LABEL: vsrl_vv_nxv32i8:
360 ; CHECK:       # %bb.0:
361 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
362 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
363 ; CHECK-NEXT:    ret
364   %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)
365   ret <vscale x 32 x i8> %v
368 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) {
369 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
370 ; CHECK:       # %bb.0:
371 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
372 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
373 ; CHECK-NEXT:    ret
374   %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)
375   ret <vscale x 32 x i8> %v
378 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) {
379 ; CHECK-LABEL: vsrl_vx_nxv32i8:
380 ; CHECK:       # %bb.0:
381 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
382 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
383 ; CHECK-NEXT:    ret
384   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
385   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
386   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
387   ret <vscale x 32 x i8> %v
390 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
391 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
392 ; CHECK:       # %bb.0:
393 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
394 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
395 ; CHECK-NEXT:    ret
396   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
397   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
398   %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
399   ret <vscale x 32 x i8> %v
402 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
403 ; CHECK-LABEL: vsrl_vi_nxv32i8:
404 ; CHECK:       # %bb.0:
405 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
406 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
407 ; CHECK-NEXT:    ret
408   %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)
409   ret <vscale x 32 x i8> %v
412 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
413 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
414 ; CHECK:       # %bb.0:
415 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
416 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
417 ; CHECK-NEXT:    ret
418   %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)
419   ret <vscale x 32 x i8> %v
422 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)
424 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) {
425 ; CHECK-LABEL: vsrl_vv_nxv64i8:
426 ; CHECK:       # %bb.0:
427 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
428 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
429 ; CHECK-NEXT:    ret
430   %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)
431   ret <vscale x 64 x i8> %v
434 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) {
435 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
436 ; CHECK:       # %bb.0:
437 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
438 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
439 ; CHECK-NEXT:    ret
440   %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)
441   ret <vscale x 64 x i8> %v
444 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) {
445 ; CHECK-LABEL: vsrl_vx_nxv64i8:
446 ; CHECK:       # %bb.0:
447 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
448 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
449 ; CHECK-NEXT:    ret
450   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
451   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
452   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
453   ret <vscale x 64 x i8> %v
456 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
457 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
458 ; CHECK:       # %bb.0:
459 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
460 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
461 ; CHECK-NEXT:    ret
462   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
463   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
464   %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
465   ret <vscale x 64 x i8> %v
468 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
469 ; CHECK-LABEL: vsrl_vi_nxv64i8:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
472 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
473 ; CHECK-NEXT:    ret
474   %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)
475   ret <vscale x 64 x i8> %v
478 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
479 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
480 ; CHECK:       # %bb.0:
481 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
482 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
483 ; CHECK-NEXT:    ret
484   %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)
485   ret <vscale x 64 x i8> %v
488 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)
490 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) {
491 ; CHECK-LABEL: vsrl_vv_nxv1i16:
492 ; CHECK:       # %bb.0:
493 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
494 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
495 ; CHECK-NEXT:    ret
496   %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)
497   ret <vscale x 1 x i16> %v
500 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) {
501 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
502 ; CHECK:       # %bb.0:
503 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
504 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
505 ; CHECK-NEXT:    ret
506   %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)
507   ret <vscale x 1 x i16> %v
510 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) {
511 ; CHECK-LABEL: vsrl_vx_nxv1i16:
512 ; CHECK:       # %bb.0:
513 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
514 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
515 ; CHECK-NEXT:    ret
516   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
517   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
518   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
519   ret <vscale x 1 x i16> %v
522 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
523 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
524 ; CHECK:       # %bb.0:
525 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
526 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
527 ; CHECK-NEXT:    ret
528   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
529   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
530   %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
531   ret <vscale x 1 x i16> %v
534 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
535 ; CHECK-LABEL: vsrl_vi_nxv1i16:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
538 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
539 ; CHECK-NEXT:    ret
540   %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)
541   ret <vscale x 1 x i16> %v
544 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
545 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
546 ; CHECK:       # %bb.0:
547 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
548 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
549 ; CHECK-NEXT:    ret
550   %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)
551   ret <vscale x 1 x i16> %v
554 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)
556 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) {
557 ; CHECK-LABEL: vsrl_vv_nxv2i16:
558 ; CHECK:       # %bb.0:
559 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
560 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
561 ; CHECK-NEXT:    ret
562   %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)
563   ret <vscale x 2 x i16> %v
566 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) {
567 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
568 ; CHECK:       # %bb.0:
569 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
570 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
571 ; CHECK-NEXT:    ret
572   %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)
573   ret <vscale x 2 x i16> %v
576 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) {
577 ; CHECK-LABEL: vsrl_vx_nxv2i16:
578 ; CHECK:       # %bb.0:
579 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
580 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
581 ; CHECK-NEXT:    ret
582   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
583   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
584   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
585   ret <vscale x 2 x i16> %v
588 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
589 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
590 ; CHECK:       # %bb.0:
591 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
592 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
593 ; CHECK-NEXT:    ret
594   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
595   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
596   %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
597   ret <vscale x 2 x i16> %v
600 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
601 ; CHECK-LABEL: vsrl_vi_nxv2i16:
602 ; CHECK:       # %bb.0:
603 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
604 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
605 ; CHECK-NEXT:    ret
606   %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)
607   ret <vscale x 2 x i16> %v
610 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
611 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
612 ; CHECK:       # %bb.0:
613 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
614 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
615 ; CHECK-NEXT:    ret
616   %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)
617   ret <vscale x 2 x i16> %v
620 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)
622 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) {
623 ; CHECK-LABEL: vsrl_vv_nxv4i16:
624 ; CHECK:       # %bb.0:
625 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
626 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
627 ; CHECK-NEXT:    ret
628   %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)
629   ret <vscale x 4 x i16> %v
632 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) {
633 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
634 ; CHECK:       # %bb.0:
635 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
636 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
637 ; CHECK-NEXT:    ret
638   %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)
639   ret <vscale x 4 x i16> %v
642 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) {
643 ; CHECK-LABEL: vsrl_vx_nxv4i16:
644 ; CHECK:       # %bb.0:
645 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
646 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
647 ; CHECK-NEXT:    ret
648   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
649   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
650   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
651   ret <vscale x 4 x i16> %v
654 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
655 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
656 ; CHECK:       # %bb.0:
657 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
658 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
659 ; CHECK-NEXT:    ret
660   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
661   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
662   %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
663   ret <vscale x 4 x i16> %v
666 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
667 ; CHECK-LABEL: vsrl_vi_nxv4i16:
668 ; CHECK:       # %bb.0:
669 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
670 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
671 ; CHECK-NEXT:    ret
672   %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)
673   ret <vscale x 4 x i16> %v
676 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
677 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
678 ; CHECK:       # %bb.0:
679 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
680 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
681 ; CHECK-NEXT:    ret
682   %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)
683   ret <vscale x 4 x i16> %v
686 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)
688 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) {
689 ; CHECK-LABEL: vsrl_vv_nxv8i16:
690 ; CHECK:       # %bb.0:
691 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
692 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
693 ; CHECK-NEXT:    ret
694   %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)
695   ret <vscale x 8 x i16> %v
698 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) {
699 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
700 ; CHECK:       # %bb.0:
701 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
702 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
703 ; CHECK-NEXT:    ret
704   %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)
705   ret <vscale x 8 x i16> %v
708 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) {
709 ; CHECK-LABEL: vsrl_vx_nxv8i16:
710 ; CHECK:       # %bb.0:
711 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
712 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
713 ; CHECK-NEXT:    ret
714   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
715   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
716   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
717   ret <vscale x 8 x i16> %v
720 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
721 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
722 ; CHECK:       # %bb.0:
723 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
724 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
725 ; CHECK-NEXT:    ret
726   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
727   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
728   %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
729   ret <vscale x 8 x i16> %v
732 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
733 ; CHECK-LABEL: vsrl_vi_nxv8i16:
734 ; CHECK:       # %bb.0:
735 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
736 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
737 ; CHECK-NEXT:    ret
738   %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)
739   ret <vscale x 8 x i16> %v
742 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
743 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
744 ; CHECK:       # %bb.0:
745 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
746 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
747 ; CHECK-NEXT:    ret
748   %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)
749   ret <vscale x 8 x i16> %v
752 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)
754 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) {
755 ; CHECK-LABEL: vsrl_vv_nxv16i16:
756 ; CHECK:       # %bb.0:
757 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
758 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
759 ; CHECK-NEXT:    ret
760   %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)
761   ret <vscale x 16 x i16> %v
764 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) {
765 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
766 ; CHECK:       # %bb.0:
767 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
768 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
769 ; CHECK-NEXT:    ret
770   %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)
771   ret <vscale x 16 x i16> %v
774 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) {
775 ; CHECK-LABEL: vsrl_vx_nxv16i16:
776 ; CHECK:       # %bb.0:
777 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
778 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
779 ; CHECK-NEXT:    ret
780   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
781   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
782   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
783   ret <vscale x 16 x i16> %v
786 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
787 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
788 ; CHECK:       # %bb.0:
789 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
790 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
791 ; CHECK-NEXT:    ret
792   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
793   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
794   %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
795   ret <vscale x 16 x i16> %v
798 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
799 ; CHECK-LABEL: vsrl_vi_nxv16i16:
800 ; CHECK:       # %bb.0:
801 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
802 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
803 ; CHECK-NEXT:    ret
804   %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)
805   ret <vscale x 16 x i16> %v
808 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
809 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
810 ; CHECK:       # %bb.0:
811 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
812 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
813 ; CHECK-NEXT:    ret
814   %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)
815   ret <vscale x 16 x i16> %v
818 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)
820 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) {
821 ; CHECK-LABEL: vsrl_vv_nxv32i16:
822 ; CHECK:       # %bb.0:
823 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
824 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
825 ; CHECK-NEXT:    ret
826   %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)
827   ret <vscale x 32 x i16> %v
830 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) {
831 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
832 ; CHECK:       # %bb.0:
833 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
834 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
835 ; CHECK-NEXT:    ret
836   %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)
837   ret <vscale x 32 x i16> %v
840 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) {
841 ; CHECK-LABEL: vsrl_vx_nxv32i16:
842 ; CHECK:       # %bb.0:
843 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
844 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
845 ; CHECK-NEXT:    ret
846   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
847   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
848   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
849   ret <vscale x 32 x i16> %v
852 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
853 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
854 ; CHECK:       # %bb.0:
855 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
856 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
857 ; CHECK-NEXT:    ret
858   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
859   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
860   %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
861   ret <vscale x 32 x i16> %v
864 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
865 ; CHECK-LABEL: vsrl_vi_nxv32i16:
866 ; CHECK:       # %bb.0:
867 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
868 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
869 ; CHECK-NEXT:    ret
870   %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)
871   ret <vscale x 32 x i16> %v
874 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
875 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
876 ; CHECK:       # %bb.0:
877 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
878 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
879 ; CHECK-NEXT:    ret
880   %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)
881   ret <vscale x 32 x i16> %v
884 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)
886 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) {
887 ; CHECK-LABEL: vsrl_vv_nxv1i32:
888 ; CHECK:       # %bb.0:
889 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
890 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
891 ; CHECK-NEXT:    ret
892   %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)
893   ret <vscale x 1 x i32> %v
896 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) {
897 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
898 ; CHECK:       # %bb.0:
899 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
900 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
901 ; CHECK-NEXT:    ret
902   %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)
903   ret <vscale x 1 x i32> %v
906 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) {
907 ; CHECK-LABEL: vsrl_vx_nxv1i32:
908 ; CHECK:       # %bb.0:
909 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
910 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
911 ; CHECK-NEXT:    ret
912   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
913   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
914   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
915   ret <vscale x 1 x i32> %v
918 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
919 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
920 ; CHECK:       # %bb.0:
921 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
922 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
923 ; CHECK-NEXT:    ret
924   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
925   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
926   %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
927   ret <vscale x 1 x i32> %v
930 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
931 ; CHECK-LABEL: vsrl_vi_nxv1i32:
932 ; CHECK:       # %bb.0:
933 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
934 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
935 ; CHECK-NEXT:    ret
936   %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)
937   ret <vscale x 1 x i32> %v
940 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
941 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
942 ; CHECK:       # %bb.0:
943 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
944 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
945 ; CHECK-NEXT:    ret
946   %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)
947   ret <vscale x 1 x i32> %v
950 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)
952 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) {
953 ; CHECK-LABEL: vsrl_vv_nxv2i32:
954 ; CHECK:       # %bb.0:
955 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
956 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
957 ; CHECK-NEXT:    ret
958   %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)
959   ret <vscale x 2 x i32> %v
962 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) {
963 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
964 ; CHECK:       # %bb.0:
965 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
966 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
967 ; CHECK-NEXT:    ret
968   %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)
969   ret <vscale x 2 x i32> %v
972 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) {
973 ; CHECK-LABEL: vsrl_vx_nxv2i32:
974 ; CHECK:       # %bb.0:
975 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
976 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
977 ; CHECK-NEXT:    ret
978   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
979   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
980   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
981   ret <vscale x 2 x i32> %v
984 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
985 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
986 ; CHECK:       # %bb.0:
987 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
988 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
989 ; CHECK-NEXT:    ret
990   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
991   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
992   %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
993   ret <vscale x 2 x i32> %v
996 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
997 ; CHECK-LABEL: vsrl_vi_nxv2i32:
998 ; CHECK:       # %bb.0:
999 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1000 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1001 ; CHECK-NEXT:    ret
1002   %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)
1003   ret <vscale x 2 x i32> %v
1006 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1007 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1008 ; CHECK:       # %bb.0:
1009 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1010 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1011 ; CHECK-NEXT:    ret
1012   %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)
1013   ret <vscale x 2 x i32> %v
1016 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)
1018 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) {
1019 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1020 ; CHECK:       # %bb.0:
1021 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1022 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1023 ; CHECK-NEXT:    ret
1024   %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)
1025   ret <vscale x 4 x i32> %v
1028 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) {
1029 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1030 ; CHECK:       # %bb.0:
1031 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1032 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1033 ; CHECK-NEXT:    ret
1034   %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)
1035   ret <vscale x 4 x i32> %v
1038 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) {
1039 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1040 ; CHECK:       # %bb.0:
1041 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1042 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1043 ; CHECK-NEXT:    ret
1044   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1045   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1046   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1047   ret <vscale x 4 x i32> %v
1050 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1051 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1052 ; CHECK:       # %bb.0:
1053 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1054 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1055 ; CHECK-NEXT:    ret
1056   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1057   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1058   %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1059   ret <vscale x 4 x i32> %v
1062 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1063 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1064 ; CHECK:       # %bb.0:
1065 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1066 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1067 ; CHECK-NEXT:    ret
1068   %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)
1069   ret <vscale x 4 x i32> %v
1072 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1073 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1074 ; CHECK:       # %bb.0:
1075 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1076 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1077 ; CHECK-NEXT:    ret
1078   %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)
1079   ret <vscale x 4 x i32> %v
1082 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)
1084 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) {
1085 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1086 ; CHECK:       # %bb.0:
1087 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1088 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1089 ; CHECK-NEXT:    ret
1090   %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)
1091   ret <vscale x 8 x i32> %v
1094 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) {
1095 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1096 ; CHECK:       # %bb.0:
1097 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1098 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1099 ; CHECK-NEXT:    ret
1100   %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)
1101   ret <vscale x 8 x i32> %v
1104 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) {
1105 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1106 ; CHECK:       # %bb.0:
1107 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1108 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1109 ; CHECK-NEXT:    ret
1110   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1111   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1112   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1113   ret <vscale x 8 x i32> %v
1116 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1117 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1118 ; CHECK:       # %bb.0:
1119 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1120 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1121 ; CHECK-NEXT:    ret
1122   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1123   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1124   %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1125   ret <vscale x 8 x i32> %v
1128 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1129 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1130 ; CHECK:       # %bb.0:
1131 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1132 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1133 ; CHECK-NEXT:    ret
1134   %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)
1135   ret <vscale x 8 x i32> %v
1138 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1139 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1140 ; CHECK:       # %bb.0:
1141 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1142 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1143 ; CHECK-NEXT:    ret
1144   %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)
1145   ret <vscale x 8 x i32> %v
1148 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)
1150 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) {
1151 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1152 ; CHECK:       # %bb.0:
1153 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1154 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1155 ; CHECK-NEXT:    ret
1156   %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)
1157   ret <vscale x 16 x i32> %v
1160 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) {
1161 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1162 ; CHECK:       # %bb.0:
1163 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1164 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1165 ; CHECK-NEXT:    ret
1166   %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)
1167   ret <vscale x 16 x i32> %v
1170 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) {
1171 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1172 ; CHECK:       # %bb.0:
1173 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1174 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1175 ; CHECK-NEXT:    ret
1176   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1177   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1178   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1179   ret <vscale x 16 x i32> %v
1182 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1183 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1184 ; CHECK:       # %bb.0:
1185 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1186 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1187 ; CHECK-NEXT:    ret
1188   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1189   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1190   %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1191   ret <vscale x 16 x i32> %v
1194 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1195 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1196 ; CHECK:       # %bb.0:
1197 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1198 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1199 ; CHECK-NEXT:    ret
1200   %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)
1201   ret <vscale x 16 x i32> %v
1204 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1205 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1206 ; CHECK:       # %bb.0:
1207 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1208 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1209 ; CHECK-NEXT:    ret
1210   %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)
1211   ret <vscale x 16 x i32> %v
1214 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)
1216 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) {
1217 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1218 ; CHECK:       # %bb.0:
1219 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1220 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
1221 ; CHECK-NEXT:    ret
1222   %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)
1223   ret <vscale x 1 x i64> %v
1226 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) {
1227 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1228 ; CHECK:       # %bb.0:
1229 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1230 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
1231 ; CHECK-NEXT:    ret
1232   %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)
1233   ret <vscale x 1 x i64> %v
1236 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) {
1237 ; RV32-LABEL: vsrl_vx_nxv1i64:
1238 ; RV32:       # %bb.0:
1239 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1240 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1241 ; RV32-NEXT:    ret
1243 ; RV64-LABEL: vsrl_vx_nxv1i64:
1244 ; RV64:       # %bb.0:
1245 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1246 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1247 ; RV64-NEXT:    ret
1248   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1249   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1250   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1251   ret <vscale x 1 x i64> %v
1254 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1255 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1256 ; RV32:       # %bb.0:
1257 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1258 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1259 ; RV32-NEXT:    ret
1261 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1262 ; RV64:       # %bb.0:
1263 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1264 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1265 ; RV64-NEXT:    ret
1266   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1267   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1268   %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1269   ret <vscale x 1 x i64> %v
1272 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1273 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1274 ; CHECK:       # %bb.0:
1275 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1276 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1277 ; CHECK-NEXT:    ret
1278   %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)
1279   ret <vscale x 1 x i64> %v
1282 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1283 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1284 ; CHECK:       # %bb.0:
1285 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1286 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1287 ; CHECK-NEXT:    ret
1288   %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)
1289   ret <vscale x 1 x i64> %v
1292 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)
1294 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) {
1295 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1296 ; CHECK:       # %bb.0:
1297 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1298 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1299 ; CHECK-NEXT:    ret
1300   %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)
1301   ret <vscale x 2 x i64> %v
1304 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) {
1305 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1306 ; CHECK:       # %bb.0:
1307 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1308 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1309 ; CHECK-NEXT:    ret
1310   %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)
1311   ret <vscale x 2 x i64> %v
1314 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) {
1315 ; RV32-LABEL: vsrl_vx_nxv2i64:
1316 ; RV32:       # %bb.0:
1317 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1318 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1319 ; RV32-NEXT:    ret
1321 ; RV64-LABEL: vsrl_vx_nxv2i64:
1322 ; RV64:       # %bb.0:
1323 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1324 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1325 ; RV64-NEXT:    ret
1326   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1327   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1328   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1329   ret <vscale x 2 x i64> %v
1332 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1333 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1334 ; RV32:       # %bb.0:
1335 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1336 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1337 ; RV32-NEXT:    ret
1339 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1340 ; RV64:       # %bb.0:
1341 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1342 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1343 ; RV64-NEXT:    ret
1344   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1345   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1346   %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1347   ret <vscale x 2 x i64> %v
1350 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1351 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1352 ; CHECK:       # %bb.0:
1353 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1354 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1355 ; CHECK-NEXT:    ret
1356   %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)
1357   ret <vscale x 2 x i64> %v
1360 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1361 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1362 ; CHECK:       # %bb.0:
1363 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1364 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1365 ; CHECK-NEXT:    ret
1366   %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)
1367   ret <vscale x 2 x i64> %v
1370 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)
1372 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) {
1373 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1374 ; CHECK:       # %bb.0:
1375 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1376 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1377 ; CHECK-NEXT:    ret
1378   %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)
1379   ret <vscale x 4 x i64> %v
1382 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) {
1383 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1384 ; CHECK:       # %bb.0:
1385 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1386 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1387 ; CHECK-NEXT:    ret
1388   %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)
1389   ret <vscale x 4 x i64> %v
1392 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) {
1393 ; RV32-LABEL: vsrl_vx_nxv4i64:
1394 ; RV32:       # %bb.0:
1395 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1396 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1397 ; RV32-NEXT:    ret
1399 ; RV64-LABEL: vsrl_vx_nxv4i64:
1400 ; RV64:       # %bb.0:
1401 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1402 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1403 ; RV64-NEXT:    ret
1404   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1405   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1406   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1407   ret <vscale x 4 x i64> %v
1410 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1411 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1412 ; RV32:       # %bb.0:
1413 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1414 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1415 ; RV32-NEXT:    ret
1417 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1418 ; RV64:       # %bb.0:
1419 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1420 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1421 ; RV64-NEXT:    ret
1422   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1423   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1424   %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1425   ret <vscale x 4 x i64> %v
1428 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1429 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1430 ; CHECK:       # %bb.0:
1431 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1432 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1433 ; CHECK-NEXT:    ret
1434   %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)
1435   ret <vscale x 4 x i64> %v
1438 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1439 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1440 ; CHECK:       # %bb.0:
1441 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1442 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1443 ; CHECK-NEXT:    ret
1444   %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)
1445   ret <vscale x 4 x i64> %v
1448 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)
1450 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) {
1451 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1452 ; CHECK:       # %bb.0:
1453 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1454 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1455 ; CHECK-NEXT:    ret
1456   %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)
1457   ret <vscale x 5 x i64> %v
1460 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)
1462 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) {
1463 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1464 ; CHECK:       # %bb.0:
1465 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1466 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1467 ; CHECK-NEXT:    ret
1468   %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)
1469   ret <vscale x 8 x i64> %v
1472 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) {
1473 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1474 ; CHECK:       # %bb.0:
1475 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1476 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1477 ; CHECK-NEXT:    ret
1478   %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)
1479   ret <vscale x 8 x i64> %v
1482 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) {
1483 ; RV32-LABEL: vsrl_vx_nxv8i64:
1484 ; RV32:       # %bb.0:
1485 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1486 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1487 ; RV32-NEXT:    ret
1489 ; RV64-LABEL: vsrl_vx_nxv8i64:
1490 ; RV64:       # %bb.0:
1491 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1492 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1493 ; RV64-NEXT:    ret
1494   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1495   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1496   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1497   ret <vscale x 8 x i64> %v
1500 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1501 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1502 ; RV32:       # %bb.0:
1503 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1504 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1505 ; RV32-NEXT:    ret
1507 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1508 ; RV64:       # %bb.0:
1509 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1510 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1511 ; RV64-NEXT:    ret
1512   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1513   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1514   %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1515   ret <vscale x 8 x i64> %v
1518 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1519 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1520 ; CHECK:       # %bb.0:
1521 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1522 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1523 ; CHECK-NEXT:    ret
1524   %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)
1525   ret <vscale x 8 x i64> %v
1528 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1529 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1530 ; CHECK:       # %bb.0:
1531 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1532 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1533 ; CHECK-NEXT:    ret
1534   %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)
1535   ret <vscale x 8 x i64> %v