1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple riscv32 -mattr=+m,+f,+d,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s
3 ; RUN: llc -mtriple riscv64 -mattr=+m,+f,+d,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s
4 ; RUN: llc -mtriple riscv32 -mattr=+m,+f,+d,+v,+zvfh,+zvfbfmin < %s | FileCheck %s
5 ; RUN: llc -mtriple riscv64 -mattr=+m,+f,+d,+v,+zvfh,+zvfbfmin < %s | FileCheck %s
7 ; Tests assume VLEN=128 or vscale_range_min=2.
9 declare <vscale x 1 x i1> @llvm.vector.splice.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, i32)
11 define <vscale x 1 x i1> @splice_nxv1i1_offset_negone(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b) #0 {
12 ; CHECK-LABEL: splice_nxv1i1_offset_negone:
14 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
15 ; CHECK-NEXT: vmv1r.v v9, v0
16 ; CHECK-NEXT: vmv1r.v v0, v8
17 ; CHECK-NEXT: vmv.v.i v8, 0
18 ; CHECK-NEXT: csrr a0, vlenb
19 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
20 ; CHECK-NEXT: vmv1r.v v0, v9
21 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
22 ; CHECK-NEXT: srli a0, a0, 3
23 ; CHECK-NEXT: addi a0, a0, -1
24 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
25 ; CHECK-NEXT: vslideup.vi v8, v10, 1
26 ; CHECK-NEXT: vand.vi v8, v8, 1
27 ; CHECK-NEXT: vmsne.vi v0, v8, 0
29 %res = call <vscale x 1 x i1> @llvm.vector.splice.nxv1i1(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b, i32 -1)
30 ret <vscale x 1 x i1> %res
33 define <vscale x 1 x i1> @splice_nxv1i1_offset_max(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b) #0 {
34 ; CHECK-LABEL: splice_nxv1i1_offset_max:
36 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
37 ; CHECK-NEXT: vmv1r.v v9, v0
38 ; CHECK-NEXT: vmv1r.v v0, v8
39 ; CHECK-NEXT: vmv.v.i v8, 0
40 ; CHECK-NEXT: csrr a0, vlenb
41 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
42 ; CHECK-NEXT: vmv1r.v v0, v9
43 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
44 ; CHECK-NEXT: srli a0, a0, 3
45 ; CHECK-NEXT: addi a0, a0, -1
46 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
47 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
48 ; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
49 ; CHECK-NEXT: vslideup.vx v8, v10, a0
50 ; CHECK-NEXT: vand.vi v8, v8, 1
51 ; CHECK-NEXT: vmsne.vi v0, v8, 0
53 %res = call <vscale x 1 x i1> @llvm.vector.splice.nxv1i1(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b, i32 1)
54 ret <vscale x 1 x i1> %res
57 declare <vscale x 2 x i1> @llvm.vector.splice.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, i32)
59 define <vscale x 2 x i1> @splice_nxv2i1_offset_negone(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) #0 {
60 ; CHECK-LABEL: splice_nxv2i1_offset_negone:
62 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
63 ; CHECK-NEXT: vmv1r.v v9, v0
64 ; CHECK-NEXT: vmv1r.v v0, v8
65 ; CHECK-NEXT: vmv.v.i v8, 0
66 ; CHECK-NEXT: csrr a0, vlenb
67 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
68 ; CHECK-NEXT: vmv1r.v v0, v9
69 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
70 ; CHECK-NEXT: srli a0, a0, 2
71 ; CHECK-NEXT: addi a0, a0, -1
72 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
73 ; CHECK-NEXT: vslideup.vi v8, v10, 1
74 ; CHECK-NEXT: vand.vi v8, v8, 1
75 ; CHECK-NEXT: vmsne.vi v0, v8, 0
77 %res = call <vscale x 2 x i1> @llvm.vector.splice.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b, i32 -1)
78 ret <vscale x 2 x i1> %res
81 define <vscale x 2 x i1> @splice_nxv2i1_offset_max(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) #0 {
82 ; CHECK-LABEL: splice_nxv2i1_offset_max:
84 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
85 ; CHECK-NEXT: vmv1r.v v9, v0
86 ; CHECK-NEXT: vmv1r.v v0, v8
87 ; CHECK-NEXT: vmv.v.i v8, 0
88 ; CHECK-NEXT: csrr a0, vlenb
89 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
90 ; CHECK-NEXT: vmv1r.v v0, v9
91 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
92 ; CHECK-NEXT: srli a0, a0, 2
93 ; CHECK-NEXT: addi a0, a0, -3
94 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
95 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
96 ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
97 ; CHECK-NEXT: vslideup.vx v8, v10, a0
98 ; CHECK-NEXT: vand.vi v8, v8, 1
99 ; CHECK-NEXT: vmsne.vi v0, v8, 0
101 %res = call <vscale x 2 x i1> @llvm.vector.splice.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b, i32 3)
102 ret <vscale x 2 x i1> %res
105 declare <vscale x 4 x i1> @llvm.vector.splice.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, i32)
107 define <vscale x 4 x i1> @splice_nxv4i1_offset_negone(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b) #0 {
108 ; CHECK-LABEL: splice_nxv4i1_offset_negone:
110 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
111 ; CHECK-NEXT: vmv1r.v v9, v0
112 ; CHECK-NEXT: vmv1r.v v0, v8
113 ; CHECK-NEXT: vmv.v.i v8, 0
114 ; CHECK-NEXT: csrr a0, vlenb
115 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
116 ; CHECK-NEXT: vmv1r.v v0, v9
117 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
118 ; CHECK-NEXT: srli a0, a0, 1
119 ; CHECK-NEXT: addi a0, a0, -1
120 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
121 ; CHECK-NEXT: vslideup.vi v8, v10, 1
122 ; CHECK-NEXT: vand.vi v8, v8, 1
123 ; CHECK-NEXT: vmsne.vi v0, v8, 0
125 %res = call <vscale x 4 x i1> @llvm.vector.splice.nxv4i1(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b, i32 -1)
126 ret <vscale x 4 x i1> %res
129 define <vscale x 4 x i1> @splice_nxv4i1_offset_max(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b) #0 {
130 ; CHECK-LABEL: splice_nxv4i1_offset_max:
132 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
133 ; CHECK-NEXT: vmv1r.v v9, v0
134 ; CHECK-NEXT: vmv1r.v v0, v8
135 ; CHECK-NEXT: vmv.v.i v8, 0
136 ; CHECK-NEXT: csrr a0, vlenb
137 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
138 ; CHECK-NEXT: vmv1r.v v0, v9
139 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
140 ; CHECK-NEXT: srli a0, a0, 1
141 ; CHECK-NEXT: addi a0, a0, -7
142 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
143 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
144 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
145 ; CHECK-NEXT: vslideup.vx v8, v10, a0
146 ; CHECK-NEXT: vand.vi v8, v8, 1
147 ; CHECK-NEXT: vmsne.vi v0, v8, 0
149 %res = call <vscale x 4 x i1> @llvm.vector.splice.nxv4i1(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b, i32 7)
150 ret <vscale x 4 x i1> %res
153 declare <vscale x 8 x i1> @llvm.vector.splice.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, i32)
155 define <vscale x 8 x i1> @splice_nxv8i1_offset_negone(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b) #0 {
156 ; CHECK-LABEL: splice_nxv8i1_offset_negone:
158 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
159 ; CHECK-NEXT: vmv1r.v v9, v0
160 ; CHECK-NEXT: vmv1r.v v0, v8
161 ; CHECK-NEXT: vmv.v.i v8, 0
162 ; CHECK-NEXT: csrr a0, vlenb
163 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
164 ; CHECK-NEXT: vmv1r.v v0, v9
165 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
166 ; CHECK-NEXT: addi a0, a0, -1
167 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
168 ; CHECK-NEXT: vslideup.vi v8, v10, 1
169 ; CHECK-NEXT: vand.vi v8, v8, 1
170 ; CHECK-NEXT: vmsne.vi v0, v8, 0
172 %res = call <vscale x 8 x i1> @llvm.vector.splice.nxv8i1(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b, i32 -1)
173 ret <vscale x 8 x i1> %res
176 define <vscale x 8 x i1> @splice_nxv8i1_offset_max(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b) #0 {
177 ; CHECK-LABEL: splice_nxv8i1_offset_max:
179 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
180 ; CHECK-NEXT: vmv1r.v v9, v0
181 ; CHECK-NEXT: vmv1r.v v0, v8
182 ; CHECK-NEXT: vmv.v.i v8, 0
183 ; CHECK-NEXT: csrr a0, vlenb
184 ; CHECK-NEXT: vmerge.vim v10, v8, 1, v0
185 ; CHECK-NEXT: vmv1r.v v0, v9
186 ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
187 ; CHECK-NEXT: addi a0, a0, -15
188 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
189 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
190 ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
191 ; CHECK-NEXT: vslideup.vx v8, v10, a0
192 ; CHECK-NEXT: vand.vi v8, v8, 1
193 ; CHECK-NEXT: vmsne.vi v0, v8, 0
195 %res = call <vscale x 8 x i1> @llvm.vector.splice.nxv8i1(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b, i32 15)
196 ret <vscale x 8 x i1> %res
199 declare <vscale x 16 x i1> @llvm.vector.splice.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, i32)
201 define <vscale x 16 x i1> @splice_nxv16i1_offset_negone(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b) #0 {
202 ; CHECK-LABEL: splice_nxv16i1_offset_negone:
204 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
205 ; CHECK-NEXT: vmv1r.v v9, v0
206 ; CHECK-NEXT: vmv1r.v v0, v8
207 ; CHECK-NEXT: vmv.v.i v10, 0
208 ; CHECK-NEXT: csrr a0, vlenb
209 ; CHECK-NEXT: vmerge.vim v12, v10, 1, v0
210 ; CHECK-NEXT: vmv1r.v v0, v9
211 ; CHECK-NEXT: vmerge.vim v8, v10, 1, v0
212 ; CHECK-NEXT: slli a0, a0, 1
213 ; CHECK-NEXT: addi a0, a0, -1
214 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
215 ; CHECK-NEXT: vslideup.vi v8, v12, 1
216 ; CHECK-NEXT: vand.vi v8, v8, 1
217 ; CHECK-NEXT: vmsne.vi v0, v8, 0
219 %res = call <vscale x 16 x i1> @llvm.vector.splice.nxv16i1(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b, i32 -1)
220 ret <vscale x 16 x i1> %res
223 define <vscale x 16 x i1> @splice_nxv16i1_offset_max(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b) #0 {
224 ; CHECK-LABEL: splice_nxv16i1_offset_max:
226 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
227 ; CHECK-NEXT: vmv1r.v v9, v0
228 ; CHECK-NEXT: vmv1r.v v0, v8
229 ; CHECK-NEXT: vmv.v.i v10, 0
230 ; CHECK-NEXT: csrr a0, vlenb
231 ; CHECK-NEXT: vmerge.vim v12, v10, 1, v0
232 ; CHECK-NEXT: vmv1r.v v0, v9
233 ; CHECK-NEXT: vmerge.vim v8, v10, 1, v0
234 ; CHECK-NEXT: slli a0, a0, 1
235 ; CHECK-NEXT: addi a0, a0, -31
236 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
237 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
238 ; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma
239 ; CHECK-NEXT: vslideup.vx v8, v12, a0
240 ; CHECK-NEXT: vand.vi v8, v8, 1
241 ; CHECK-NEXT: vmsne.vi v0, v8, 0
243 %res = call <vscale x 16 x i1> @llvm.vector.splice.nxv16i1(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b, i32 31)
244 ret <vscale x 16 x i1> %res
247 declare <vscale x 32 x i1> @llvm.vector.splice.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, i32)
249 define <vscale x 32 x i1> @splice_nxv32i1_offset_negone(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b) #0 {
250 ; CHECK-LABEL: splice_nxv32i1_offset_negone:
252 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
253 ; CHECK-NEXT: vmv1r.v v9, v0
254 ; CHECK-NEXT: vmv1r.v v0, v8
255 ; CHECK-NEXT: vmv.v.i v12, 0
256 ; CHECK-NEXT: csrr a0, vlenb
257 ; CHECK-NEXT: vmerge.vim v16, v12, 1, v0
258 ; CHECK-NEXT: vmv1r.v v0, v9
259 ; CHECK-NEXT: vmerge.vim v8, v12, 1, v0
260 ; CHECK-NEXT: slli a0, a0, 2
261 ; CHECK-NEXT: addi a0, a0, -1
262 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
263 ; CHECK-NEXT: vslideup.vi v8, v16, 1
264 ; CHECK-NEXT: vand.vi v8, v8, 1
265 ; CHECK-NEXT: vmsne.vi v0, v8, 0
267 %res = call <vscale x 32 x i1> @llvm.vector.splice.nxv32i1(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b, i32 -1)
268 ret <vscale x 32 x i1> %res
271 define <vscale x 32 x i1> @splice_nxv32i1_offset_max(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b) #0 {
272 ; CHECK-LABEL: splice_nxv32i1_offset_max:
274 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
275 ; CHECK-NEXT: vmv.v.i v12, 0
276 ; CHECK-NEXT: csrr a0, vlenb
277 ; CHECK-NEXT: li a1, 63
278 ; CHECK-NEXT: vmerge.vim v16, v12, 1, v0
279 ; CHECK-NEXT: slli a0, a0, 2
280 ; CHECK-NEXT: addi a0, a0, -63
281 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
282 ; CHECK-NEXT: vslidedown.vx v16, v16, a1
283 ; CHECK-NEXT: vmv1r.v v0, v8
284 ; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma
285 ; CHECK-NEXT: vmerge.vim v8, v12, 1, v0
286 ; CHECK-NEXT: vslideup.vx v16, v8, a0
287 ; CHECK-NEXT: vand.vi v8, v16, 1
288 ; CHECK-NEXT: vmsne.vi v0, v8, 0
290 %res = call <vscale x 32 x i1> @llvm.vector.splice.nxv32i1(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b, i32 63)
291 ret <vscale x 32 x i1> %res
294 declare <vscale x 64 x i1> @llvm.vector.splice.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, i32)
296 define <vscale x 64 x i1> @splice_nxv64i1_offset_negone(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b) #0 {
297 ; CHECK-LABEL: splice_nxv64i1_offset_negone:
299 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
300 ; CHECK-NEXT: vmv1r.v v9, v0
301 ; CHECK-NEXT: vmv1r.v v0, v8
302 ; CHECK-NEXT: vmv.v.i v24, 0
303 ; CHECK-NEXT: csrr a0, vlenb
304 ; CHECK-NEXT: vmerge.vim v16, v24, 1, v0
305 ; CHECK-NEXT: vmv1r.v v0, v9
306 ; CHECK-NEXT: vmerge.vim v8, v24, 1, v0
307 ; CHECK-NEXT: slli a0, a0, 3
308 ; CHECK-NEXT: addi a0, a0, -1
309 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
310 ; CHECK-NEXT: vslideup.vi v8, v16, 1
311 ; CHECK-NEXT: vand.vi v8, v8, 1
312 ; CHECK-NEXT: vmsne.vi v0, v8, 0
314 %res = call <vscale x 64 x i1> @llvm.vector.splice.nxv64i1(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b, i32 -1)
315 ret <vscale x 64 x i1> %res
318 define <vscale x 64 x i1> @splice_nxv64i1_offset_max(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b) #0 {
319 ; CHECK-LABEL: splice_nxv64i1_offset_max:
321 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
322 ; CHECK-NEXT: vmv.v.i v16, 0
323 ; CHECK-NEXT: csrr a0, vlenb
324 ; CHECK-NEXT: li a1, 127
325 ; CHECK-NEXT: vmerge.vim v24, v16, 1, v0
326 ; CHECK-NEXT: slli a0, a0, 3
327 ; CHECK-NEXT: addi a0, a0, -127
328 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
329 ; CHECK-NEXT: vslidedown.vx v24, v24, a1
330 ; CHECK-NEXT: vmv1r.v v0, v8
331 ; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma
332 ; CHECK-NEXT: vmerge.vim v8, v16, 1, v0
333 ; CHECK-NEXT: vslideup.vx v24, v8, a0
334 ; CHECK-NEXT: vand.vi v8, v24, 1
335 ; CHECK-NEXT: vmsne.vi v0, v8, 0
337 %res = call <vscale x 64 x i1> @llvm.vector.splice.nxv64i1(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b, i32 127)
338 ret <vscale x 64 x i1> %res
341 declare <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, i32)
343 define <vscale x 1 x i8> @splice_nxv1i8_offset_zero(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {
344 ; CHECK-LABEL: splice_nxv1i8_offset_zero:
347 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 0)
348 ret <vscale x 1 x i8> %res
351 define <vscale x 1 x i8> @splice_nxv1i8_offset_negone(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {
352 ; CHECK-LABEL: splice_nxv1i8_offset_negone:
354 ; CHECK-NEXT: csrr a0, vlenb
355 ; CHECK-NEXT: srli a0, a0, 3
356 ; CHECK-NEXT: addi a0, a0, -1
357 ; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
358 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
359 ; CHECK-NEXT: vslideup.vi v8, v9, 1
361 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 -1)
362 ret <vscale x 1 x i8> %res
365 define <vscale x 1 x i8> @splice_nxv1i8_offset_min(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {
366 ; CHECK-LABEL: splice_nxv1i8_offset_min:
368 ; CHECK-NEXT: csrr a0, vlenb
369 ; CHECK-NEXT: srli a0, a0, 3
370 ; CHECK-NEXT: addi a0, a0, -2
371 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
372 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
373 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
374 ; CHECK-NEXT: vslideup.vi v8, v9, 2
376 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 -2)
377 ret <vscale x 1 x i8> %res
380 define <vscale x 1 x i8> @splice_nxv1i8_offset_max(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {
381 ; CHECK-LABEL: splice_nxv1i8_offset_max:
383 ; CHECK-NEXT: csrr a0, vlenb
384 ; CHECK-NEXT: srli a0, a0, 3
385 ; CHECK-NEXT: addi a0, a0, -1
386 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
387 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
388 ; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
389 ; CHECK-NEXT: vslideup.vx v8, v9, a0
391 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 1)
392 ret <vscale x 1 x i8> %res
395 declare <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, i32)
397 define <vscale x 2 x i8> @splice_nxv2i8_offset_zero(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {
398 ; CHECK-LABEL: splice_nxv2i8_offset_zero:
401 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 0)
402 ret <vscale x 2 x i8> %res
405 define <vscale x 2 x i8> @splice_nxv2i8_offset_negone(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {
406 ; CHECK-LABEL: splice_nxv2i8_offset_negone:
408 ; CHECK-NEXT: csrr a0, vlenb
409 ; CHECK-NEXT: srli a0, a0, 2
410 ; CHECK-NEXT: addi a0, a0, -1
411 ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
412 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
413 ; CHECK-NEXT: vslideup.vi v8, v9, 1
415 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 -1)
416 ret <vscale x 2 x i8> %res
419 define <vscale x 2 x i8> @splice_nxv2i8_offset_min(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {
420 ; CHECK-LABEL: splice_nxv2i8_offset_min:
422 ; CHECK-NEXT: csrr a0, vlenb
423 ; CHECK-NEXT: srli a0, a0, 2
424 ; CHECK-NEXT: addi a0, a0, -4
425 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
426 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
427 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
428 ; CHECK-NEXT: vslideup.vi v8, v9, 4
430 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 -4)
431 ret <vscale x 2 x i8> %res
434 define <vscale x 2 x i8> @splice_nxv2i8_offset_max(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {
435 ; CHECK-LABEL: splice_nxv2i8_offset_max:
437 ; CHECK-NEXT: csrr a0, vlenb
438 ; CHECK-NEXT: srli a0, a0, 2
439 ; CHECK-NEXT: addi a0, a0, -3
440 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
441 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
442 ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
443 ; CHECK-NEXT: vslideup.vx v8, v9, a0
445 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 3)
446 ret <vscale x 2 x i8> %res
449 declare <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, i32)
451 define <vscale x 4 x i8> @splice_nxv4i8_offset_zero(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {
452 ; CHECK-LABEL: splice_nxv4i8_offset_zero:
455 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 0)
456 ret <vscale x 4 x i8> %res
459 define <vscale x 4 x i8> @splice_nxv4i8_offset_negone(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {
460 ; CHECK-LABEL: splice_nxv4i8_offset_negone:
462 ; CHECK-NEXT: csrr a0, vlenb
463 ; CHECK-NEXT: srli a0, a0, 1
464 ; CHECK-NEXT: addi a0, a0, -1
465 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
466 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
467 ; CHECK-NEXT: vslideup.vi v8, v9, 1
469 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 -1)
470 ret <vscale x 4 x i8> %res
473 define <vscale x 4 x i8> @splice_nxv4i8_offset_min(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {
474 ; CHECK-LABEL: splice_nxv4i8_offset_min:
476 ; CHECK-NEXT: csrr a0, vlenb
477 ; CHECK-NEXT: srli a0, a0, 1
478 ; CHECK-NEXT: addi a0, a0, -8
479 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
480 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
481 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
482 ; CHECK-NEXT: vslideup.vi v8, v9, 8
484 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 -8)
485 ret <vscale x 4 x i8> %res
488 define <vscale x 4 x i8> @splice_nxv4i8_offset_max(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {
489 ; CHECK-LABEL: splice_nxv4i8_offset_max:
491 ; CHECK-NEXT: csrr a0, vlenb
492 ; CHECK-NEXT: srli a0, a0, 1
493 ; CHECK-NEXT: addi a0, a0, -7
494 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
495 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
496 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
497 ; CHECK-NEXT: vslideup.vx v8, v9, a0
499 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 7)
500 ret <vscale x 4 x i8> %res
503 declare <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, i32)
505 define <vscale x 8 x i8> @splice_nxv8i8_offset_zero(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {
506 ; CHECK-LABEL: splice_nxv8i8_offset_zero:
509 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 0)
510 ret <vscale x 8 x i8> %res
513 define <vscale x 8 x i8> @splice_nxv8i8_offset_negone(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {
514 ; CHECK-LABEL: splice_nxv8i8_offset_negone:
516 ; CHECK-NEXT: csrr a0, vlenb
517 ; CHECK-NEXT: addi a0, a0, -1
518 ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
519 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
520 ; CHECK-NEXT: vslideup.vi v8, v9, 1
522 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 -1)
523 ret <vscale x 8 x i8> %res
526 define <vscale x 8 x i8> @splice_nxv8i8_offset_min(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {
527 ; CHECK-LABEL: splice_nxv8i8_offset_min:
529 ; CHECK-NEXT: csrr a0, vlenb
530 ; CHECK-NEXT: addi a0, a0, -16
531 ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
532 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
533 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
534 ; CHECK-NEXT: vslideup.vi v8, v9, 16
536 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 -16)
537 ret <vscale x 8 x i8> %res
540 define <vscale x 8 x i8> @splice_nxv8i8_offset_max(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {
541 ; CHECK-LABEL: splice_nxv8i8_offset_max:
543 ; CHECK-NEXT: csrr a0, vlenb
544 ; CHECK-NEXT: addi a0, a0, -15
545 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
546 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
547 ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
548 ; CHECK-NEXT: vslideup.vx v8, v9, a0
550 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 15)
551 ret <vscale x 8 x i8> %res
554 declare <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, i32)
556 define <vscale x 16 x i8> @splice_nxv16i8_offset_zero(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {
557 ; CHECK-LABEL: splice_nxv16i8_offset_zero:
560 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 0)
561 ret <vscale x 16 x i8> %res
564 define <vscale x 16 x i8> @splice_nxv16i8_offset_negone(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {
565 ; CHECK-LABEL: splice_nxv16i8_offset_negone:
567 ; CHECK-NEXT: csrr a0, vlenb
568 ; CHECK-NEXT: slli a0, a0, 1
569 ; CHECK-NEXT: addi a0, a0, -1
570 ; CHECK-NEXT: vsetivli zero, 1, e8, m2, ta, ma
571 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
572 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
573 ; CHECK-NEXT: vslideup.vi v8, v10, 1
575 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 -1)
576 ret <vscale x 16 x i8> %res
579 define <vscale x 16 x i8> @splice_nxv16i8_offset_min(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {
580 ; CHECK-LABEL: splice_nxv16i8_offset_min:
582 ; CHECK-NEXT: csrr a0, vlenb
583 ; CHECK-NEXT: slli a0, a0, 1
584 ; CHECK-NEXT: addi a0, a0, -32
585 ; CHECK-NEXT: li a1, 32
586 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
587 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
588 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
589 ; CHECK-NEXT: vslideup.vx v8, v10, a1
591 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 -32)
592 ret <vscale x 16 x i8> %res
595 define <vscale x 16 x i8> @splice_nxv16i8_offset_max(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {
596 ; CHECK-LABEL: splice_nxv16i8_offset_max:
598 ; CHECK-NEXT: csrr a0, vlenb
599 ; CHECK-NEXT: slli a0, a0, 1
600 ; CHECK-NEXT: addi a0, a0, -31
601 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
602 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
603 ; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma
604 ; CHECK-NEXT: vslideup.vx v8, v10, a0
606 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 31)
607 ret <vscale x 16 x i8> %res
610 declare <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, i32)
612 define <vscale x 32 x i8> @splice_nxv32i8_offset_zero(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {
613 ; CHECK-LABEL: splice_nxv32i8_offset_zero:
616 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 0)
617 ret <vscale x 32 x i8> %res
620 define <vscale x 32 x i8> @splice_nxv32i8_offset_negone(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {
621 ; CHECK-LABEL: splice_nxv32i8_offset_negone:
623 ; CHECK-NEXT: csrr a0, vlenb
624 ; CHECK-NEXT: slli a0, a0, 2
625 ; CHECK-NEXT: addi a0, a0, -1
626 ; CHECK-NEXT: vsetivli zero, 1, e8, m4, ta, ma
627 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
628 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
629 ; CHECK-NEXT: vslideup.vi v8, v12, 1
631 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 -1)
632 ret <vscale x 32 x i8> %res
635 define <vscale x 32 x i8> @splice_nxv32i8_offset_min(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {
636 ; CHECK-LABEL: splice_nxv32i8_offset_min:
638 ; CHECK-NEXT: csrr a0, vlenb
639 ; CHECK-NEXT: slli a0, a0, 2
640 ; CHECK-NEXT: addi a0, a0, -64
641 ; CHECK-NEXT: li a1, 64
642 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
643 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
644 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
645 ; CHECK-NEXT: vslideup.vx v8, v12, a1
647 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 -64)
648 ret <vscale x 32 x i8> %res
651 define <vscale x 32 x i8> @splice_nxv32i8_offset_max(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {
652 ; CHECK-LABEL: splice_nxv32i8_offset_max:
654 ; CHECK-NEXT: csrr a0, vlenb
655 ; CHECK-NEXT: slli a0, a0, 2
656 ; CHECK-NEXT: addi a0, a0, -63
657 ; CHECK-NEXT: li a1, 63
658 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
659 ; CHECK-NEXT: vslidedown.vx v8, v8, a1
660 ; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma
661 ; CHECK-NEXT: vslideup.vx v8, v12, a0
663 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 63)
664 ret <vscale x 32 x i8> %res
667 declare <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, i32)
669 define <vscale x 64 x i8> @splice_nxv64i8_offset_zero(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {
670 ; CHECK-LABEL: splice_nxv64i8_offset_zero:
673 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 0)
674 ret <vscale x 64 x i8> %res
677 define <vscale x 64 x i8> @splice_nxv64i8_offset_negone(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {
678 ; CHECK-LABEL: splice_nxv64i8_offset_negone:
680 ; CHECK-NEXT: csrr a0, vlenb
681 ; CHECK-NEXT: slli a0, a0, 3
682 ; CHECK-NEXT: addi a0, a0, -1
683 ; CHECK-NEXT: vsetivli zero, 1, e8, m8, ta, ma
684 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
685 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
686 ; CHECK-NEXT: vslideup.vi v8, v16, 1
688 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 -1)
689 ret <vscale x 64 x i8> %res
692 define <vscale x 64 x i8> @splice_nxv64i8_offset_min(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {
693 ; CHECK-LABEL: splice_nxv64i8_offset_min:
695 ; CHECK-NEXT: csrr a0, vlenb
696 ; CHECK-NEXT: slli a0, a0, 3
697 ; CHECK-NEXT: addi a0, a0, -128
698 ; CHECK-NEXT: li a1, 128
699 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
700 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
701 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
702 ; CHECK-NEXT: vslideup.vx v8, v16, a1
704 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 -128)
705 ret <vscale x 64 x i8> %res
708 define <vscale x 64 x i8> @splice_nxv64i8_offset_max(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {
709 ; CHECK-LABEL: splice_nxv64i8_offset_max:
711 ; CHECK-NEXT: csrr a0, vlenb
712 ; CHECK-NEXT: slli a0, a0, 3
713 ; CHECK-NEXT: addi a0, a0, -127
714 ; CHECK-NEXT: li a1, 127
715 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
716 ; CHECK-NEXT: vslidedown.vx v8, v8, a1
717 ; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma
718 ; CHECK-NEXT: vslideup.vx v8, v16, a0
720 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 127)
721 ret <vscale x 64 x i8> %res
724 declare <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, i32)
726 define <vscale x 1 x i16> @splice_nxv1i16_offset_zero(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {
727 ; CHECK-LABEL: splice_nxv1i16_offset_zero:
730 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 0)
731 ret <vscale x 1 x i16> %res
734 define <vscale x 1 x i16> @splice_nxv1i16_offset_negone(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {
735 ; CHECK-LABEL: splice_nxv1i16_offset_negone:
737 ; CHECK-NEXT: csrr a0, vlenb
738 ; CHECK-NEXT: srli a0, a0, 3
739 ; CHECK-NEXT: addi a0, a0, -1
740 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
741 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
742 ; CHECK-NEXT: vslideup.vi v8, v9, 1
744 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 -1)
745 ret <vscale x 1 x i16> %res
748 define <vscale x 1 x i16> @splice_nxv1i16_offset_min(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {
749 ; CHECK-LABEL: splice_nxv1i16_offset_min:
751 ; CHECK-NEXT: csrr a0, vlenb
752 ; CHECK-NEXT: srli a0, a0, 3
753 ; CHECK-NEXT: addi a0, a0, -2
754 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
755 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
756 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
757 ; CHECK-NEXT: vslideup.vi v8, v9, 2
759 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 -2)
760 ret <vscale x 1 x i16> %res
763 define <vscale x 1 x i16> @splice_nxv1i16_offset_max(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {
764 ; CHECK-LABEL: splice_nxv1i16_offset_max:
766 ; CHECK-NEXT: csrr a0, vlenb
767 ; CHECK-NEXT: srli a0, a0, 3
768 ; CHECK-NEXT: addi a0, a0, -1
769 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
770 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
771 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
772 ; CHECK-NEXT: vslideup.vx v8, v9, a0
774 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 1)
775 ret <vscale x 1 x i16> %res
778 declare <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, i32)
780 define <vscale x 2 x i16> @splice_nxv2i16_offset_zero(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {
781 ; CHECK-LABEL: splice_nxv2i16_offset_zero:
784 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 0)
785 ret <vscale x 2 x i16> %res
788 define <vscale x 2 x i16> @splice_nxv2i16_offset_negone(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {
789 ; CHECK-LABEL: splice_nxv2i16_offset_negone:
791 ; CHECK-NEXT: csrr a0, vlenb
792 ; CHECK-NEXT: srli a0, a0, 2
793 ; CHECK-NEXT: addi a0, a0, -1
794 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
795 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
796 ; CHECK-NEXT: vslideup.vi v8, v9, 1
798 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 -1)
799 ret <vscale x 2 x i16> %res
802 define <vscale x 2 x i16> @splice_nxv2i16_offset_min(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {
803 ; CHECK-LABEL: splice_nxv2i16_offset_min:
805 ; CHECK-NEXT: csrr a0, vlenb
806 ; CHECK-NEXT: srli a0, a0, 2
807 ; CHECK-NEXT: addi a0, a0, -4
808 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
809 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
810 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
811 ; CHECK-NEXT: vslideup.vi v8, v9, 4
813 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 -4)
814 ret <vscale x 2 x i16> %res
817 define <vscale x 2 x i16> @splice_nxv2i16_offset_max(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {
818 ; CHECK-LABEL: splice_nxv2i16_offset_max:
820 ; CHECK-NEXT: csrr a0, vlenb
821 ; CHECK-NEXT: srli a0, a0, 2
822 ; CHECK-NEXT: addi a0, a0, -3
823 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
824 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
825 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
826 ; CHECK-NEXT: vslideup.vx v8, v9, a0
828 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 3)
829 ret <vscale x 2 x i16> %res
832 declare <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, i32)
834 define <vscale x 4 x i16> @splice_nxv4i16_offset_zero(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {
835 ; CHECK-LABEL: splice_nxv4i16_offset_zero:
838 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 0)
839 ret <vscale x 4 x i16> %res
842 define <vscale x 4 x i16> @splice_nxv4i16_offset_negone(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {
843 ; CHECK-LABEL: splice_nxv4i16_offset_negone:
845 ; CHECK-NEXT: csrr a0, vlenb
846 ; CHECK-NEXT: srli a0, a0, 1
847 ; CHECK-NEXT: addi a0, a0, -1
848 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
849 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
850 ; CHECK-NEXT: vslideup.vi v8, v9, 1
852 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 -1)
853 ret <vscale x 4 x i16> %res
856 define <vscale x 4 x i16> @splice_nxv4i16_offset_min(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {
857 ; CHECK-LABEL: splice_nxv4i16_offset_min:
859 ; CHECK-NEXT: csrr a0, vlenb
860 ; CHECK-NEXT: srli a0, a0, 1
861 ; CHECK-NEXT: addi a0, a0, -8
862 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
863 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
864 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
865 ; CHECK-NEXT: vslideup.vi v8, v9, 8
867 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 -8)
868 ret <vscale x 4 x i16> %res
871 define <vscale x 4 x i16> @splice_nxv4i16_offset_max(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {
872 ; CHECK-LABEL: splice_nxv4i16_offset_max:
874 ; CHECK-NEXT: csrr a0, vlenb
875 ; CHECK-NEXT: srli a0, a0, 1
876 ; CHECK-NEXT: addi a0, a0, -7
877 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
878 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
879 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
880 ; CHECK-NEXT: vslideup.vx v8, v9, a0
882 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 7)
883 ret <vscale x 4 x i16> %res
886 declare <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, i32)
888 define <vscale x 8 x i16> @splice_nxv8i16_offset_zero(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {
889 ; CHECK-LABEL: splice_nxv8i16_offset_zero:
892 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 0)
893 ret <vscale x 8 x i16> %res
896 define <vscale x 8 x i16> @splice_nxv8i16_offset_negone(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {
897 ; CHECK-LABEL: splice_nxv8i16_offset_negone:
899 ; CHECK-NEXT: csrr a0, vlenb
900 ; CHECK-NEXT: addi a0, a0, -1
901 ; CHECK-NEXT: vsetivli zero, 1, e16, m2, ta, ma
902 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
903 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
904 ; CHECK-NEXT: vslideup.vi v8, v10, 1
906 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 -1)
907 ret <vscale x 8 x i16> %res
910 define <vscale x 8 x i16> @splice_nxv8i16_offset_min(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {
911 ; CHECK-LABEL: splice_nxv8i16_offset_min:
913 ; CHECK-NEXT: csrr a0, vlenb
914 ; CHECK-NEXT: addi a0, a0, -16
915 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
916 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
917 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
918 ; CHECK-NEXT: vslideup.vi v8, v10, 16
920 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 -16)
921 ret <vscale x 8 x i16> %res
924 define <vscale x 8 x i16> @splice_nxv8i16_offset_max(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {
925 ; CHECK-LABEL: splice_nxv8i16_offset_max:
927 ; CHECK-NEXT: csrr a0, vlenb
928 ; CHECK-NEXT: addi a0, a0, -15
929 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
930 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
931 ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
932 ; CHECK-NEXT: vslideup.vx v8, v10, a0
934 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 15)
935 ret <vscale x 8 x i16> %res
938 declare <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, i32)
940 define <vscale x 16 x i16> @splice_nxv16i16_offset_zero(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {
941 ; CHECK-LABEL: splice_nxv16i16_offset_zero:
944 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 0)
945 ret <vscale x 16 x i16> %res
948 define <vscale x 16 x i16> @splice_nxv16i16_offset_negone(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {
949 ; CHECK-LABEL: splice_nxv16i16_offset_negone:
951 ; CHECK-NEXT: csrr a0, vlenb
952 ; CHECK-NEXT: slli a0, a0, 1
953 ; CHECK-NEXT: addi a0, a0, -1
954 ; CHECK-NEXT: vsetivli zero, 1, e16, m4, ta, ma
955 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
956 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
957 ; CHECK-NEXT: vslideup.vi v8, v12, 1
959 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 -1)
960 ret <vscale x 16 x i16> %res
963 define <vscale x 16 x i16> @splice_nxv16i16_offset_min(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {
964 ; CHECK-LABEL: splice_nxv16i16_offset_min:
966 ; CHECK-NEXT: csrr a0, vlenb
967 ; CHECK-NEXT: slli a0, a0, 1
968 ; CHECK-NEXT: addi a0, a0, -32
969 ; CHECK-NEXT: li a1, 32
970 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
971 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
972 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
973 ; CHECK-NEXT: vslideup.vx v8, v12, a1
975 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 -32)
976 ret <vscale x 16 x i16> %res
979 define <vscale x 16 x i16> @splice_nxv16i16_offset_max(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {
980 ; CHECK-LABEL: splice_nxv16i16_offset_max:
982 ; CHECK-NEXT: csrr a0, vlenb
983 ; CHECK-NEXT: slli a0, a0, 1
984 ; CHECK-NEXT: addi a0, a0, -31
985 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
986 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
987 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
988 ; CHECK-NEXT: vslideup.vx v8, v12, a0
990 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 31)
991 ret <vscale x 16 x i16> %res
994 declare <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, i32)
996 define <vscale x 32 x i16> @splice_nxv32i16_offset_zero(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {
997 ; CHECK-LABEL: splice_nxv32i16_offset_zero:
1000 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 0)
1001 ret <vscale x 32 x i16> %res
1004 define <vscale x 32 x i16> @splice_nxv32i16_offset_negone(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {
1005 ; CHECK-LABEL: splice_nxv32i16_offset_negone:
1007 ; CHECK-NEXT: csrr a0, vlenb
1008 ; CHECK-NEXT: slli a0, a0, 2
1009 ; CHECK-NEXT: addi a0, a0, -1
1010 ; CHECK-NEXT: vsetivli zero, 1, e16, m8, ta, ma
1011 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1012 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
1013 ; CHECK-NEXT: vslideup.vi v8, v16, 1
1015 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 -1)
1016 ret <vscale x 32 x i16> %res
1019 define <vscale x 32 x i16> @splice_nxv32i16_offset_min(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {
1020 ; CHECK-LABEL: splice_nxv32i16_offset_min:
1022 ; CHECK-NEXT: csrr a0, vlenb
1023 ; CHECK-NEXT: slli a0, a0, 2
1024 ; CHECK-NEXT: addi a0, a0, -64
1025 ; CHECK-NEXT: li a1, 64
1026 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
1027 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1028 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
1029 ; CHECK-NEXT: vslideup.vx v8, v16, a1
1031 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 -64)
1032 ret <vscale x 32 x i16> %res
1035 define <vscale x 32 x i16> @splice_nxv32i16_offset_max(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {
1036 ; CHECK-LABEL: splice_nxv32i16_offset_max:
1038 ; CHECK-NEXT: csrr a0, vlenb
1039 ; CHECK-NEXT: slli a0, a0, 2
1040 ; CHECK-NEXT: addi a0, a0, -63
1041 ; CHECK-NEXT: li a1, 63
1042 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
1043 ; CHECK-NEXT: vslidedown.vx v8, v8, a1
1044 ; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma
1045 ; CHECK-NEXT: vslideup.vx v8, v16, a0
1047 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 63)
1048 ret <vscale x 32 x i16> %res
1051 declare <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, i32)
1053 define <vscale x 1 x i32> @splice_nxv1i32_offset_zero(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {
1054 ; CHECK-LABEL: splice_nxv1i32_offset_zero:
1057 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 0)
1058 ret <vscale x 1 x i32> %res
1061 define <vscale x 1 x i32> @splice_nxv1i32_offset_negone(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {
1062 ; CHECK-LABEL: splice_nxv1i32_offset_negone:
1064 ; CHECK-NEXT: csrr a0, vlenb
1065 ; CHECK-NEXT: srli a0, a0, 3
1066 ; CHECK-NEXT: addi a0, a0, -1
1067 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
1068 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1069 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1071 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 -1)
1072 ret <vscale x 1 x i32> %res
1075 define <vscale x 1 x i32> @splice_nxv1i32_offset_min(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {
1076 ; CHECK-LABEL: splice_nxv1i32_offset_min:
1078 ; CHECK-NEXT: csrr a0, vlenb
1079 ; CHECK-NEXT: srli a0, a0, 3
1080 ; CHECK-NEXT: addi a0, a0, -2
1081 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
1082 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1083 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1084 ; CHECK-NEXT: vslideup.vi v8, v9, 2
1086 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 -2)
1087 ret <vscale x 1 x i32> %res
1090 define <vscale x 1 x i32> @splice_nxv1i32_offset_max(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {
1091 ; CHECK-LABEL: splice_nxv1i32_offset_max:
1093 ; CHECK-NEXT: csrr a0, vlenb
1094 ; CHECK-NEXT: srli a0, a0, 3
1095 ; CHECK-NEXT: addi a0, a0, -1
1096 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1097 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
1098 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
1099 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1101 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 1)
1102 ret <vscale x 1 x i32> %res
1105 declare <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, i32)
1107 define <vscale x 2 x i32> @splice_nxv2i32_offset_zero(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {
1108 ; CHECK-LABEL: splice_nxv2i32_offset_zero:
1111 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 0)
1112 ret <vscale x 2 x i32> %res
1115 define <vscale x 2 x i32> @splice_nxv2i32_offset_negone(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {
1116 ; CHECK-LABEL: splice_nxv2i32_offset_negone:
1118 ; CHECK-NEXT: csrr a0, vlenb
1119 ; CHECK-NEXT: srli a0, a0, 2
1120 ; CHECK-NEXT: addi a0, a0, -1
1121 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1122 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1123 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1125 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 -1)
1126 ret <vscale x 2 x i32> %res
1129 define <vscale x 2 x i32> @splice_nxv2i32_offset_min(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {
1130 ; CHECK-LABEL: splice_nxv2i32_offset_min:
1132 ; CHECK-NEXT: csrr a0, vlenb
1133 ; CHECK-NEXT: srli a0, a0, 2
1134 ; CHECK-NEXT: addi a0, a0, -4
1135 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1136 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1137 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1138 ; CHECK-NEXT: vslideup.vi v8, v9, 4
1140 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 -4)
1141 ret <vscale x 2 x i32> %res
1144 define <vscale x 2 x i32> @splice_nxv2i32_offset_max(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {
1145 ; CHECK-LABEL: splice_nxv2i32_offset_max:
1147 ; CHECK-NEXT: csrr a0, vlenb
1148 ; CHECK-NEXT: srli a0, a0, 2
1149 ; CHECK-NEXT: addi a0, a0, -3
1150 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1151 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
1152 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1153 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1155 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 3)
1156 ret <vscale x 2 x i32> %res
1159 declare <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, i32)
1161 define <vscale x 4 x i32> @splice_nxv4i32_offset_zero(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {
1162 ; CHECK-LABEL: splice_nxv4i32_offset_zero:
1165 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 0)
1166 ret <vscale x 4 x i32> %res
1169 define <vscale x 4 x i32> @splice_nxv4i32_offset_negone(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {
1170 ; CHECK-LABEL: splice_nxv4i32_offset_negone:
1172 ; CHECK-NEXT: csrr a0, vlenb
1173 ; CHECK-NEXT: srli a0, a0, 1
1174 ; CHECK-NEXT: addi a0, a0, -1
1175 ; CHECK-NEXT: vsetivli zero, 1, e32, m2, ta, ma
1176 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1177 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
1178 ; CHECK-NEXT: vslideup.vi v8, v10, 1
1180 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 -1)
1181 ret <vscale x 4 x i32> %res
1184 define <vscale x 4 x i32> @splice_nxv4i32_offset_min(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {
1185 ; CHECK-LABEL: splice_nxv4i32_offset_min:
1187 ; CHECK-NEXT: csrr a0, vlenb
1188 ; CHECK-NEXT: srli a0, a0, 1
1189 ; CHECK-NEXT: addi a0, a0, -8
1190 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1191 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1192 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
1193 ; CHECK-NEXT: vslideup.vi v8, v10, 8
1195 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 -8)
1196 ret <vscale x 4 x i32> %res
1199 define <vscale x 4 x i32> @splice_nxv4i32_offset_max(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {
1200 ; CHECK-LABEL: splice_nxv4i32_offset_max:
1202 ; CHECK-NEXT: csrr a0, vlenb
1203 ; CHECK-NEXT: srli a0, a0, 1
1204 ; CHECK-NEXT: addi a0, a0, -7
1205 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1206 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
1207 ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1208 ; CHECK-NEXT: vslideup.vx v8, v10, a0
1210 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 7)
1211 ret <vscale x 4 x i32> %res
1214 declare <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, i32)
1216 define <vscale x 8 x i32> @splice_nxv8i32_offset_zero(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {
1217 ; CHECK-LABEL: splice_nxv8i32_offset_zero:
1220 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 0)
1221 ret <vscale x 8 x i32> %res
1224 define <vscale x 8 x i32> @splice_nxv8i32_offset_negone(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {
1225 ; CHECK-LABEL: splice_nxv8i32_offset_negone:
1227 ; CHECK-NEXT: csrr a0, vlenb
1228 ; CHECK-NEXT: addi a0, a0, -1
1229 ; CHECK-NEXT: vsetivli zero, 1, e32, m4, ta, ma
1230 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1231 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1232 ; CHECK-NEXT: vslideup.vi v8, v12, 1
1234 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 -1)
1235 ret <vscale x 8 x i32> %res
1238 define <vscale x 8 x i32> @splice_nxv8i32_offset_min(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {
1239 ; CHECK-LABEL: splice_nxv8i32_offset_min:
1241 ; CHECK-NEXT: csrr a0, vlenb
1242 ; CHECK-NEXT: addi a0, a0, -16
1243 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1244 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1245 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1246 ; CHECK-NEXT: vslideup.vi v8, v12, 16
1248 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 -16)
1249 ret <vscale x 8 x i32> %res
1252 define <vscale x 8 x i32> @splice_nxv8i32_offset_max(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {
1253 ; CHECK-LABEL: splice_nxv8i32_offset_max:
1255 ; CHECK-NEXT: csrr a0, vlenb
1256 ; CHECK-NEXT: addi a0, a0, -15
1257 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1258 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
1259 ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
1260 ; CHECK-NEXT: vslideup.vx v8, v12, a0
1262 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 15)
1263 ret <vscale x 8 x i32> %res
1266 declare <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, i32)
1268 define <vscale x 16 x i32> @splice_nxv16i32_offset_zero(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {
1269 ; CHECK-LABEL: splice_nxv16i32_offset_zero:
1272 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 0)
1273 ret <vscale x 16 x i32> %res
1276 define <vscale x 16 x i32> @splice_nxv16i32_offset_negone(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {
1277 ; CHECK-LABEL: splice_nxv16i32_offset_negone:
1279 ; CHECK-NEXT: csrr a0, vlenb
1280 ; CHECK-NEXT: slli a0, a0, 1
1281 ; CHECK-NEXT: addi a0, a0, -1
1282 ; CHECK-NEXT: vsetivli zero, 1, e32, m8, ta, ma
1283 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1284 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
1285 ; CHECK-NEXT: vslideup.vi v8, v16, 1
1287 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 -1)
1288 ret <vscale x 16 x i32> %res
1291 define <vscale x 16 x i32> @splice_nxv16i32_offset_min(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {
1292 ; CHECK-LABEL: splice_nxv16i32_offset_min:
1294 ; CHECK-NEXT: csrr a0, vlenb
1295 ; CHECK-NEXT: slli a0, a0, 1
1296 ; CHECK-NEXT: addi a0, a0, -32
1297 ; CHECK-NEXT: li a1, 32
1298 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1299 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1300 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
1301 ; CHECK-NEXT: vslideup.vx v8, v16, a1
1303 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 -32)
1304 ret <vscale x 16 x i32> %res
1307 define <vscale x 16 x i32> @splice_nxv16i32_offset_max(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {
1308 ; CHECK-LABEL: splice_nxv16i32_offset_max:
1310 ; CHECK-NEXT: csrr a0, vlenb
1311 ; CHECK-NEXT: slli a0, a0, 1
1312 ; CHECK-NEXT: addi a0, a0, -31
1313 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1314 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
1315 ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma
1316 ; CHECK-NEXT: vslideup.vx v8, v16, a0
1318 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 31)
1319 ret <vscale x 16 x i32> %res
1322 declare <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, i32)
1324 define <vscale x 1 x i64> @splice_nxv1i64_offset_zero(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {
1325 ; CHECK-LABEL: splice_nxv1i64_offset_zero:
1328 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 0)
1329 ret <vscale x 1 x i64> %res
1332 define <vscale x 1 x i64> @splice_nxv1i64_offset_negone(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {
1333 ; CHECK-LABEL: splice_nxv1i64_offset_negone:
1335 ; CHECK-NEXT: csrr a0, vlenb
1336 ; CHECK-NEXT: srli a0, a0, 3
1337 ; CHECK-NEXT: addi a0, a0, -1
1338 ; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1339 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1340 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1342 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 -1)
1343 ret <vscale x 1 x i64> %res
1346 define <vscale x 1 x i64> @splice_nxv1i64_offset_min(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {
1347 ; CHECK-LABEL: splice_nxv1i64_offset_min:
1349 ; CHECK-NEXT: csrr a0, vlenb
1350 ; CHECK-NEXT: srli a0, a0, 3
1351 ; CHECK-NEXT: addi a0, a0, -2
1352 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
1353 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1354 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
1355 ; CHECK-NEXT: vslideup.vi v8, v9, 2
1357 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 -2)
1358 ret <vscale x 1 x i64> %res
1361 define <vscale x 1 x i64> @splice_nxv1i64_offset_max(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {
1362 ; CHECK-LABEL: splice_nxv1i64_offset_max:
1364 ; CHECK-NEXT: csrr a0, vlenb
1365 ; CHECK-NEXT: srli a0, a0, 3
1366 ; CHECK-NEXT: addi a0, a0, -1
1367 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1368 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
1369 ; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1370 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1372 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 1)
1373 ret <vscale x 1 x i64> %res
1376 declare <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32)
1378 define <vscale x 2 x i64> @splice_nxv2i64_offset_zero(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {
1379 ; CHECK-LABEL: splice_nxv2i64_offset_zero:
1382 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 0)
1383 ret <vscale x 2 x i64> %res
1386 define <vscale x 2 x i64> @splice_nxv2i64_offset_negone(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {
1387 ; CHECK-LABEL: splice_nxv2i64_offset_negone:
1389 ; CHECK-NEXT: csrr a0, vlenb
1390 ; CHECK-NEXT: srli a0, a0, 2
1391 ; CHECK-NEXT: addi a0, a0, -1
1392 ; CHECK-NEXT: vsetivli zero, 1, e64, m2, ta, ma
1393 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1394 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
1395 ; CHECK-NEXT: vslideup.vi v8, v10, 1
1397 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 -1)
1398 ret <vscale x 2 x i64> %res
1401 define <vscale x 2 x i64> @splice_nxv2i64_offset_min(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {
1402 ; CHECK-LABEL: splice_nxv2i64_offset_min:
1404 ; CHECK-NEXT: csrr a0, vlenb
1405 ; CHECK-NEXT: srli a0, a0, 2
1406 ; CHECK-NEXT: addi a0, a0, -4
1407 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
1408 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1409 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
1410 ; CHECK-NEXT: vslideup.vi v8, v10, 4
1412 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 -4)
1413 ret <vscale x 2 x i64> %res
1416 define <vscale x 2 x i64> @splice_nxv2i64_offset_max(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {
1417 ; CHECK-LABEL: splice_nxv2i64_offset_max:
1419 ; CHECK-NEXT: csrr a0, vlenb
1420 ; CHECK-NEXT: srli a0, a0, 2
1421 ; CHECK-NEXT: addi a0, a0, -3
1422 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1423 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
1424 ; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1425 ; CHECK-NEXT: vslideup.vx v8, v10, a0
1427 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 3)
1428 ret <vscale x 2 x i64> %res
1431 declare <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, i32)
1433 define <vscale x 4 x i64> @splice_nxv4i64_offset_zero(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {
1434 ; CHECK-LABEL: splice_nxv4i64_offset_zero:
1437 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 0)
1438 ret <vscale x 4 x i64> %res
1441 define <vscale x 4 x i64> @splice_nxv4i64_offset_negone(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {
1442 ; CHECK-LABEL: splice_nxv4i64_offset_negone:
1444 ; CHECK-NEXT: csrr a0, vlenb
1445 ; CHECK-NEXT: srli a0, a0, 1
1446 ; CHECK-NEXT: addi a0, a0, -1
1447 ; CHECK-NEXT: vsetivli zero, 1, e64, m4, ta, ma
1448 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1449 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
1450 ; CHECK-NEXT: vslideup.vi v8, v12, 1
1452 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 -1)
1453 ret <vscale x 4 x i64> %res
1456 define <vscale x 4 x i64> @splice_nxv4i64_offset_min(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {
1457 ; CHECK-LABEL: splice_nxv4i64_offset_min:
1459 ; CHECK-NEXT: csrr a0, vlenb
1460 ; CHECK-NEXT: srli a0, a0, 1
1461 ; CHECK-NEXT: addi a0, a0, -8
1462 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
1463 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1464 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
1465 ; CHECK-NEXT: vslideup.vi v8, v12, 8
1467 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 -8)
1468 ret <vscale x 4 x i64> %res
1471 define <vscale x 4 x i64> @splice_nxv4i64_offset_max(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {
1472 ; CHECK-LABEL: splice_nxv4i64_offset_max:
1474 ; CHECK-NEXT: csrr a0, vlenb
1475 ; CHECK-NEXT: srli a0, a0, 1
1476 ; CHECK-NEXT: addi a0, a0, -7
1477 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1478 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
1479 ; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1480 ; CHECK-NEXT: vslideup.vx v8, v12, a0
1482 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 7)
1483 ret <vscale x 4 x i64> %res
1486 declare <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, i32)
1488 define <vscale x 8 x i64> @splice_nxv8i64_offset_zero(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {
1489 ; CHECK-LABEL: splice_nxv8i64_offset_zero:
1492 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 0)
1493 ret <vscale x 8 x i64> %res
1496 define <vscale x 8 x i64> @splice_nxv8i64_offset_negone(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {
1497 ; CHECK-LABEL: splice_nxv8i64_offset_negone:
1499 ; CHECK-NEXT: csrr a0, vlenb
1500 ; CHECK-NEXT: addi a0, a0, -1
1501 ; CHECK-NEXT: vsetivli zero, 1, e64, m8, ta, ma
1502 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1503 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
1504 ; CHECK-NEXT: vslideup.vi v8, v16, 1
1506 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 -1)
1507 ret <vscale x 8 x i64> %res
1510 define <vscale x 8 x i64> @splice_nxv8i64_offset_min(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {
1511 ; CHECK-LABEL: splice_nxv8i64_offset_min:
1513 ; CHECK-NEXT: csrr a0, vlenb
1514 ; CHECK-NEXT: addi a0, a0, -16
1515 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1516 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1517 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
1518 ; CHECK-NEXT: vslideup.vi v8, v16, 16
1520 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 -16)
1521 ret <vscale x 8 x i64> %res
1524 define <vscale x 8 x i64> @splice_nxv8i64_offset_max(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {
1525 ; CHECK-LABEL: splice_nxv8i64_offset_max:
1527 ; CHECK-NEXT: csrr a0, vlenb
1528 ; CHECK-NEXT: addi a0, a0, -15
1529 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1530 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
1531 ; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1532 ; CHECK-NEXT: vslideup.vx v8, v16, a0
1534 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 15)
1535 ret <vscale x 8 x i64> %res
1538 declare <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat>, <vscale x 1 x bfloat>, i32)
1540 define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_zero(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {
1541 ; CHECK-LABEL: splice_nxv1bf16_offset_zero:
1544 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 0)
1545 ret <vscale x 1 x bfloat> %res
1548 define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_negone(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {
1549 ; CHECK-LABEL: splice_nxv1bf16_offset_negone:
1551 ; CHECK-NEXT: csrr a0, vlenb
1552 ; CHECK-NEXT: srli a0, a0, 3
1553 ; CHECK-NEXT: addi a0, a0, -1
1554 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1555 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1556 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1558 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 -1)
1559 ret <vscale x 1 x bfloat> %res
1562 define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_min(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {
1563 ; CHECK-LABEL: splice_nxv1bf16_offset_min:
1565 ; CHECK-NEXT: csrr a0, vlenb
1566 ; CHECK-NEXT: srli a0, a0, 3
1567 ; CHECK-NEXT: addi a0, a0, -2
1568 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1569 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1570 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1571 ; CHECK-NEXT: vslideup.vi v8, v9, 2
1573 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 -2)
1574 ret <vscale x 1 x bfloat> %res
1577 define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_max(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {
1578 ; CHECK-LABEL: splice_nxv1bf16_offset_max:
1580 ; CHECK-NEXT: csrr a0, vlenb
1581 ; CHECK-NEXT: srli a0, a0, 3
1582 ; CHECK-NEXT: addi a0, a0, -1
1583 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1584 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
1585 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1586 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1588 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 1)
1589 ret <vscale x 1 x bfloat> %res
1592 declare <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, i32)
1594 define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_zero(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {
1595 ; CHECK-LABEL: splice_nxv2bf16_offset_zero:
1598 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 0)
1599 ret <vscale x 2 x bfloat> %res
1602 define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_negone(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {
1603 ; CHECK-LABEL: splice_nxv2bf16_offset_negone:
1605 ; CHECK-NEXT: csrr a0, vlenb
1606 ; CHECK-NEXT: srli a0, a0, 2
1607 ; CHECK-NEXT: addi a0, a0, -1
1608 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
1609 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1610 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1612 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 -1)
1613 ret <vscale x 2 x bfloat> %res
1616 define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_min(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {
1617 ; CHECK-LABEL: splice_nxv2bf16_offset_min:
1619 ; CHECK-NEXT: csrr a0, vlenb
1620 ; CHECK-NEXT: srli a0, a0, 2
1621 ; CHECK-NEXT: addi a0, a0, -4
1622 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1623 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1624 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1625 ; CHECK-NEXT: vslideup.vi v8, v9, 4
1627 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 -4)
1628 ret <vscale x 2 x bfloat> %res
1631 define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_max(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {
1632 ; CHECK-LABEL: splice_nxv2bf16_offset_max:
1634 ; CHECK-NEXT: csrr a0, vlenb
1635 ; CHECK-NEXT: srli a0, a0, 2
1636 ; CHECK-NEXT: addi a0, a0, -3
1637 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1638 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
1639 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
1640 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1642 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 3)
1643 ret <vscale x 2 x bfloat> %res
1646 declare <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat>, <vscale x 4 x bfloat>, i32)
1648 define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_zero(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {
1649 ; CHECK-LABEL: splice_nxv4bf16_offset_zero:
1652 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 0)
1653 ret <vscale x 4 x bfloat> %res
1656 define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_negone(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {
1657 ; CHECK-LABEL: splice_nxv4bf16_offset_negone:
1659 ; CHECK-NEXT: csrr a0, vlenb
1660 ; CHECK-NEXT: srli a0, a0, 1
1661 ; CHECK-NEXT: addi a0, a0, -1
1662 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
1663 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1664 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1666 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 -1)
1667 ret <vscale x 4 x bfloat> %res
1670 define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_min(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {
1671 ; CHECK-LABEL: splice_nxv4bf16_offset_min:
1673 ; CHECK-NEXT: csrr a0, vlenb
1674 ; CHECK-NEXT: srli a0, a0, 1
1675 ; CHECK-NEXT: addi a0, a0, -8
1676 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
1677 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1678 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
1679 ; CHECK-NEXT: vslideup.vi v8, v9, 8
1681 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 -8)
1682 ret <vscale x 4 x bfloat> %res
1685 define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_max(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {
1686 ; CHECK-LABEL: splice_nxv4bf16_offset_max:
1688 ; CHECK-NEXT: csrr a0, vlenb
1689 ; CHECK-NEXT: srli a0, a0, 1
1690 ; CHECK-NEXT: addi a0, a0, -7
1691 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1692 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
1693 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
1694 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1696 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 7)
1697 ret <vscale x 4 x bfloat> %res
1700 declare <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, i32)
1702 define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_zero(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {
1703 ; CHECK-LABEL: splice_nxv8bf16_offset_zero:
1706 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 0)
1707 ret <vscale x 8 x bfloat> %res
1710 define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_negone(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {
1711 ; CHECK-LABEL: splice_nxv8bf16_offset_negone:
1713 ; CHECK-NEXT: csrr a0, vlenb
1714 ; CHECK-NEXT: addi a0, a0, -1
1715 ; CHECK-NEXT: vsetivli zero, 1, e16, m2, ta, ma
1716 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1717 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1718 ; CHECK-NEXT: vslideup.vi v8, v10, 1
1720 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 -1)
1721 ret <vscale x 8 x bfloat> %res
1724 define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_min(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {
1725 ; CHECK-LABEL: splice_nxv8bf16_offset_min:
1727 ; CHECK-NEXT: csrr a0, vlenb
1728 ; CHECK-NEXT: addi a0, a0, -16
1729 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
1730 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1731 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1732 ; CHECK-NEXT: vslideup.vi v8, v10, 16
1734 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 -16)
1735 ret <vscale x 8 x bfloat> %res
1738 define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_max(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {
1739 ; CHECK-LABEL: splice_nxv8bf16_offset_max:
1741 ; CHECK-NEXT: csrr a0, vlenb
1742 ; CHECK-NEXT: addi a0, a0, -15
1743 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
1744 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
1745 ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
1746 ; CHECK-NEXT: vslideup.vx v8, v10, a0
1748 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 15)
1749 ret <vscale x 8 x bfloat> %res
1752 declare <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat>, <vscale x 16 x bfloat>, i32)
1754 define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_zero(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {
1755 ; CHECK-LABEL: splice_nxv16bf16_offset_zero:
1758 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 0)
1759 ret <vscale x 16 x bfloat> %res
1762 define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_negone(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {
1763 ; CHECK-LABEL: splice_nxv16bf16_offset_negone:
1765 ; CHECK-NEXT: csrr a0, vlenb
1766 ; CHECK-NEXT: slli a0, a0, 1
1767 ; CHECK-NEXT: addi a0, a0, -1
1768 ; CHECK-NEXT: vsetivli zero, 1, e16, m4, ta, ma
1769 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1770 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1771 ; CHECK-NEXT: vslideup.vi v8, v12, 1
1773 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 -1)
1774 ret <vscale x 16 x bfloat> %res
1777 define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_min(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {
1778 ; CHECK-LABEL: splice_nxv16bf16_offset_min:
1780 ; CHECK-NEXT: csrr a0, vlenb
1781 ; CHECK-NEXT: slli a0, a0, 1
1782 ; CHECK-NEXT: addi a0, a0, -32
1783 ; CHECK-NEXT: li a1, 32
1784 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
1785 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1786 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
1787 ; CHECK-NEXT: vslideup.vx v8, v12, a1
1789 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 -32)
1790 ret <vscale x 16 x bfloat> %res
1793 define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_max(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {
1794 ; CHECK-LABEL: splice_nxv16bf16_offset_max:
1796 ; CHECK-NEXT: csrr a0, vlenb
1797 ; CHECK-NEXT: slli a0, a0, 1
1798 ; CHECK-NEXT: addi a0, a0, -31
1799 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
1800 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
1801 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
1802 ; CHECK-NEXT: vslideup.vx v8, v12, a0
1804 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 31)
1805 ret <vscale x 16 x bfloat> %res
1808 declare <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat>, <vscale x 32 x bfloat>, i32)
1810 define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_zero(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {
1811 ; CHECK-LABEL: splice_nxv32bf16_offset_zero:
1814 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 0)
1815 ret <vscale x 32 x bfloat> %res
1818 define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_negone(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {
1819 ; CHECK-LABEL: splice_nxv32bf16_offset_negone:
1821 ; CHECK-NEXT: csrr a0, vlenb
1822 ; CHECK-NEXT: slli a0, a0, 2
1823 ; CHECK-NEXT: addi a0, a0, -1
1824 ; CHECK-NEXT: vsetivli zero, 1, e16, m8, ta, ma
1825 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1826 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
1827 ; CHECK-NEXT: vslideup.vi v8, v16, 1
1829 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 -1)
1830 ret <vscale x 32 x bfloat> %res
1833 define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_min(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {
1834 ; CHECK-LABEL: splice_nxv32bf16_offset_min:
1836 ; CHECK-NEXT: csrr a0, vlenb
1837 ; CHECK-NEXT: slli a0, a0, 2
1838 ; CHECK-NEXT: addi a0, a0, -64
1839 ; CHECK-NEXT: li a1, 64
1840 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
1841 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1842 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
1843 ; CHECK-NEXT: vslideup.vx v8, v16, a1
1845 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 -64)
1846 ret <vscale x 32 x bfloat> %res
1849 define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_max(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {
1850 ; CHECK-LABEL: splice_nxv32bf16_offset_max:
1852 ; CHECK-NEXT: csrr a0, vlenb
1853 ; CHECK-NEXT: slli a0, a0, 2
1854 ; CHECK-NEXT: addi a0, a0, -63
1855 ; CHECK-NEXT: li a1, 63
1856 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
1857 ; CHECK-NEXT: vslidedown.vx v8, v8, a1
1858 ; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma
1859 ; CHECK-NEXT: vslideup.vx v8, v16, a0
1861 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 63)
1862 ret <vscale x 32 x bfloat> %res
1865 declare <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, i32)
1867 define <vscale x 1 x half> @splice_nxv1f16_offset_zero(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {
1868 ; CHECK-LABEL: splice_nxv1f16_offset_zero:
1871 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 0)
1872 ret <vscale x 1 x half> %res
1875 define <vscale x 1 x half> @splice_nxv1f16_offset_negone(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {
1876 ; CHECK-LABEL: splice_nxv1f16_offset_negone:
1878 ; CHECK-NEXT: csrr a0, vlenb
1879 ; CHECK-NEXT: srli a0, a0, 3
1880 ; CHECK-NEXT: addi a0, a0, -1
1881 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1882 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1883 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1885 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 -1)
1886 ret <vscale x 1 x half> %res
1889 define <vscale x 1 x half> @splice_nxv1f16_offset_min(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {
1890 ; CHECK-LABEL: splice_nxv1f16_offset_min:
1892 ; CHECK-NEXT: csrr a0, vlenb
1893 ; CHECK-NEXT: srli a0, a0, 3
1894 ; CHECK-NEXT: addi a0, a0, -2
1895 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
1896 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1897 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
1898 ; CHECK-NEXT: vslideup.vi v8, v9, 2
1900 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 -2)
1901 ret <vscale x 1 x half> %res
1904 define <vscale x 1 x half> @splice_nxv1f16_offset_max(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {
1905 ; CHECK-LABEL: splice_nxv1f16_offset_max:
1907 ; CHECK-NEXT: csrr a0, vlenb
1908 ; CHECK-NEXT: srli a0, a0, 3
1909 ; CHECK-NEXT: addi a0, a0, -1
1910 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
1911 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
1912 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1913 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1915 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 1)
1916 ret <vscale x 1 x half> %res
1919 declare <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, i32)
1921 define <vscale x 2 x half> @splice_nxv2f16_offset_zero(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {
1922 ; CHECK-LABEL: splice_nxv2f16_offset_zero:
1925 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 0)
1926 ret <vscale x 2 x half> %res
1929 define <vscale x 2 x half> @splice_nxv2f16_offset_negone(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {
1930 ; CHECK-LABEL: splice_nxv2f16_offset_negone:
1932 ; CHECK-NEXT: csrr a0, vlenb
1933 ; CHECK-NEXT: srli a0, a0, 2
1934 ; CHECK-NEXT: addi a0, a0, -1
1935 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
1936 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1937 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1939 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 -1)
1940 ret <vscale x 2 x half> %res
1943 define <vscale x 2 x half> @splice_nxv2f16_offset_min(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {
1944 ; CHECK-LABEL: splice_nxv2f16_offset_min:
1946 ; CHECK-NEXT: csrr a0, vlenb
1947 ; CHECK-NEXT: srli a0, a0, 2
1948 ; CHECK-NEXT: addi a0, a0, -4
1949 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1950 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1951 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
1952 ; CHECK-NEXT: vslideup.vi v8, v9, 4
1954 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 -4)
1955 ret <vscale x 2 x half> %res
1958 define <vscale x 2 x half> @splice_nxv2f16_offset_max(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {
1959 ; CHECK-LABEL: splice_nxv2f16_offset_max:
1961 ; CHECK-NEXT: csrr a0, vlenb
1962 ; CHECK-NEXT: srli a0, a0, 2
1963 ; CHECK-NEXT: addi a0, a0, -3
1964 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
1965 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
1966 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
1967 ; CHECK-NEXT: vslideup.vx v8, v9, a0
1969 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 3)
1970 ret <vscale x 2 x half> %res
1973 declare <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, i32)
1975 define <vscale x 4 x half> @splice_nxv4f16_offset_zero(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {
1976 ; CHECK-LABEL: splice_nxv4f16_offset_zero:
1979 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 0)
1980 ret <vscale x 4 x half> %res
1983 define <vscale x 4 x half> @splice_nxv4f16_offset_negone(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {
1984 ; CHECK-LABEL: splice_nxv4f16_offset_negone:
1986 ; CHECK-NEXT: csrr a0, vlenb
1987 ; CHECK-NEXT: srli a0, a0, 1
1988 ; CHECK-NEXT: addi a0, a0, -1
1989 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
1990 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
1991 ; CHECK-NEXT: vslideup.vi v8, v9, 1
1993 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 -1)
1994 ret <vscale x 4 x half> %res
1997 define <vscale x 4 x half> @splice_nxv4f16_offset_min(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {
1998 ; CHECK-LABEL: splice_nxv4f16_offset_min:
2000 ; CHECK-NEXT: csrr a0, vlenb
2001 ; CHECK-NEXT: srli a0, a0, 1
2002 ; CHECK-NEXT: addi a0, a0, -8
2003 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
2004 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2005 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
2006 ; CHECK-NEXT: vslideup.vi v8, v9, 8
2008 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 -8)
2009 ret <vscale x 4 x half> %res
2012 define <vscale x 4 x half> @splice_nxv4f16_offset_max(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {
2013 ; CHECK-LABEL: splice_nxv4f16_offset_max:
2015 ; CHECK-NEXT: csrr a0, vlenb
2016 ; CHECK-NEXT: srli a0, a0, 1
2017 ; CHECK-NEXT: addi a0, a0, -7
2018 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2019 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
2020 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
2021 ; CHECK-NEXT: vslideup.vx v8, v9, a0
2023 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 7)
2024 ret <vscale x 4 x half> %res
2027 declare <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, i32)
2029 define <vscale x 8 x half> @splice_nxv8f16_offset_zero(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {
2030 ; CHECK-LABEL: splice_nxv8f16_offset_zero:
2033 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 0)
2034 ret <vscale x 8 x half> %res
2037 define <vscale x 8 x half> @splice_nxv8f16_offset_negone(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {
2038 ; CHECK-LABEL: splice_nxv8f16_offset_negone:
2040 ; CHECK-NEXT: csrr a0, vlenb
2041 ; CHECK-NEXT: addi a0, a0, -1
2042 ; CHECK-NEXT: vsetivli zero, 1, e16, m2, ta, ma
2043 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2044 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2045 ; CHECK-NEXT: vslideup.vi v8, v10, 1
2047 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 -1)
2048 ret <vscale x 8 x half> %res
2051 define <vscale x 8 x half> @splice_nxv8f16_offset_min(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {
2052 ; CHECK-LABEL: splice_nxv8f16_offset_min:
2054 ; CHECK-NEXT: csrr a0, vlenb
2055 ; CHECK-NEXT: addi a0, a0, -16
2056 ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
2057 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2058 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
2059 ; CHECK-NEXT: vslideup.vi v8, v10, 16
2061 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 -16)
2062 ret <vscale x 8 x half> %res
2065 define <vscale x 8 x half> @splice_nxv8f16_offset_max(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {
2066 ; CHECK-LABEL: splice_nxv8f16_offset_max:
2068 ; CHECK-NEXT: csrr a0, vlenb
2069 ; CHECK-NEXT: addi a0, a0, -15
2070 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2071 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
2072 ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
2073 ; CHECK-NEXT: vslideup.vx v8, v10, a0
2075 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 15)
2076 ret <vscale x 8 x half> %res
2079 declare <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, i32)
2081 define <vscale x 16 x half> @splice_nxv16f16_offset_zero(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {
2082 ; CHECK-LABEL: splice_nxv16f16_offset_zero:
2085 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 0)
2086 ret <vscale x 16 x half> %res
2089 define <vscale x 16 x half> @splice_nxv16f16_offset_negone(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {
2090 ; CHECK-LABEL: splice_nxv16f16_offset_negone:
2092 ; CHECK-NEXT: csrr a0, vlenb
2093 ; CHECK-NEXT: slli a0, a0, 1
2094 ; CHECK-NEXT: addi a0, a0, -1
2095 ; CHECK-NEXT: vsetivli zero, 1, e16, m4, ta, ma
2096 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2097 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2098 ; CHECK-NEXT: vslideup.vi v8, v12, 1
2100 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 -1)
2101 ret <vscale x 16 x half> %res
2104 define <vscale x 16 x half> @splice_nxv16f16_offset_min(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {
2105 ; CHECK-LABEL: splice_nxv16f16_offset_min:
2107 ; CHECK-NEXT: csrr a0, vlenb
2108 ; CHECK-NEXT: slli a0, a0, 1
2109 ; CHECK-NEXT: addi a0, a0, -32
2110 ; CHECK-NEXT: li a1, 32
2111 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
2112 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2113 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
2114 ; CHECK-NEXT: vslideup.vx v8, v12, a1
2116 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 -32)
2117 ret <vscale x 16 x half> %res
2120 define <vscale x 16 x half> @splice_nxv16f16_offset_max(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {
2121 ; CHECK-LABEL: splice_nxv16f16_offset_max:
2123 ; CHECK-NEXT: csrr a0, vlenb
2124 ; CHECK-NEXT: slli a0, a0, 1
2125 ; CHECK-NEXT: addi a0, a0, -31
2126 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
2127 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
2128 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
2129 ; CHECK-NEXT: vslideup.vx v8, v12, a0
2131 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 31)
2132 ret <vscale x 16 x half> %res
2135 declare <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, i32)
2137 define <vscale x 32 x half> @splice_nxv32f16_offset_zero(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {
2138 ; CHECK-LABEL: splice_nxv32f16_offset_zero:
2141 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 0)
2142 ret <vscale x 32 x half> %res
2145 define <vscale x 32 x half> @splice_nxv32f16_offset_negone(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {
2146 ; CHECK-LABEL: splice_nxv32f16_offset_negone:
2148 ; CHECK-NEXT: csrr a0, vlenb
2149 ; CHECK-NEXT: slli a0, a0, 2
2150 ; CHECK-NEXT: addi a0, a0, -1
2151 ; CHECK-NEXT: vsetivli zero, 1, e16, m8, ta, ma
2152 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2153 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
2154 ; CHECK-NEXT: vslideup.vi v8, v16, 1
2156 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 -1)
2157 ret <vscale x 32 x half> %res
2160 define <vscale x 32 x half> @splice_nxv32f16_offset_min(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {
2161 ; CHECK-LABEL: splice_nxv32f16_offset_min:
2163 ; CHECK-NEXT: csrr a0, vlenb
2164 ; CHECK-NEXT: slli a0, a0, 2
2165 ; CHECK-NEXT: addi a0, a0, -64
2166 ; CHECK-NEXT: li a1, 64
2167 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
2168 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2169 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
2170 ; CHECK-NEXT: vslideup.vx v8, v16, a1
2172 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 -64)
2173 ret <vscale x 32 x half> %res
2176 define <vscale x 32 x half> @splice_nxv32f16_offset_max(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {
2177 ; CHECK-LABEL: splice_nxv32f16_offset_max:
2179 ; CHECK-NEXT: csrr a0, vlenb
2180 ; CHECK-NEXT: slli a0, a0, 2
2181 ; CHECK-NEXT: addi a0, a0, -63
2182 ; CHECK-NEXT: li a1, 63
2183 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
2184 ; CHECK-NEXT: vslidedown.vx v8, v8, a1
2185 ; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma
2186 ; CHECK-NEXT: vslideup.vx v8, v16, a0
2188 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 63)
2189 ret <vscale x 32 x half> %res
2192 declare <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, i32)
2194 define <vscale x 1 x float> @splice_nxv1f32_offset_zero(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {
2195 ; CHECK-LABEL: splice_nxv1f32_offset_zero:
2198 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 0)
2199 ret <vscale x 1 x float> %res
2202 define <vscale x 1 x float> @splice_nxv1f32_offset_negone(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {
2203 ; CHECK-LABEL: splice_nxv1f32_offset_negone:
2205 ; CHECK-NEXT: csrr a0, vlenb
2206 ; CHECK-NEXT: srli a0, a0, 3
2207 ; CHECK-NEXT: addi a0, a0, -1
2208 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
2209 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2210 ; CHECK-NEXT: vslideup.vi v8, v9, 1
2212 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 -1)
2213 ret <vscale x 1 x float> %res
2216 define <vscale x 1 x float> @splice_nxv1f32_offset_min(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {
2217 ; CHECK-LABEL: splice_nxv1f32_offset_min:
2219 ; CHECK-NEXT: csrr a0, vlenb
2220 ; CHECK-NEXT: srli a0, a0, 3
2221 ; CHECK-NEXT: addi a0, a0, -2
2222 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
2223 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2224 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
2225 ; CHECK-NEXT: vslideup.vi v8, v9, 2
2227 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 -2)
2228 ret <vscale x 1 x float> %res
2231 define <vscale x 1 x float> @splice_nxv1f32_offset_max(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {
2232 ; CHECK-LABEL: splice_nxv1f32_offset_max:
2234 ; CHECK-NEXT: csrr a0, vlenb
2235 ; CHECK-NEXT: srli a0, a0, 3
2236 ; CHECK-NEXT: addi a0, a0, -1
2237 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
2238 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
2239 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
2240 ; CHECK-NEXT: vslideup.vx v8, v9, a0
2242 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 1)
2243 ret <vscale x 1 x float> %res
2246 declare <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, i32)
2248 define <vscale x 2 x float> @splice_nxv2f32_offset_zero(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {
2249 ; CHECK-LABEL: splice_nxv2f32_offset_zero:
2252 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 0)
2253 ret <vscale x 2 x float> %res
2256 define <vscale x 2 x float> @splice_nxv2f32_offset_negone(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {
2257 ; CHECK-LABEL: splice_nxv2f32_offset_negone:
2259 ; CHECK-NEXT: csrr a0, vlenb
2260 ; CHECK-NEXT: srli a0, a0, 2
2261 ; CHECK-NEXT: addi a0, a0, -1
2262 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
2263 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2264 ; CHECK-NEXT: vslideup.vi v8, v9, 1
2266 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 -1)
2267 ret <vscale x 2 x float> %res
2270 define <vscale x 2 x float> @splice_nxv2f32_offset_min(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {
2271 ; CHECK-LABEL: splice_nxv2f32_offset_min:
2273 ; CHECK-NEXT: csrr a0, vlenb
2274 ; CHECK-NEXT: srli a0, a0, 2
2275 ; CHECK-NEXT: addi a0, a0, -4
2276 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
2277 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2278 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
2279 ; CHECK-NEXT: vslideup.vi v8, v9, 4
2281 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 -4)
2282 ret <vscale x 2 x float> %res
2285 define <vscale x 2 x float> @splice_nxv2f32_offset_max(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {
2286 ; CHECK-LABEL: splice_nxv2f32_offset_max:
2288 ; CHECK-NEXT: csrr a0, vlenb
2289 ; CHECK-NEXT: srli a0, a0, 2
2290 ; CHECK-NEXT: addi a0, a0, -3
2291 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
2292 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
2293 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
2294 ; CHECK-NEXT: vslideup.vx v8, v9, a0
2296 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 3)
2297 ret <vscale x 2 x float> %res
2300 declare <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, i32)
2302 define <vscale x 4 x float> @splice_nxv4f32_offset_zero(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {
2303 ; CHECK-LABEL: splice_nxv4f32_offset_zero:
2306 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 0)
2307 ret <vscale x 4 x float> %res
2310 define <vscale x 4 x float> @splice_nxv4f32_offset_negone(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {
2311 ; CHECK-LABEL: splice_nxv4f32_offset_negone:
2313 ; CHECK-NEXT: csrr a0, vlenb
2314 ; CHECK-NEXT: srli a0, a0, 1
2315 ; CHECK-NEXT: addi a0, a0, -1
2316 ; CHECK-NEXT: vsetivli zero, 1, e32, m2, ta, ma
2317 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2318 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2319 ; CHECK-NEXT: vslideup.vi v8, v10, 1
2321 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 -1)
2322 ret <vscale x 4 x float> %res
2325 define <vscale x 4 x float> @splice_nxv4f32_offset_min(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {
2326 ; CHECK-LABEL: splice_nxv4f32_offset_min:
2328 ; CHECK-NEXT: csrr a0, vlenb
2329 ; CHECK-NEXT: srli a0, a0, 1
2330 ; CHECK-NEXT: addi a0, a0, -8
2331 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
2332 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2333 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
2334 ; CHECK-NEXT: vslideup.vi v8, v10, 8
2336 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 -8)
2337 ret <vscale x 4 x float> %res
2340 define <vscale x 4 x float> @splice_nxv4f32_offset_max(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {
2341 ; CHECK-LABEL: splice_nxv4f32_offset_max:
2343 ; CHECK-NEXT: csrr a0, vlenb
2344 ; CHECK-NEXT: srli a0, a0, 1
2345 ; CHECK-NEXT: addi a0, a0, -7
2346 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2347 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
2348 ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2349 ; CHECK-NEXT: vslideup.vx v8, v10, a0
2351 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 7)
2352 ret <vscale x 4 x float> %res
2355 declare <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, i32)
2357 define <vscale x 8 x float> @splice_nxv8f32_offset_zero(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {
2358 ; CHECK-LABEL: splice_nxv8f32_offset_zero:
2361 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 0)
2362 ret <vscale x 8 x float> %res
2365 define <vscale x 8 x float> @splice_nxv8f32_offset_negone(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {
2366 ; CHECK-LABEL: splice_nxv8f32_offset_negone:
2368 ; CHECK-NEXT: csrr a0, vlenb
2369 ; CHECK-NEXT: addi a0, a0, -1
2370 ; CHECK-NEXT: vsetivli zero, 1, e32, m4, ta, ma
2371 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2372 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2373 ; CHECK-NEXT: vslideup.vi v8, v12, 1
2375 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 -1)
2376 ret <vscale x 8 x float> %res
2379 define <vscale x 8 x float> @splice_nxv8f32_offset_min(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {
2380 ; CHECK-LABEL: splice_nxv8f32_offset_min:
2382 ; CHECK-NEXT: csrr a0, vlenb
2383 ; CHECK-NEXT: addi a0, a0, -16
2384 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
2385 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2386 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2387 ; CHECK-NEXT: vslideup.vi v8, v12, 16
2389 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 -16)
2390 ret <vscale x 8 x float> %res
2393 define <vscale x 8 x float> @splice_nxv8f32_offset_max(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {
2394 ; CHECK-LABEL: splice_nxv8f32_offset_max:
2396 ; CHECK-NEXT: csrr a0, vlenb
2397 ; CHECK-NEXT: addi a0, a0, -15
2398 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
2399 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
2400 ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
2401 ; CHECK-NEXT: vslideup.vx v8, v12, a0
2403 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 15)
2404 ret <vscale x 8 x float> %res
2407 declare <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, i32)
2409 define <vscale x 16 x float> @splice_nxv16f32_offset_zero(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {
2410 ; CHECK-LABEL: splice_nxv16f32_offset_zero:
2413 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 0)
2414 ret <vscale x 16 x float> %res
2417 define <vscale x 16 x float> @splice_nxv16f32_offset_negone(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {
2418 ; CHECK-LABEL: splice_nxv16f32_offset_negone:
2420 ; CHECK-NEXT: csrr a0, vlenb
2421 ; CHECK-NEXT: slli a0, a0, 1
2422 ; CHECK-NEXT: addi a0, a0, -1
2423 ; CHECK-NEXT: vsetivli zero, 1, e32, m8, ta, ma
2424 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2425 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
2426 ; CHECK-NEXT: vslideup.vi v8, v16, 1
2428 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 -1)
2429 ret <vscale x 16 x float> %res
2432 define <vscale x 16 x float> @splice_nxv16f32_offset_min(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {
2433 ; CHECK-LABEL: splice_nxv16f32_offset_min:
2435 ; CHECK-NEXT: csrr a0, vlenb
2436 ; CHECK-NEXT: slli a0, a0, 1
2437 ; CHECK-NEXT: addi a0, a0, -32
2438 ; CHECK-NEXT: li a1, 32
2439 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
2440 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2441 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
2442 ; CHECK-NEXT: vslideup.vx v8, v16, a1
2444 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 -32)
2445 ret <vscale x 16 x float> %res
2448 define <vscale x 16 x float> @splice_nxv16f32_offset_max(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {
2449 ; CHECK-LABEL: splice_nxv16f32_offset_max:
2451 ; CHECK-NEXT: csrr a0, vlenb
2452 ; CHECK-NEXT: slli a0, a0, 1
2453 ; CHECK-NEXT: addi a0, a0, -31
2454 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
2455 ; CHECK-NEXT: vslidedown.vi v8, v8, 31
2456 ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma
2457 ; CHECK-NEXT: vslideup.vx v8, v16, a0
2459 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 31)
2460 ret <vscale x 16 x float> %res
2463 declare <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, i32)
2465 define <vscale x 1 x double> @splice_nxv1f64_offset_zero(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {
2466 ; CHECK-LABEL: splice_nxv1f64_offset_zero:
2469 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 0)
2470 ret <vscale x 1 x double> %res
2473 define <vscale x 1 x double> @splice_nxv1f64_offset_negone(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {
2474 ; CHECK-LABEL: splice_nxv1f64_offset_negone:
2476 ; CHECK-NEXT: csrr a0, vlenb
2477 ; CHECK-NEXT: srli a0, a0, 3
2478 ; CHECK-NEXT: addi a0, a0, -1
2479 ; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma
2480 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2481 ; CHECK-NEXT: vslideup.vi v8, v9, 1
2483 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 -1)
2484 ret <vscale x 1 x double> %res
2487 define <vscale x 1 x double> @splice_nxv1f64_offset_min(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {
2488 ; CHECK-LABEL: splice_nxv1f64_offset_min:
2490 ; CHECK-NEXT: csrr a0, vlenb
2491 ; CHECK-NEXT: srli a0, a0, 3
2492 ; CHECK-NEXT: addi a0, a0, -2
2493 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
2494 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2495 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
2496 ; CHECK-NEXT: vslideup.vi v8, v9, 2
2498 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 -2)
2499 ret <vscale x 1 x double> %res
2502 define <vscale x 1 x double> @splice_nxv1f64_offset_max(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {
2503 ; CHECK-LABEL: splice_nxv1f64_offset_max:
2505 ; CHECK-NEXT: csrr a0, vlenb
2506 ; CHECK-NEXT: srli a0, a0, 3
2507 ; CHECK-NEXT: addi a0, a0, -1
2508 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
2509 ; CHECK-NEXT: vslidedown.vi v8, v8, 1
2510 ; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma
2511 ; CHECK-NEXT: vslideup.vx v8, v9, a0
2513 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 1)
2514 ret <vscale x 1 x double> %res
2517 declare <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, i32)
2519 define <vscale x 2 x double> @splice_nxv2f64_offset_zero(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {
2520 ; CHECK-LABEL: splice_nxv2f64_offset_zero:
2523 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 0)
2524 ret <vscale x 2 x double> %res
2527 define <vscale x 2 x double> @splice_nxv2f64_offset_negone(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {
2528 ; CHECK-LABEL: splice_nxv2f64_offset_negone:
2530 ; CHECK-NEXT: csrr a0, vlenb
2531 ; CHECK-NEXT: srli a0, a0, 2
2532 ; CHECK-NEXT: addi a0, a0, -1
2533 ; CHECK-NEXT: vsetivli zero, 1, e64, m2, ta, ma
2534 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2535 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
2536 ; CHECK-NEXT: vslideup.vi v8, v10, 1
2538 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 -1)
2539 ret <vscale x 2 x double> %res
2542 define <vscale x 2 x double> @splice_nxv2f64_offset_min(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {
2543 ; CHECK-LABEL: splice_nxv2f64_offset_min:
2545 ; CHECK-NEXT: csrr a0, vlenb
2546 ; CHECK-NEXT: srli a0, a0, 2
2547 ; CHECK-NEXT: addi a0, a0, -4
2548 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
2549 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2550 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
2551 ; CHECK-NEXT: vslideup.vi v8, v10, 4
2553 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 -4)
2554 ret <vscale x 2 x double> %res
2557 define <vscale x 2 x double> @splice_nxv2f64_offset_max(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {
2558 ; CHECK-LABEL: splice_nxv2f64_offset_max:
2560 ; CHECK-NEXT: csrr a0, vlenb
2561 ; CHECK-NEXT: srli a0, a0, 2
2562 ; CHECK-NEXT: addi a0, a0, -3
2563 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
2564 ; CHECK-NEXT: vslidedown.vi v8, v8, 3
2565 ; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, ma
2566 ; CHECK-NEXT: vslideup.vx v8, v10, a0
2568 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 3)
2569 ret <vscale x 2 x double> %res
2572 declare <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, i32)
2574 define <vscale x 4 x double> @splice_nxv4f64_offset_zero(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {
2575 ; CHECK-LABEL: splice_nxv4f64_offset_zero:
2578 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 0)
2579 ret <vscale x 4 x double> %res
2582 define <vscale x 4 x double> @splice_nxv4f64_offset_negone(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {
2583 ; CHECK-LABEL: splice_nxv4f64_offset_negone:
2585 ; CHECK-NEXT: csrr a0, vlenb
2586 ; CHECK-NEXT: srli a0, a0, 1
2587 ; CHECK-NEXT: addi a0, a0, -1
2588 ; CHECK-NEXT: vsetivli zero, 1, e64, m4, ta, ma
2589 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2590 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
2591 ; CHECK-NEXT: vslideup.vi v8, v12, 1
2593 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 -1)
2594 ret <vscale x 4 x double> %res
2597 define <vscale x 4 x double> @splice_nxv4f64_offset_min(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {
2598 ; CHECK-LABEL: splice_nxv4f64_offset_min:
2600 ; CHECK-NEXT: csrr a0, vlenb
2601 ; CHECK-NEXT: srli a0, a0, 1
2602 ; CHECK-NEXT: addi a0, a0, -8
2603 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
2604 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2605 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
2606 ; CHECK-NEXT: vslideup.vi v8, v12, 8
2608 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 -8)
2609 ret <vscale x 4 x double> %res
2612 define <vscale x 4 x double> @splice_nxv4f64_offset_max(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {
2613 ; CHECK-LABEL: splice_nxv4f64_offset_max:
2615 ; CHECK-NEXT: csrr a0, vlenb
2616 ; CHECK-NEXT: srli a0, a0, 1
2617 ; CHECK-NEXT: addi a0, a0, -7
2618 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
2619 ; CHECK-NEXT: vslidedown.vi v8, v8, 7
2620 ; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, ma
2621 ; CHECK-NEXT: vslideup.vx v8, v12, a0
2623 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 7)
2624 ret <vscale x 4 x double> %res
2627 declare <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, i32)
2629 define <vscale x 8 x double> @splice_nxv8f64_offset_zero(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {
2630 ; CHECK-LABEL: splice_nxv8f64_offset_zero:
2633 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 0)
2634 ret <vscale x 8 x double> %res
2637 define <vscale x 8 x double> @splice_nxv8f64_offset_negone(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {
2638 ; CHECK-LABEL: splice_nxv8f64_offset_negone:
2640 ; CHECK-NEXT: csrr a0, vlenb
2641 ; CHECK-NEXT: addi a0, a0, -1
2642 ; CHECK-NEXT: vsetivli zero, 1, e64, m8, ta, ma
2643 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2644 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2645 ; CHECK-NEXT: vslideup.vi v8, v16, 1
2647 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 -1)
2648 ret <vscale x 8 x double> %res
2651 define <vscale x 8 x double> @splice_nxv8f64_offset_min(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {
2652 ; CHECK-LABEL: splice_nxv8f64_offset_min:
2654 ; CHECK-NEXT: csrr a0, vlenb
2655 ; CHECK-NEXT: addi a0, a0, -16
2656 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2657 ; CHECK-NEXT: vslidedown.vx v8, v8, a0
2658 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2659 ; CHECK-NEXT: vslideup.vi v8, v16, 16
2661 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 -16)
2662 ret <vscale x 8 x double> %res
2665 define <vscale x 8 x double> @splice_nxv8f64_offset_max(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {
2666 ; CHECK-LABEL: splice_nxv8f64_offset_max:
2668 ; CHECK-NEXT: csrr a0, vlenb
2669 ; CHECK-NEXT: addi a0, a0, -15
2670 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2671 ; CHECK-NEXT: vslidedown.vi v8, v8, 15
2672 ; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma
2673 ; CHECK-NEXT: vslideup.vx v8, v16, a0
2675 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 15)
2676 ret <vscale x 8 x double> %res
2679 attributes #0 = { vscale_range(2,0) }