1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
4
5define <vscale x 1 x i8> @vsrl_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) {
6; CHECK-LABEL: vsrl_vx_nxv1i8:
7; CHECK:       # %bb.0:
8; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, mu
9; CHECK-NEXT:    vsrl.vx v8, v8, a0
10; CHECK-NEXT:    ret
11  %head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
12  %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
13  %vc = lshr <vscale x 1 x i8> %va, %splat
14  ret <vscale x 1 x i8> %vc
15}
16
17define <vscale x 1 x i8> @vsrl_vx_nxv1i8_0(<vscale x 1 x i8> %va) {
18; CHECK-LABEL: vsrl_vx_nxv1i8_0:
19; CHECK:       # %bb.0:
20; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, mu
21; CHECK-NEXT:    vsrl.vi v8, v8, 6
22; CHECK-NEXT:    ret
23  %head = insertelement <vscale x 1 x i8> poison, i8 6, i32 0
24  %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
25  %vc = lshr <vscale x 1 x i8> %va, %splat
26  ret <vscale x 1 x i8> %vc
27}
28
29define <vscale x 2 x i8> @vsrl_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) {
30; CHECK-LABEL: vsrl_vx_nxv2i8:
31; CHECK:       # %bb.0:
32; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, mu
33; CHECK-NEXT:    vsrl.vx v8, v8, a0
34; CHECK-NEXT:    ret
35  %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
36  %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
37  %vc = lshr <vscale x 2 x i8> %va, %splat
38  ret <vscale x 2 x i8> %vc
39}
40
41define <vscale x 2 x i8> @vsrl_vx_nxv2i8_0(<vscale x 2 x i8> %va) {
42; CHECK-LABEL: vsrl_vx_nxv2i8_0:
43; CHECK:       # %bb.0:
44; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, mu
45; CHECK-NEXT:    vsrl.vi v8, v8, 6
46; CHECK-NEXT:    ret
47  %head = insertelement <vscale x 2 x i8> poison, i8 6, i32 0
48  %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
49  %vc = lshr <vscale x 2 x i8> %va, %splat
50  ret <vscale x 2 x i8> %vc
51}
52
53define <vscale x 4 x i8> @vsrl_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) {
54; CHECK-LABEL: vsrl_vx_nxv4i8:
55; CHECK:       # %bb.0:
56; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, mu
57; CHECK-NEXT:    vsrl.vx v8, v8, a0
58; CHECK-NEXT:    ret
59  %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
60  %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
61  %vc = lshr <vscale x 4 x i8> %va, %splat
62  ret <vscale x 4 x i8> %vc
63}
64
65define <vscale x 4 x i8> @vsrl_vx_nxv4i8_0(<vscale x 4 x i8> %va) {
66; CHECK-LABEL: vsrl_vx_nxv4i8_0:
67; CHECK:       # %bb.0:
68; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, mu
69; CHECK-NEXT:    vsrl.vi v8, v8, 6
70; CHECK-NEXT:    ret
71  %head = insertelement <vscale x 4 x i8> poison, i8 6, i32 0
72  %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
73  %vc = lshr <vscale x 4 x i8> %va, %splat
74  ret <vscale x 4 x i8> %vc
75}
76
77define <vscale x 8 x i8> @vsrl_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) {
78; CHECK-LABEL: vsrl_vx_nxv8i8:
79; CHECK:       # %bb.0:
80; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, mu
81; CHECK-NEXT:    vsrl.vx v8, v8, a0
82; CHECK-NEXT:    ret
83  %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
84  %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
85  %vc = lshr <vscale x 8 x i8> %va, %splat
86  ret <vscale x 8 x i8> %vc
87}
88
89define <vscale x 8 x i8> @vsrl_vx_nxv8i8_0(<vscale x 8 x i8> %va) {
90; CHECK-LABEL: vsrl_vx_nxv8i8_0:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, mu
93; CHECK-NEXT:    vsrl.vi v8, v8, 6
94; CHECK-NEXT:    ret
95  %head = insertelement <vscale x 8 x i8> poison, i8 6, i32 0
96  %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
97  %vc = lshr <vscale x 8 x i8> %va, %splat
98  ret <vscale x 8 x i8> %vc
99}
100
101define <vscale x 16 x i8> @vsrl_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) {
102; CHECK-LABEL: vsrl_vx_nxv16i8:
103; CHECK:       # %bb.0:
104; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, mu
105; CHECK-NEXT:    vsrl.vx v8, v8, a0
106; CHECK-NEXT:    ret
107  %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
108  %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
109  %vc = lshr <vscale x 16 x i8> %va, %splat
110  ret <vscale x 16 x i8> %vc
111}
112
113define <vscale x 16 x i8> @vsrl_vx_nxv16i8_0(<vscale x 16 x i8> %va) {
114; CHECK-LABEL: vsrl_vx_nxv16i8_0:
115; CHECK:       # %bb.0:
116; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, mu
117; CHECK-NEXT:    vsrl.vi v8, v8, 6
118; CHECK-NEXT:    ret
119  %head = insertelement <vscale x 16 x i8> poison, i8 6, i32 0
120  %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
121  %vc = lshr <vscale x 16 x i8> %va, %splat
122  ret <vscale x 16 x i8> %vc
123}
124
125define <vscale x 32 x i8> @vsrl_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) {
126; CHECK-LABEL: vsrl_vx_nxv32i8:
127; CHECK:       # %bb.0:
128; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, mu
129; CHECK-NEXT:    vsrl.vx v8, v8, a0
130; CHECK-NEXT:    ret
131  %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
132  %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
133  %vc = lshr <vscale x 32 x i8> %va, %splat
134  ret <vscale x 32 x i8> %vc
135}
136
137define <vscale x 32 x i8> @vsrl_vx_nxv32i8_0(<vscale x 32 x i8> %va) {
138; CHECK-LABEL: vsrl_vx_nxv32i8_0:
139; CHECK:       # %bb.0:
140; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, mu
141; CHECK-NEXT:    vsrl.vi v8, v8, 6
142; CHECK-NEXT:    ret
143  %head = insertelement <vscale x 32 x i8> poison, i8 6, i32 0
144  %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
145  %vc = lshr <vscale x 32 x i8> %va, %splat
146  ret <vscale x 32 x i8> %vc
147}
148
149define <vscale x 64 x i8> @vsrl_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) {
150; CHECK-LABEL: vsrl_vx_nxv64i8:
151; CHECK:       # %bb.0:
152; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, mu
153; CHECK-NEXT:    vsrl.vx v8, v8, a0
154; CHECK-NEXT:    ret
155  %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
156  %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
157  %vc = lshr <vscale x 64 x i8> %va, %splat
158  ret <vscale x 64 x i8> %vc
159}
160
161define <vscale x 64 x i8> @vsrl_vx_nxv64i8_0(<vscale x 64 x i8> %va) {
162; CHECK-LABEL: vsrl_vx_nxv64i8_0:
163; CHECK:       # %bb.0:
164; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, mu
165; CHECK-NEXT:    vsrl.vi v8, v8, 6
166; CHECK-NEXT:    ret
167  %head = insertelement <vscale x 64 x i8> poison, i8 6, i32 0
168  %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
169  %vc = lshr <vscale x 64 x i8> %va, %splat
170  ret <vscale x 64 x i8> %vc
171}
172
173define <vscale x 1 x i16> @vsrl_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) {
174; CHECK-LABEL: vsrl_vx_nxv1i16:
175; CHECK:       # %bb.0:
176; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, mu
177; CHECK-NEXT:    vsrl.vx v8, v8, a0
178; CHECK-NEXT:    ret
179  %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
180  %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
181  %vc = lshr <vscale x 1 x i16> %va, %splat
182  ret <vscale x 1 x i16> %vc
183}
184
185define <vscale x 1 x i16> @vsrl_vx_nxv1i16_0(<vscale x 1 x i16> %va) {
186; CHECK-LABEL: vsrl_vx_nxv1i16_0:
187; CHECK:       # %bb.0:
188; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu
189; CHECK-NEXT:    vsrl.vi v8, v8, 6
190; CHECK-NEXT:    ret
191  %head = insertelement <vscale x 1 x i16> poison, i16 6, i32 0
192  %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
193  %vc = lshr <vscale x 1 x i16> %va, %splat
194  ret <vscale x 1 x i16> %vc
195}
196
197define <vscale x 2 x i16> @vsrl_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) {
198; CHECK-LABEL: vsrl_vx_nxv2i16:
199; CHECK:       # %bb.0:
200; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, mu
201; CHECK-NEXT:    vsrl.vx v8, v8, a0
202; CHECK-NEXT:    ret
203  %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
204  %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
205  %vc = lshr <vscale x 2 x i16> %va, %splat
206  ret <vscale x 2 x i16> %vc
207}
208
209define <vscale x 2 x i16> @vsrl_vx_nxv2i16_0(<vscale x 2 x i16> %va) {
210; CHECK-LABEL: vsrl_vx_nxv2i16_0:
211; CHECK:       # %bb.0:
212; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
213; CHECK-NEXT:    vsrl.vi v8, v8, 6
214; CHECK-NEXT:    ret
215  %head = insertelement <vscale x 2 x i16> poison, i16 6, i32 0
216  %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
217  %vc = lshr <vscale x 2 x i16> %va, %splat
218  ret <vscale x 2 x i16> %vc
219}
220
221define <vscale x 4 x i16> @vsrl_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) {
222; CHECK-LABEL: vsrl_vx_nxv4i16:
223; CHECK:       # %bb.0:
224; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, mu
225; CHECK-NEXT:    vsrl.vx v8, v8, a0
226; CHECK-NEXT:    ret
227  %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
228  %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
229  %vc = lshr <vscale x 4 x i16> %va, %splat
230  ret <vscale x 4 x i16> %vc
231}
232
233define <vscale x 4 x i16> @vsrl_vx_nxv4i16_0(<vscale x 4 x i16> %va) {
234; CHECK-LABEL: vsrl_vx_nxv4i16_0:
235; CHECK:       # %bb.0:
236; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu
237; CHECK-NEXT:    vsrl.vi v8, v8, 6
238; CHECK-NEXT:    ret
239  %head = insertelement <vscale x 4 x i16> poison, i16 6, i32 0
240  %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
241  %vc = lshr <vscale x 4 x i16> %va, %splat
242  ret <vscale x 4 x i16> %vc
243}
244
245define <vscale x 8 x i16> @vsrl_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) {
246; CHECK-LABEL: vsrl_vx_nxv8i16:
247; CHECK:       # %bb.0:
248; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, mu
249; CHECK-NEXT:    vsrl.vx v8, v8, a0
250; CHECK-NEXT:    ret
251  %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
252  %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
253  %vc = lshr <vscale x 8 x i16> %va, %splat
254  ret <vscale x 8 x i16> %vc
255}
256
257define <vscale x 8 x i16> @vsrl_vx_nxv8i16_0(<vscale x 8 x i16> %va) {
258; CHECK-LABEL: vsrl_vx_nxv8i16_0:
259; CHECK:       # %bb.0:
260; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
261; CHECK-NEXT:    vsrl.vi v8, v8, 6
262; CHECK-NEXT:    ret
263  %head = insertelement <vscale x 8 x i16> poison, i16 6, i32 0
264  %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
265  %vc = lshr <vscale x 8 x i16> %va, %splat
266  ret <vscale x 8 x i16> %vc
267}
268
269define <vscale x 16 x i16> @vsrl_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) {
270; CHECK-LABEL: vsrl_vx_nxv16i16:
271; CHECK:       # %bb.0:
272; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, mu
273; CHECK-NEXT:    vsrl.vx v8, v8, a0
274; CHECK-NEXT:    ret
275  %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
276  %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
277  %vc = lshr <vscale x 16 x i16> %va, %splat
278  ret <vscale x 16 x i16> %vc
279}
280
281define <vscale x 16 x i16> @vsrl_vx_nxv16i16_0(<vscale x 16 x i16> %va) {
282; CHECK-LABEL: vsrl_vx_nxv16i16_0:
283; CHECK:       # %bb.0:
284; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu
285; CHECK-NEXT:    vsrl.vi v8, v8, 6
286; CHECK-NEXT:    ret
287  %head = insertelement <vscale x 16 x i16> poison, i16 6, i32 0
288  %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
289  %vc = lshr <vscale x 16 x i16> %va, %splat
290  ret <vscale x 16 x i16> %vc
291}
292
293define <vscale x 32 x i16> @vsrl_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) {
294; CHECK-LABEL: vsrl_vx_nxv32i16:
295; CHECK:       # %bb.0:
296; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, mu
297; CHECK-NEXT:    vsrl.vx v8, v8, a0
298; CHECK-NEXT:    ret
299  %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
300  %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
301  %vc = lshr <vscale x 32 x i16> %va, %splat
302  ret <vscale x 32 x i16> %vc
303}
304
305define <vscale x 32 x i16> @vsrl_vx_nxv32i16_0(<vscale x 32 x i16> %va) {
306; CHECK-LABEL: vsrl_vx_nxv32i16_0:
307; CHECK:       # %bb.0:
308; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu
309; CHECK-NEXT:    vsrl.vi v8, v8, 6
310; CHECK-NEXT:    ret
311  %head = insertelement <vscale x 32 x i16> poison, i16 6, i32 0
312  %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
313  %vc = lshr <vscale x 32 x i16> %va, %splat
314  ret <vscale x 32 x i16> %vc
315}
316
317define <vscale x 1 x i32> @vsrl_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) {
318; CHECK-LABEL: vsrl_vx_nxv1i32:
319; CHECK:       # %bb.0:
320; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, mu
321; CHECK-NEXT:    vsrl.vx v8, v8, a0
322; CHECK-NEXT:    ret
323  %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
324  %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
325  %vc = lshr <vscale x 1 x i32> %va, %splat
326  ret <vscale x 1 x i32> %vc
327}
328
329define <vscale x 1 x i32> @vsrl_vx_nxv1i32_0(<vscale x 1 x i32> %va) {
330; CHECK-LABEL: vsrl_vx_nxv1i32_0:
331; CHECK:       # %bb.0:
332; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu
333; CHECK-NEXT:    vsrl.vi v8, v8, 31
334; CHECK-NEXT:    ret
335  %head = insertelement <vscale x 1 x i32> poison, i32 31, i32 0
336  %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
337  %vc = lshr <vscale x 1 x i32> %va, %splat
338  ret <vscale x 1 x i32> %vc
339}
340
341define <vscale x 2 x i32> @vsrl_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) {
342; CHECK-LABEL: vsrl_vx_nxv2i32:
343; CHECK:       # %bb.0:
344; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, mu
345; CHECK-NEXT:    vsrl.vx v8, v8, a0
346; CHECK-NEXT:    ret
347  %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
348  %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
349  %vc = lshr <vscale x 2 x i32> %va, %splat
350  ret <vscale x 2 x i32> %vc
351}
352
353define <vscale x 2 x i32> @vsrl_vx_nxv2i32_0(<vscale x 2 x i32> %va) {
354; CHECK-LABEL: vsrl_vx_nxv2i32_0:
355; CHECK:       # %bb.0:
356; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu
357; CHECK-NEXT:    vsrl.vi v8, v8, 31
358; CHECK-NEXT:    ret
359  %head = insertelement <vscale x 2 x i32> poison, i32 31, i32 0
360  %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
361  %vc = lshr <vscale x 2 x i32> %va, %splat
362  ret <vscale x 2 x i32> %vc
363}
364
365define <vscale x 4 x i32> @vsrl_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) {
366; CHECK-LABEL: vsrl_vx_nxv4i32:
367; CHECK:       # %bb.0:
368; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, mu
369; CHECK-NEXT:    vsrl.vx v8, v8, a0
370; CHECK-NEXT:    ret
371  %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
372  %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
373  %vc = lshr <vscale x 4 x i32> %va, %splat
374  ret <vscale x 4 x i32> %vc
375}
376
377define <vscale x 4 x i32> @vsrl_vx_nxv4i32_0(<vscale x 4 x i32> %va) {
378; CHECK-LABEL: vsrl_vx_nxv4i32_0:
379; CHECK:       # %bb.0:
380; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu
381; CHECK-NEXT:    vsrl.vi v8, v8, 31
382; CHECK-NEXT:    ret
383  %head = insertelement <vscale x 4 x i32> poison, i32 31, i32 0
384  %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
385  %vc = lshr <vscale x 4 x i32> %va, %splat
386  ret <vscale x 4 x i32> %vc
387}
388
389define <vscale x 8 x i32> @vsrl_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) {
390; CHECK-LABEL: vsrl_vx_nxv8i32:
391; CHECK:       # %bb.0:
392; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, mu
393; CHECK-NEXT:    vsrl.vx v8, v8, a0
394; CHECK-NEXT:    ret
395  %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
396  %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
397  %vc = lshr <vscale x 8 x i32> %va, %splat
398  ret <vscale x 8 x i32> %vc
399}
400
401define <vscale x 8 x i32> @vsrl_vx_nxv8i32_0(<vscale x 8 x i32> %va) {
402; CHECK-LABEL: vsrl_vx_nxv8i32_0:
403; CHECK:       # %bb.0:
404; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
405; CHECK-NEXT:    vsrl.vi v8, v8, 31
406; CHECK-NEXT:    ret
407  %head = insertelement <vscale x 8 x i32> poison, i32 31, i32 0
408  %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
409  %vc = lshr <vscale x 8 x i32> %va, %splat
410  ret <vscale x 8 x i32> %vc
411}
412
413define <vscale x 16 x i32> @vsrl_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) {
414; CHECK-LABEL: vsrl_vx_nxv16i32:
415; CHECK:       # %bb.0:
416; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, mu
417; CHECK-NEXT:    vsrl.vx v8, v8, a0
418; CHECK-NEXT:    ret
419  %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
420  %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
421  %vc = lshr <vscale x 16 x i32> %va, %splat
422  ret <vscale x 16 x i32> %vc
423}
424
425define <vscale x 16 x i32> @vsrl_vx_nxv16i32_0(<vscale x 16 x i32> %va) {
426; CHECK-LABEL: vsrl_vx_nxv16i32_0:
427; CHECK:       # %bb.0:
428; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu
429; CHECK-NEXT:    vsrl.vi v8, v8, 31
430; CHECK-NEXT:    ret
431  %head = insertelement <vscale x 16 x i32> poison, i32 31, i32 0
432  %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
433  %vc = lshr <vscale x 16 x i32> %va, %splat
434  ret <vscale x 16 x i32> %vc
435}
436
437define <vscale x 1 x i64> @vsrl_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) {
438; CHECK-LABEL: vsrl_vx_nxv1i64:
439; CHECK:       # %bb.0:
440; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, mu
441; CHECK-NEXT:    vsrl.vx v8, v8, a0
442; CHECK-NEXT:    ret
443  %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
444  %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
445  %vc = lshr <vscale x 1 x i64> %va, %splat
446  ret <vscale x 1 x i64> %vc
447}
448
449define <vscale x 1 x i64> @vsrl_vx_nxv1i64_0(<vscale x 1 x i64> %va) {
450; CHECK-LABEL: vsrl_vx_nxv1i64_0:
451; CHECK:       # %bb.0:
452; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, mu
453; CHECK-NEXT:    vsrl.vi v8, v8, 31
454; CHECK-NEXT:    ret
455  %head = insertelement <vscale x 1 x i64> poison, i64 31, i32 0
456  %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
457  %vc = lshr <vscale x 1 x i64> %va, %splat
458  ret <vscale x 1 x i64> %vc
459}
460
461define <vscale x 1 x i64> @vsrl_vx_nxv1i64_1(<vscale x 1 x i64> %va) {
462; CHECK-LABEL: vsrl_vx_nxv1i64_1:
463; CHECK:       # %bb.0:
464; CHECK-NEXT:    li a0, 32
465; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, mu
466; CHECK-NEXT:    vsrl.vx v8, v8, a0
467; CHECK-NEXT:    ret
468  %head = insertelement <vscale x 1 x i64> poison, i64 32, i32 0
469  %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
470  %vc = lshr <vscale x 1 x i64> %va, %splat
471  ret <vscale x 1 x i64> %vc
472}
473
474define <vscale x 2 x i64> @vsrl_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) {
475; CHECK-LABEL: vsrl_vx_nxv2i64:
476; CHECK:       # %bb.0:
477; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, mu
478; CHECK-NEXT:    vsrl.vx v8, v8, a0
479; CHECK-NEXT:    ret
480  %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
481  %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
482  %vc = lshr <vscale x 2 x i64> %va, %splat
483  ret <vscale x 2 x i64> %vc
484}
485
486define <vscale x 2 x i64> @vsrl_vx_nxv2i64_0(<vscale x 2 x i64> %va) {
487; CHECK-LABEL: vsrl_vx_nxv2i64_0:
488; CHECK:       # %bb.0:
489; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, mu
490; CHECK-NEXT:    vsrl.vi v8, v8, 31
491; CHECK-NEXT:    ret
492  %head = insertelement <vscale x 2 x i64> poison, i64 31, i32 0
493  %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
494  %vc = lshr <vscale x 2 x i64> %va, %splat
495  ret <vscale x 2 x i64> %vc
496}
497
498define <vscale x 2 x i64> @vsrl_vx_nxv2i64_1(<vscale x 2 x i64> %va) {
499; CHECK-LABEL: vsrl_vx_nxv2i64_1:
500; CHECK:       # %bb.0:
501; CHECK-NEXT:    li a0, 32
502; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, mu
503; CHECK-NEXT:    vsrl.vx v8, v8, a0
504; CHECK-NEXT:    ret
505  %head = insertelement <vscale x 2 x i64> poison, i64 32, i32 0
506  %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
507  %vc = lshr <vscale x 2 x i64> %va, %splat
508  ret <vscale x 2 x i64> %vc
509}
510
511define <vscale x 4 x i64> @vsrl_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) {
512; CHECK-LABEL: vsrl_vx_nxv4i64:
513; CHECK:       # %bb.0:
514; CHECK-NEXT:    vsetvli a1, zero, e64, m4, ta, mu
515; CHECK-NEXT:    vsrl.vx v8, v8, a0
516; CHECK-NEXT:    ret
517  %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
518  %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
519  %vc = lshr <vscale x 4 x i64> %va, %splat
520  ret <vscale x 4 x i64> %vc
521}
522
523define <vscale x 4 x i64> @vsrl_vx_nxv4i64_0(<vscale x 4 x i64> %va) {
524; CHECK-LABEL: vsrl_vx_nxv4i64_0:
525; CHECK:       # %bb.0:
526; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, mu
527; CHECK-NEXT:    vsrl.vi v8, v8, 31
528; CHECK-NEXT:    ret
529  %head = insertelement <vscale x 4 x i64> poison, i64 31, i32 0
530  %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
531  %vc = lshr <vscale x 4 x i64> %va, %splat
532  ret <vscale x 4 x i64> %vc
533}
534
535define <vscale x 4 x i64> @vsrl_vx_nxv4i64_1(<vscale x 4 x i64> %va) {
536; CHECK-LABEL: vsrl_vx_nxv4i64_1:
537; CHECK:       # %bb.0:
538; CHECK-NEXT:    li a0, 32
539; CHECK-NEXT:    vsetvli a1, zero, e64, m4, ta, mu
540; CHECK-NEXT:    vsrl.vx v8, v8, a0
541; CHECK-NEXT:    ret
542  %head = insertelement <vscale x 4 x i64> poison, i64 32, i32 0
543  %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
544  %vc = lshr <vscale x 4 x i64> %va, %splat
545  ret <vscale x 4 x i64> %vc
546}
547
548define <vscale x 8 x i64> @vsrl_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) {
549; CHECK-LABEL: vsrl_vx_nxv8i64:
550; CHECK:       # %bb.0:
551; CHECK-NEXT:    vsetvli a1, zero, e64, m8, ta, mu
552; CHECK-NEXT:    vsrl.vx v8, v8, a0
553; CHECK-NEXT:    ret
554  %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
555  %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
556  %vc = lshr <vscale x 8 x i64> %va, %splat
557  ret <vscale x 8 x i64> %vc
558}
559
560define <vscale x 8 x i64> @vsrl_vx_nxv8i64_0(<vscale x 8 x i64> %va) {
561; CHECK-LABEL: vsrl_vx_nxv8i64_0:
562; CHECK:       # %bb.0:
563; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
564; CHECK-NEXT:    vsrl.vi v8, v8, 31
565; CHECK-NEXT:    ret
566  %head = insertelement <vscale x 8 x i64> poison, i64 31, i32 0
567  %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
568  %vc = lshr <vscale x 8 x i64> %va, %splat
569  ret <vscale x 8 x i64> %vc
570}
571
572define <vscale x 8 x i64> @vsrl_vx_nxv8i64_1(<vscale x 8 x i64> %va) {
573; CHECK-LABEL: vsrl_vx_nxv8i64_1:
574; CHECK:       # %bb.0:
575; CHECK-NEXT:    li a0, 32
576; CHECK-NEXT:    vsetvli a1, zero, e64, m8, ta, mu
577; CHECK-NEXT:    vsrl.vx v8, v8, a0
578; CHECK-NEXT:    ret
579  %head = insertelement <vscale x 8 x i64> poison, i64 32, i32 0
580  %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
581  %vc = lshr <vscale x 8 x i64> %va, %splat
582  ret <vscale x 8 x i64> %vc
583}
584
585