xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vsrl-vp.ll (revision 169c32eb49fa9b559d388b9b8f4374ff9e1be9be)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
6
7declare <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
8
9define <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
23}
24
25declare <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)
26
27define <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
35}
36
37define <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
45}
46
47define <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
57}
58
59define <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
69}
70
71define <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
79}
80
81define <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
89}
90
91declare <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)
92
93define <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
101}
102
103define <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
111}
112
113define <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
123}
124
125define <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
135}
136
137define <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
145}
146
147define <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
155}
156
157declare <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)
158
159define <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
167}
168
169define <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
177}
178
179define <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
189}
190
191define <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
201}
202
203define <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
211}
212
213define <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
221}
222
223declare <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)
224
225define <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
233}
234
235define <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
243}
244
245define <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
255}
256
257define <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
267}
268
269define <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
277}
278
279define <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
287}
288
289declare <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)
290
291define <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
299}
300
301define <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
309}
310
311define <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
321}
322
323define <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
333}
334
335define <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
343}
344
345define <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
353}
354
355declare <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)
356
357define <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
365}
366
367define <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
375}
376
377define <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
387}
388
389define <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
399}
400
401define <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
409}
410
411define <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
419}
420
421declare <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)
422
423define <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
431}
432
433define <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
441}
442
443define <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
453}
454
455define <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
465}
466
467define <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
475}
476
477define <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
485}
486
487declare <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)
488
489define <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
497}
498
499define <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
507}
508
509define <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
519}
520
521define <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
531}
532
533define <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
541}
542
543define <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
551}
552
553declare <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)
554
555define <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
563}
564
565define <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
573}
574
575define <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
585}
586
587define <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
597}
598
599define <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
607}
608
609define <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
617}
618
619declare <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)
620
621define <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
629}
630
631define <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
639}
640
641define <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
651}
652
653define <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
663}
664
665define <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
673}
674
675define <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
683}
684
685declare <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)
686
687define <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
695}
696
697define <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
705}
706
707define <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
717}
718
719define <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
729}
730
731define <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
739}
740
741define <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
749}
750
751declare <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)
752
753define <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
761}
762
763define <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
771}
772
773define <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
783}
784
785define <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
795}
796
797define <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
805}
806
807define <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
815}
816
817declare <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)
818
819define <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
827}
828
829define <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
837}
838
839define <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
849}
850
851define <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
861}
862
863define <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
871}
872
873define <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
881}
882
883declare <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)
884
885define <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
893}
894
895define <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
903}
904
905define <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
915}
916
917define <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
927}
928
929define <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
937}
938
939define <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
947}
948
949declare <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)
950
951define <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
959}
960
961define <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
969}
970
971define <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
981}
982
983define <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
993}
994
995define <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
1003}
1004
1005define <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
1013}
1014
1015declare <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)
1016
1017define <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
1025}
1026
1027define <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
1035}
1036
1037define <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
1047}
1048
1049define <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
1059}
1060
1061define <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
1069}
1070
1071define <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
1079}
1080
1081declare <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)
1082
1083define <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
1091}
1092
1093define <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
1101}
1102
1103define <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
1113}
1114
1115define <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
1125}
1126
1127define <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
1135}
1136
1137define <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
1145}
1146
1147declare <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)
1148
1149define <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
1157}
1158
1159define <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
1167}
1168
1169define <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
1179}
1180
1181define <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
1191}
1192
1193define <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
1201}
1202
1203define <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
1211}
1212
1213declare <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)
1214
1215define <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
1223}
1224
1225define <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
1233}
1234
1235define <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
1241;
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
1251}
1252
1253define <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
1259;
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
1269}
1270
1271define <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
1279}
1280
1281define <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
1289}
1290
1291declare <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)
1292
1293define <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
1301}
1302
1303define <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
1311}
1312
1313define <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
1319;
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
1329}
1330
1331define <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
1337;
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
1347}
1348
1349define <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
1357}
1358
1359define <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
1367}
1368
1369declare <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)
1370
1371define <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
1379}
1380
1381define <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
1389}
1390
1391define <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
1397;
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
1407}
1408
1409define <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
1415;
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
1425}
1426
1427define <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
1435}
1436
1437define <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
1445}
1446
1447declare <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)
1448
1449define <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
1457}
1458
1459declare <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)
1460
1461define <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
1469}
1470
1471define <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
1479}
1480
1481define <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
1487;
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
1497}
1498
1499define <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
1505;
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
1515}
1516
1517define <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
1525}
1526
1527define <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
1535}
1536