[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsrl-vp.ll
blobf52c02d5d935ab22c0a452629667e2438132d4a8
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:    vmv.v.x v9, a0
15 ; CHECK-NEXT:    vand.vx v8, v8, a2, v0.t
16 ; CHECK-NEXT:    vand.vx v9, v9, a2, v0.t
17 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
18 ; CHECK-NEXT:    ret
19   %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
20   %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
21   %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)
22   ret <vscale x 8 x i7> %v
25 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)
27 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) {
28 ; CHECK-LABEL: vsrl_vv_nxv1i8:
29 ; CHECK:       # %bb.0:
30 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
31 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
32 ; CHECK-NEXT:    ret
33   %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)
34   ret <vscale x 1 x i8> %v
37 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) {
38 ; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked:
39 ; CHECK:       # %bb.0:
40 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
41 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
42 ; CHECK-NEXT:    ret
43   %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)
44   ret <vscale x 1 x i8> %v
47 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) {
48 ; CHECK-LABEL: vsrl_vx_nxv1i8:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
51 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
52 ; CHECK-NEXT:    ret
53   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
54   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
55   %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)
56   ret <vscale x 1 x i8> %v
59 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
60 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
61 ; CHECK:       # %bb.0:
62 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
63 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
64 ; CHECK-NEXT:    ret
65   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
66   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
67   %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)
68   ret <vscale x 1 x i8> %v
71 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
72 ; CHECK-LABEL: vsrl_vi_nxv1i8:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
75 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
76 ; CHECK-NEXT:    ret
77   %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)
78   ret <vscale x 1 x i8> %v
81 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
82 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
83 ; CHECK:       # %bb.0:
84 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
85 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
86 ; CHECK-NEXT:    ret
87   %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)
88   ret <vscale x 1 x i8> %v
91 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)
93 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) {
94 ; CHECK-LABEL: vsrl_vv_nxv2i8:
95 ; CHECK:       # %bb.0:
96 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
97 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
98 ; CHECK-NEXT:    ret
99   %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)
100   ret <vscale x 2 x i8> %v
103 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) {
104 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
107 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
108 ; CHECK-NEXT:    ret
109   %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)
110   ret <vscale x 2 x i8> %v
113 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) {
114 ; CHECK-LABEL: vsrl_vx_nxv2i8:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
117 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
118 ; CHECK-NEXT:    ret
119   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
120   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
121   %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)
122   ret <vscale x 2 x i8> %v
125 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
126 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
127 ; CHECK:       # %bb.0:
128 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
129 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
130 ; CHECK-NEXT:    ret
131   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
132   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
133   %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)
134   ret <vscale x 2 x i8> %v
137 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
138 ; CHECK-LABEL: vsrl_vi_nxv2i8:
139 ; CHECK:       # %bb.0:
140 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
141 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
142 ; CHECK-NEXT:    ret
143   %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)
144   ret <vscale x 2 x i8> %v
147 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
148 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
151 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
152 ; CHECK-NEXT:    ret
153   %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)
154   ret <vscale x 2 x i8> %v
157 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)
159 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) {
160 ; CHECK-LABEL: vsrl_vv_nxv4i8:
161 ; CHECK:       # %bb.0:
162 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
163 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
164 ; CHECK-NEXT:    ret
165   %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)
166   ret <vscale x 4 x i8> %v
169 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) {
170 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
171 ; CHECK:       # %bb.0:
172 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
173 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
174 ; CHECK-NEXT:    ret
175   %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)
176   ret <vscale x 4 x i8> %v
179 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) {
180 ; CHECK-LABEL: vsrl_vx_nxv4i8:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
183 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
184 ; CHECK-NEXT:    ret
185   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
186   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
187   %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)
188   ret <vscale x 4 x i8> %v
191 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
192 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
193 ; CHECK:       # %bb.0:
194 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
195 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
196 ; CHECK-NEXT:    ret
197   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
198   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
199   %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)
200   ret <vscale x 4 x i8> %v
203 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
204 ; CHECK-LABEL: vsrl_vi_nxv4i8:
205 ; CHECK:       # %bb.0:
206 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
207 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
208 ; CHECK-NEXT:    ret
209   %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)
210   ret <vscale x 4 x i8> %v
213 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
214 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
217 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
218 ; CHECK-NEXT:    ret
219   %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)
220   ret <vscale x 4 x i8> %v
223 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)
225 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) {
226 ; CHECK-LABEL: vsrl_vv_nxv8i8:
227 ; CHECK:       # %bb.0:
228 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
229 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
230 ; CHECK-NEXT:    ret
231   %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)
232   ret <vscale x 8 x i8> %v
235 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) {
236 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
239 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
240 ; CHECK-NEXT:    ret
241   %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)
242   ret <vscale x 8 x i8> %v
245 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) {
246 ; CHECK-LABEL: vsrl_vx_nxv8i8:
247 ; CHECK:       # %bb.0:
248 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
249 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
250 ; CHECK-NEXT:    ret
251   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
252   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
253   %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)
254   ret <vscale x 8 x i8> %v
257 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
258 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
261 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
262 ; CHECK-NEXT:    ret
263   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
264   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
265   %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)
266   ret <vscale x 8 x i8> %v
269 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
270 ; CHECK-LABEL: vsrl_vi_nxv8i8:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
273 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
274 ; CHECK-NEXT:    ret
275   %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)
276   ret <vscale x 8 x i8> %v
279 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
280 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
283 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
284 ; CHECK-NEXT:    ret
285   %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)
286   ret <vscale x 8 x i8> %v
289 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)
291 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) {
292 ; CHECK-LABEL: vsrl_vv_nxv16i8:
293 ; CHECK:       # %bb.0:
294 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
295 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
296 ; CHECK-NEXT:    ret
297   %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)
298   ret <vscale x 16 x i8> %v
301 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) {
302 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
303 ; CHECK:       # %bb.0:
304 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
305 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
306 ; CHECK-NEXT:    ret
307   %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)
308   ret <vscale x 16 x i8> %v
311 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) {
312 ; CHECK-LABEL: vsrl_vx_nxv16i8:
313 ; CHECK:       # %bb.0:
314 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
315 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
316 ; CHECK-NEXT:    ret
317   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
318   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
319   %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)
320   ret <vscale x 16 x i8> %v
323 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
324 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
327 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
328 ; CHECK-NEXT:    ret
329   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
330   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
331   %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)
332   ret <vscale x 16 x i8> %v
335 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
336 ; CHECK-LABEL: vsrl_vi_nxv16i8:
337 ; CHECK:       # %bb.0:
338 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
339 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
340 ; CHECK-NEXT:    ret
341   %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)
342   ret <vscale x 16 x i8> %v
345 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
346 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
349 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
350 ; CHECK-NEXT:    ret
351   %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)
352   ret <vscale x 16 x i8> %v
355 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)
357 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) {
358 ; CHECK-LABEL: vsrl_vv_nxv32i8:
359 ; CHECK:       # %bb.0:
360 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
361 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
362 ; CHECK-NEXT:    ret
363   %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)
364   ret <vscale x 32 x i8> %v
367 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) {
368 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
371 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
372 ; CHECK-NEXT:    ret
373   %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)
374   ret <vscale x 32 x i8> %v
377 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) {
378 ; CHECK-LABEL: vsrl_vx_nxv32i8:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
381 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
382 ; CHECK-NEXT:    ret
383   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
384   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
385   %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)
386   ret <vscale x 32 x i8> %v
389 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
390 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
393 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
394 ; CHECK-NEXT:    ret
395   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
396   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
397   %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)
398   ret <vscale x 32 x i8> %v
401 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
402 ; CHECK-LABEL: vsrl_vi_nxv32i8:
403 ; CHECK:       # %bb.0:
404 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
405 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
406 ; CHECK-NEXT:    ret
407   %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)
408   ret <vscale x 32 x i8> %v
411 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
412 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
415 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
416 ; CHECK-NEXT:    ret
417   %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)
418   ret <vscale x 32 x i8> %v
421 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)
423 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) {
424 ; CHECK-LABEL: vsrl_vv_nxv64i8:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
427 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
428 ; CHECK-NEXT:    ret
429   %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)
430   ret <vscale x 64 x i8> %v
433 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) {
434 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
437 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
438 ; CHECK-NEXT:    ret
439   %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)
440   ret <vscale x 64 x i8> %v
443 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) {
444 ; CHECK-LABEL: vsrl_vx_nxv64i8:
445 ; CHECK:       # %bb.0:
446 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
447 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
448 ; CHECK-NEXT:    ret
449   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
450   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
451   %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)
452   ret <vscale x 64 x i8> %v
455 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
456 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
459 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
460 ; CHECK-NEXT:    ret
461   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
462   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
463   %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)
464   ret <vscale x 64 x i8> %v
467 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
468 ; CHECK-LABEL: vsrl_vi_nxv64i8:
469 ; CHECK:       # %bb.0:
470 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
471 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
472 ; CHECK-NEXT:    ret
473   %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)
474   ret <vscale x 64 x i8> %v
477 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
478 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
479 ; CHECK:       # %bb.0:
480 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
481 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
482 ; CHECK-NEXT:    ret
483   %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)
484   ret <vscale x 64 x i8> %v
487 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)
489 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) {
490 ; CHECK-LABEL: vsrl_vv_nxv1i16:
491 ; CHECK:       # %bb.0:
492 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
493 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
494 ; CHECK-NEXT:    ret
495   %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)
496   ret <vscale x 1 x i16> %v
499 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) {
500 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
503 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
504 ; CHECK-NEXT:    ret
505   %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)
506   ret <vscale x 1 x i16> %v
509 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) {
510 ; CHECK-LABEL: vsrl_vx_nxv1i16:
511 ; CHECK:       # %bb.0:
512 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
513 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
514 ; CHECK-NEXT:    ret
515   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
516   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
517   %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)
518   ret <vscale x 1 x i16> %v
521 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
522 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
523 ; CHECK:       # %bb.0:
524 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
525 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
526 ; CHECK-NEXT:    ret
527   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
528   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
529   %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)
530   ret <vscale x 1 x i16> %v
533 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
534 ; CHECK-LABEL: vsrl_vi_nxv1i16:
535 ; CHECK:       # %bb.0:
536 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
537 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
538 ; CHECK-NEXT:    ret
539   %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)
540   ret <vscale x 1 x i16> %v
543 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
544 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
545 ; CHECK:       # %bb.0:
546 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
547 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
548 ; CHECK-NEXT:    ret
549   %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)
550   ret <vscale x 1 x i16> %v
553 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)
555 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) {
556 ; CHECK-LABEL: vsrl_vv_nxv2i16:
557 ; CHECK:       # %bb.0:
558 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
559 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
560 ; CHECK-NEXT:    ret
561   %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)
562   ret <vscale x 2 x i16> %v
565 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) {
566 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
567 ; CHECK:       # %bb.0:
568 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
569 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
570 ; CHECK-NEXT:    ret
571   %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)
572   ret <vscale x 2 x i16> %v
575 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) {
576 ; CHECK-LABEL: vsrl_vx_nxv2i16:
577 ; CHECK:       # %bb.0:
578 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
579 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
580 ; CHECK-NEXT:    ret
581   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
582   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
583   %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)
584   ret <vscale x 2 x i16> %v
587 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
588 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
591 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
592 ; CHECK-NEXT:    ret
593   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
594   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
595   %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)
596   ret <vscale x 2 x i16> %v
599 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
600 ; CHECK-LABEL: vsrl_vi_nxv2i16:
601 ; CHECK:       # %bb.0:
602 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
603 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
604 ; CHECK-NEXT:    ret
605   %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)
606   ret <vscale x 2 x i16> %v
609 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
610 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
611 ; CHECK:       # %bb.0:
612 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
613 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
614 ; CHECK-NEXT:    ret
615   %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)
616   ret <vscale x 2 x i16> %v
619 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)
621 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) {
622 ; CHECK-LABEL: vsrl_vv_nxv4i16:
623 ; CHECK:       # %bb.0:
624 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
625 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
626 ; CHECK-NEXT:    ret
627   %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)
628   ret <vscale x 4 x i16> %v
631 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) {
632 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
635 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
636 ; CHECK-NEXT:    ret
637   %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)
638   ret <vscale x 4 x i16> %v
641 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) {
642 ; CHECK-LABEL: vsrl_vx_nxv4i16:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
645 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
646 ; CHECK-NEXT:    ret
647   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
648   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
649   %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)
650   ret <vscale x 4 x i16> %v
653 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
654 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
655 ; CHECK:       # %bb.0:
656 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
657 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
658 ; CHECK-NEXT:    ret
659   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
660   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
661   %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)
662   ret <vscale x 4 x i16> %v
665 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
666 ; CHECK-LABEL: vsrl_vi_nxv4i16:
667 ; CHECK:       # %bb.0:
668 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
669 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
670 ; CHECK-NEXT:    ret
671   %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)
672   ret <vscale x 4 x i16> %v
675 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
676 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
677 ; CHECK:       # %bb.0:
678 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
679 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
680 ; CHECK-NEXT:    ret
681   %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)
682   ret <vscale x 4 x i16> %v
685 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)
687 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) {
688 ; CHECK-LABEL: vsrl_vv_nxv8i16:
689 ; CHECK:       # %bb.0:
690 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
691 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
692 ; CHECK-NEXT:    ret
693   %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)
694   ret <vscale x 8 x i16> %v
697 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) {
698 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
699 ; CHECK:       # %bb.0:
700 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
701 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
702 ; CHECK-NEXT:    ret
703   %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)
704   ret <vscale x 8 x i16> %v
707 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) {
708 ; CHECK-LABEL: vsrl_vx_nxv8i16:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
711 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
712 ; CHECK-NEXT:    ret
713   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
714   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
715   %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)
716   ret <vscale x 8 x i16> %v
719 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
720 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
721 ; CHECK:       # %bb.0:
722 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
723 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
724 ; CHECK-NEXT:    ret
725   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
726   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
727   %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)
728   ret <vscale x 8 x i16> %v
731 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
732 ; CHECK-LABEL: vsrl_vi_nxv8i16:
733 ; CHECK:       # %bb.0:
734 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
735 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
736 ; CHECK-NEXT:    ret
737   %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)
738   ret <vscale x 8 x i16> %v
741 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
742 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
743 ; CHECK:       # %bb.0:
744 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
745 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
746 ; CHECK-NEXT:    ret
747   %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)
748   ret <vscale x 8 x i16> %v
751 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)
753 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) {
754 ; CHECK-LABEL: vsrl_vv_nxv16i16:
755 ; CHECK:       # %bb.0:
756 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
757 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
758 ; CHECK-NEXT:    ret
759   %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)
760   ret <vscale x 16 x i16> %v
763 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) {
764 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
765 ; CHECK:       # %bb.0:
766 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
767 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
768 ; CHECK-NEXT:    ret
769   %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)
770   ret <vscale x 16 x i16> %v
773 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) {
774 ; CHECK-LABEL: vsrl_vx_nxv16i16:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
777 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
778 ; CHECK-NEXT:    ret
779   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
780   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
781   %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)
782   ret <vscale x 16 x i16> %v
785 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
786 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
787 ; CHECK:       # %bb.0:
788 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
789 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
790 ; CHECK-NEXT:    ret
791   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
792   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
793   %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)
794   ret <vscale x 16 x i16> %v
797 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
798 ; CHECK-LABEL: vsrl_vi_nxv16i16:
799 ; CHECK:       # %bb.0:
800 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
801 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
802 ; CHECK-NEXT:    ret
803   %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)
804   ret <vscale x 16 x i16> %v
807 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
808 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
809 ; CHECK:       # %bb.0:
810 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
811 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
812 ; CHECK-NEXT:    ret
813   %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)
814   ret <vscale x 16 x i16> %v
817 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)
819 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) {
820 ; CHECK-LABEL: vsrl_vv_nxv32i16:
821 ; CHECK:       # %bb.0:
822 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
823 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
824 ; CHECK-NEXT:    ret
825   %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)
826   ret <vscale x 32 x i16> %v
829 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) {
830 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
831 ; CHECK:       # %bb.0:
832 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
833 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
834 ; CHECK-NEXT:    ret
835   %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)
836   ret <vscale x 32 x i16> %v
839 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) {
840 ; CHECK-LABEL: vsrl_vx_nxv32i16:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
843 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
844 ; CHECK-NEXT:    ret
845   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
846   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
847   %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)
848   ret <vscale x 32 x i16> %v
851 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
852 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
853 ; CHECK:       # %bb.0:
854 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
855 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
856 ; CHECK-NEXT:    ret
857   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
858   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
859   %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)
860   ret <vscale x 32 x i16> %v
863 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
864 ; CHECK-LABEL: vsrl_vi_nxv32i16:
865 ; CHECK:       # %bb.0:
866 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
867 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
868 ; CHECK-NEXT:    ret
869   %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)
870   ret <vscale x 32 x i16> %v
873 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
874 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
875 ; CHECK:       # %bb.0:
876 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
877 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
878 ; CHECK-NEXT:    ret
879   %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)
880   ret <vscale x 32 x i16> %v
883 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)
885 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) {
886 ; CHECK-LABEL: vsrl_vv_nxv1i32:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
889 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
890 ; CHECK-NEXT:    ret
891   %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)
892   ret <vscale x 1 x i32> %v
895 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) {
896 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
899 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
900 ; CHECK-NEXT:    ret
901   %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)
902   ret <vscale x 1 x i32> %v
905 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) {
906 ; CHECK-LABEL: vsrl_vx_nxv1i32:
907 ; CHECK:       # %bb.0:
908 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
909 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
910 ; CHECK-NEXT:    ret
911   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
912   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
913   %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)
914   ret <vscale x 1 x i32> %v
917 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
918 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
919 ; CHECK:       # %bb.0:
920 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
921 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
922 ; CHECK-NEXT:    ret
923   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
924   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
925   %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)
926   ret <vscale x 1 x i32> %v
929 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
930 ; CHECK-LABEL: vsrl_vi_nxv1i32:
931 ; CHECK:       # %bb.0:
932 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
933 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
934 ; CHECK-NEXT:    ret
935   %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)
936   ret <vscale x 1 x i32> %v
939 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
940 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
941 ; CHECK:       # %bb.0:
942 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
943 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
944 ; CHECK-NEXT:    ret
945   %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)
946   ret <vscale x 1 x i32> %v
949 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)
951 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) {
952 ; CHECK-LABEL: vsrl_vv_nxv2i32:
953 ; CHECK:       # %bb.0:
954 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
955 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
956 ; CHECK-NEXT:    ret
957   %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)
958   ret <vscale x 2 x i32> %v
961 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) {
962 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
963 ; CHECK:       # %bb.0:
964 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
965 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
966 ; CHECK-NEXT:    ret
967   %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)
968   ret <vscale x 2 x i32> %v
971 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) {
972 ; CHECK-LABEL: vsrl_vx_nxv2i32:
973 ; CHECK:       # %bb.0:
974 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
975 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
976 ; CHECK-NEXT:    ret
977   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
978   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
979   %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)
980   ret <vscale x 2 x i32> %v
983 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
984 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
985 ; CHECK:       # %bb.0:
986 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
987 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
988 ; CHECK-NEXT:    ret
989   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
990   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
991   %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)
992   ret <vscale x 2 x i32> %v
995 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
996 ; CHECK-LABEL: vsrl_vi_nxv2i32:
997 ; CHECK:       # %bb.0:
998 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
999 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1000 ; CHECK-NEXT:    ret
1001   %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)
1002   ret <vscale x 2 x i32> %v
1005 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1006 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1007 ; CHECK:       # %bb.0:
1008 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1009 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1010 ; CHECK-NEXT:    ret
1011   %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)
1012   ret <vscale x 2 x i32> %v
1015 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)
1017 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) {
1018 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1019 ; CHECK:       # %bb.0:
1020 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1021 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1022 ; CHECK-NEXT:    ret
1023   %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)
1024   ret <vscale x 4 x i32> %v
1027 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) {
1028 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1029 ; CHECK:       # %bb.0:
1030 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1031 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1032 ; CHECK-NEXT:    ret
1033   %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)
1034   ret <vscale x 4 x i32> %v
1037 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) {
1038 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1039 ; CHECK:       # %bb.0:
1040 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1041 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1042 ; CHECK-NEXT:    ret
1043   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1044   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1045   %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)
1046   ret <vscale x 4 x i32> %v
1049 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1050 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1051 ; CHECK:       # %bb.0:
1052 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1053 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1054 ; CHECK-NEXT:    ret
1055   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1056   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1057   %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)
1058   ret <vscale x 4 x i32> %v
1061 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1062 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1063 ; CHECK:       # %bb.0:
1064 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1065 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1066 ; CHECK-NEXT:    ret
1067   %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)
1068   ret <vscale x 4 x i32> %v
1071 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1072 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1073 ; CHECK:       # %bb.0:
1074 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1075 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1076 ; CHECK-NEXT:    ret
1077   %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)
1078   ret <vscale x 4 x i32> %v
1081 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)
1083 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) {
1084 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1085 ; CHECK:       # %bb.0:
1086 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1087 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1088 ; CHECK-NEXT:    ret
1089   %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)
1090   ret <vscale x 8 x i32> %v
1093 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) {
1094 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1095 ; CHECK:       # %bb.0:
1096 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1097 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1098 ; CHECK-NEXT:    ret
1099   %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)
1100   ret <vscale x 8 x i32> %v
1103 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) {
1104 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1105 ; CHECK:       # %bb.0:
1106 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1107 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1108 ; CHECK-NEXT:    ret
1109   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1110   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1111   %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)
1112   ret <vscale x 8 x i32> %v
1115 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1116 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1117 ; CHECK:       # %bb.0:
1118 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1119 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1120 ; CHECK-NEXT:    ret
1121   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1122   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1123   %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)
1124   ret <vscale x 8 x i32> %v
1127 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1128 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1129 ; CHECK:       # %bb.0:
1130 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1131 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1132 ; CHECK-NEXT:    ret
1133   %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)
1134   ret <vscale x 8 x i32> %v
1137 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1138 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1139 ; CHECK:       # %bb.0:
1140 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1141 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1142 ; CHECK-NEXT:    ret
1143   %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)
1144   ret <vscale x 8 x i32> %v
1147 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)
1149 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) {
1150 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1151 ; CHECK:       # %bb.0:
1152 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1153 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1154 ; CHECK-NEXT:    ret
1155   %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)
1156   ret <vscale x 16 x i32> %v
1159 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) {
1160 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1161 ; CHECK:       # %bb.0:
1162 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1163 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1164 ; CHECK-NEXT:    ret
1165   %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)
1166   ret <vscale x 16 x i32> %v
1169 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) {
1170 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1171 ; CHECK:       # %bb.0:
1172 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1173 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1174 ; CHECK-NEXT:    ret
1175   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1176   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1177   %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)
1178   ret <vscale x 16 x i32> %v
1181 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1182 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1183 ; CHECK:       # %bb.0:
1184 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1185 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1186 ; CHECK-NEXT:    ret
1187   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1188   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1189   %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)
1190   ret <vscale x 16 x i32> %v
1193 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1194 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1195 ; CHECK:       # %bb.0:
1196 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1197 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1198 ; CHECK-NEXT:    ret
1199   %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)
1200   ret <vscale x 16 x i32> %v
1203 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1204 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1205 ; CHECK:       # %bb.0:
1206 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1207 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1208 ; CHECK-NEXT:    ret
1209   %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)
1210   ret <vscale x 16 x i32> %v
1213 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)
1215 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) {
1216 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1217 ; CHECK:       # %bb.0:
1218 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1219 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
1220 ; CHECK-NEXT:    ret
1221   %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)
1222   ret <vscale x 1 x i64> %v
1225 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) {
1226 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1227 ; CHECK:       # %bb.0:
1228 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1229 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
1230 ; CHECK-NEXT:    ret
1231   %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)
1232   ret <vscale x 1 x i64> %v
1235 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) {
1236 ; RV32-LABEL: vsrl_vx_nxv1i64:
1237 ; RV32:       # %bb.0:
1238 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1239 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1240 ; RV32-NEXT:    ret
1242 ; RV64-LABEL: vsrl_vx_nxv1i64:
1243 ; RV64:       # %bb.0:
1244 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1245 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1246 ; RV64-NEXT:    ret
1247   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1248   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1249   %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)
1250   ret <vscale x 1 x i64> %v
1253 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1254 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1255 ; RV32:       # %bb.0:
1256 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1257 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1258 ; RV32-NEXT:    ret
1260 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1261 ; RV64:       # %bb.0:
1262 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1263 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1264 ; RV64-NEXT:    ret
1265   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1266   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1267   %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)
1268   ret <vscale x 1 x i64> %v
1271 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1272 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1273 ; CHECK:       # %bb.0:
1274 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1275 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1276 ; CHECK-NEXT:    ret
1277   %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)
1278   ret <vscale x 1 x i64> %v
1281 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1282 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1283 ; CHECK:       # %bb.0:
1284 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1285 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1286 ; CHECK-NEXT:    ret
1287   %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)
1288   ret <vscale x 1 x i64> %v
1291 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)
1293 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) {
1294 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1295 ; CHECK:       # %bb.0:
1296 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1297 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1298 ; CHECK-NEXT:    ret
1299   %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)
1300   ret <vscale x 2 x i64> %v
1303 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) {
1304 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1305 ; CHECK:       # %bb.0:
1306 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1307 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1308 ; CHECK-NEXT:    ret
1309   %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)
1310   ret <vscale x 2 x i64> %v
1313 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) {
1314 ; RV32-LABEL: vsrl_vx_nxv2i64:
1315 ; RV32:       # %bb.0:
1316 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1317 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1318 ; RV32-NEXT:    ret
1320 ; RV64-LABEL: vsrl_vx_nxv2i64:
1321 ; RV64:       # %bb.0:
1322 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1323 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1324 ; RV64-NEXT:    ret
1325   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1326   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1327   %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)
1328   ret <vscale x 2 x i64> %v
1331 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1332 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1333 ; RV32:       # %bb.0:
1334 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1335 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1336 ; RV32-NEXT:    ret
1338 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1339 ; RV64:       # %bb.0:
1340 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1341 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1342 ; RV64-NEXT:    ret
1343   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1344   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1345   %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)
1346   ret <vscale x 2 x i64> %v
1349 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1350 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1351 ; CHECK:       # %bb.0:
1352 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1353 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1354 ; CHECK-NEXT:    ret
1355   %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)
1356   ret <vscale x 2 x i64> %v
1359 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1360 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1361 ; CHECK:       # %bb.0:
1362 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1363 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1364 ; CHECK-NEXT:    ret
1365   %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)
1366   ret <vscale x 2 x i64> %v
1369 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)
1371 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) {
1372 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1373 ; CHECK:       # %bb.0:
1374 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1375 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1376 ; CHECK-NEXT:    ret
1377   %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)
1378   ret <vscale x 4 x i64> %v
1381 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) {
1382 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1383 ; CHECK:       # %bb.0:
1384 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1385 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1386 ; CHECK-NEXT:    ret
1387   %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)
1388   ret <vscale x 4 x i64> %v
1391 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) {
1392 ; RV32-LABEL: vsrl_vx_nxv4i64:
1393 ; RV32:       # %bb.0:
1394 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1395 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1396 ; RV32-NEXT:    ret
1398 ; RV64-LABEL: vsrl_vx_nxv4i64:
1399 ; RV64:       # %bb.0:
1400 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1401 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1402 ; RV64-NEXT:    ret
1403   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1404   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1405   %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)
1406   ret <vscale x 4 x i64> %v
1409 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1410 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1411 ; RV32:       # %bb.0:
1412 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1413 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1414 ; RV32-NEXT:    ret
1416 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1417 ; RV64:       # %bb.0:
1418 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1419 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1420 ; RV64-NEXT:    ret
1421   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1422   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1423   %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)
1424   ret <vscale x 4 x i64> %v
1427 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1428 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1429 ; CHECK:       # %bb.0:
1430 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1431 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1432 ; CHECK-NEXT:    ret
1433   %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)
1434   ret <vscale x 4 x i64> %v
1437 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1438 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1439 ; CHECK:       # %bb.0:
1440 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1441 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1442 ; CHECK-NEXT:    ret
1443   %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)
1444   ret <vscale x 4 x i64> %v
1447 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)
1449 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) {
1450 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1451 ; CHECK:       # %bb.0:
1452 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1453 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1454 ; CHECK-NEXT:    ret
1455   %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)
1456   ret <vscale x 5 x i64> %v
1459 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)
1461 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) {
1462 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1463 ; CHECK:       # %bb.0:
1464 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1465 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1466 ; CHECK-NEXT:    ret
1467   %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)
1468   ret <vscale x 8 x i64> %v
1471 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) {
1472 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1473 ; CHECK:       # %bb.0:
1474 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1475 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1476 ; CHECK-NEXT:    ret
1477   %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)
1478   ret <vscale x 8 x i64> %v
1481 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) {
1482 ; RV32-LABEL: vsrl_vx_nxv8i64:
1483 ; RV32:       # %bb.0:
1484 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1485 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1486 ; RV32-NEXT:    ret
1488 ; RV64-LABEL: vsrl_vx_nxv8i64:
1489 ; RV64:       # %bb.0:
1490 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1491 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1492 ; RV64-NEXT:    ret
1493   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1494   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1495   %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)
1496   ret <vscale x 8 x i64> %v
1499 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1500 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1501 ; RV32:       # %bb.0:
1502 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1503 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1504 ; RV32-NEXT:    ret
1506 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1507 ; RV64:       # %bb.0:
1508 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1509 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1510 ; RV64-NEXT:    ret
1511   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1512   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1513   %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)
1514   ret <vscale x 8 x i64> %v
1517 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1518 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1519 ; CHECK:       # %bb.0:
1520 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1521 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1522 ; CHECK-NEXT:    ret
1523   %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)
1524   ret <vscale x 8 x i64> %v
1527 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1528 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1529 ; CHECK:       # %bb.0:
1530 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1531 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1532 ; CHECK-NEXT:    ret
1533   %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)
1534   ret <vscale x 8 x i64> %v