Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / insertelt-int-rv64.ll
blob5bba1c549972bbac791573761df486f9a6190af8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
5 define <vscale x 1 x i8> @insertelt_nxv1i8_0(<vscale x 1 x i8> %v, i8 signext %elt) {
6 ; CHECK-LABEL: insertelt_nxv1i8_0:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
9 ; CHECK-NEXT:    vmv.s.x v8, a0
10 ; CHECK-NEXT:    ret
11   %r = insertelement <vscale x 1 x i8> %v, i8 %elt, i32 0
12   ret <vscale x 1 x i8> %r
15 define <vscale x 1 x i8> @insertelt_nxv1i8_imm(<vscale x 1 x i8> %v, i8 signext %elt) {
16 ; CHECK-LABEL: insertelt_nxv1i8_imm:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf8, tu, ma
19 ; CHECK-NEXT:    vmv.s.x v9, a0
20 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
21 ; CHECK-NEXT:    ret
22   %r = insertelement <vscale x 1 x i8> %v, i8 %elt, i32 3
23   ret <vscale x 1 x i8> %r
26 define <vscale x 1 x i8> @insertelt_nxv1i8_idx(<vscale x 1 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
27 ; CHECK-LABEL: insertelt_nxv1i8_idx:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    addi a2, a1, 1
30 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
31 ; CHECK-NEXT:    vmv.s.x v9, a0
32 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf8, tu, ma
33 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
34 ; CHECK-NEXT:    ret
35   %r = insertelement <vscale x 1 x i8> %v, i8 %elt, i32 %idx
36   ret <vscale x 1 x i8> %r
39 define <vscale x 2 x i8> @insertelt_nxv2i8_0(<vscale x 2 x i8> %v, i8 signext %elt) {
40 ; CHECK-LABEL: insertelt_nxv2i8_0:
41 ; CHECK:       # %bb.0:
42 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
43 ; CHECK-NEXT:    vmv.s.x v8, a0
44 ; CHECK-NEXT:    ret
45   %r = insertelement <vscale x 2 x i8> %v, i8 %elt, i32 0
46   ret <vscale x 2 x i8> %r
49 define <vscale x 2 x i8> @insertelt_nxv2i8_imm(<vscale x 2 x i8> %v, i8 signext %elt) {
50 ; CHECK-LABEL: insertelt_nxv2i8_imm:
51 ; CHECK:       # %bb.0:
52 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, tu, ma
53 ; CHECK-NEXT:    vmv.s.x v9, a0
54 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
55 ; CHECK-NEXT:    ret
56   %r = insertelement <vscale x 2 x i8> %v, i8 %elt, i32 3
57   ret <vscale x 2 x i8> %r
60 define <vscale x 2 x i8> @insertelt_nxv2i8_idx(<vscale x 2 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
61 ; CHECK-LABEL: insertelt_nxv2i8_idx:
62 ; CHECK:       # %bb.0:
63 ; CHECK-NEXT:    addi a2, a1, 1
64 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
65 ; CHECK-NEXT:    vmv.s.x v9, a0
66 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf4, tu, ma
67 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
68 ; CHECK-NEXT:    ret
69   %r = insertelement <vscale x 2 x i8> %v, i8 %elt, i32 %idx
70   ret <vscale x 2 x i8> %r
73 define <vscale x 4 x i8> @insertelt_nxv4i8_0(<vscale x 4 x i8> %v, i8 signext %elt) {
74 ; CHECK-LABEL: insertelt_nxv4i8_0:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
77 ; CHECK-NEXT:    vmv.s.x v8, a0
78 ; CHECK-NEXT:    ret
79   %r = insertelement <vscale x 4 x i8> %v, i8 %elt, i32 0
80   ret <vscale x 4 x i8> %r
83 define <vscale x 4 x i8> @insertelt_nxv4i8_imm(<vscale x 4 x i8> %v, i8 signext %elt) {
84 ; CHECK-LABEL: insertelt_nxv4i8_imm:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
87 ; CHECK-NEXT:    vmv.s.x v9, a0
88 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
89 ; CHECK-NEXT:    ret
90   %r = insertelement <vscale x 4 x i8> %v, i8 %elt, i32 3
91   ret <vscale x 4 x i8> %r
94 define <vscale x 4 x i8> @insertelt_nxv4i8_idx(<vscale x 4 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
95 ; CHECK-LABEL: insertelt_nxv4i8_idx:
96 ; CHECK:       # %bb.0:
97 ; CHECK-NEXT:    addi a2, a1, 1
98 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
99 ; CHECK-NEXT:    vmv.s.x v9, a0
100 ; CHECK-NEXT:    vsetvli zero, a2, e8, mf2, tu, ma
101 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
102 ; CHECK-NEXT:    ret
103   %r = insertelement <vscale x 4 x i8> %v, i8 %elt, i32 %idx
104   ret <vscale x 4 x i8> %r
107 define <vscale x 8 x i8> @insertelt_nxv8i8_0(<vscale x 8 x i8> %v, i8 signext %elt) {
108 ; CHECK-LABEL: insertelt_nxv8i8_0:
109 ; CHECK:       # %bb.0:
110 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
111 ; CHECK-NEXT:    vmv.s.x v8, a0
112 ; CHECK-NEXT:    ret
113   %r = insertelement <vscale x 8 x i8> %v, i8 %elt, i32 0
114   ret <vscale x 8 x i8> %r
117 define <vscale x 8 x i8> @insertelt_nxv8i8_imm(<vscale x 8 x i8> %v, i8 signext %elt) {
118 ; CHECK-LABEL: insertelt_nxv8i8_imm:
119 ; CHECK:       # %bb.0:
120 ; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
121 ; CHECK-NEXT:    vmv.s.x v9, a0
122 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
123 ; CHECK-NEXT:    ret
124   %r = insertelement <vscale x 8 x i8> %v, i8 %elt, i32 3
125   ret <vscale x 8 x i8> %r
128 define <vscale x 8 x i8> @insertelt_nxv8i8_idx(<vscale x 8 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
129 ; CHECK-LABEL: insertelt_nxv8i8_idx:
130 ; CHECK:       # %bb.0:
131 ; CHECK-NEXT:    addi a2, a1, 1
132 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
133 ; CHECK-NEXT:    vmv.s.x v9, a0
134 ; CHECK-NEXT:    vsetvli zero, a2, e8, m1, tu, ma
135 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
136 ; CHECK-NEXT:    ret
137   %r = insertelement <vscale x 8 x i8> %v, i8 %elt, i32 %idx
138   ret <vscale x 8 x i8> %r
141 define <vscale x 16 x i8> @insertelt_nxv16i8_0(<vscale x 16 x i8> %v, i8 signext %elt) {
142 ; CHECK-LABEL: insertelt_nxv16i8_0:
143 ; CHECK:       # %bb.0:
144 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
145 ; CHECK-NEXT:    vmv.s.x v8, a0
146 ; CHECK-NEXT:    ret
147   %r = insertelement <vscale x 16 x i8> %v, i8 %elt, i32 0
148   ret <vscale x 16 x i8> %r
151 define <vscale x 16 x i8> @insertelt_nxv16i8_imm(<vscale x 16 x i8> %v, i8 signext %elt) {
152 ; CHECK-LABEL: insertelt_nxv16i8_imm:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
155 ; CHECK-NEXT:    vmv.s.x v10, a0
156 ; CHECK-NEXT:    vslideup.vi v8, v10, 3
157 ; CHECK-NEXT:    ret
158   %r = insertelement <vscale x 16 x i8> %v, i8 %elt, i32 3
159   ret <vscale x 16 x i8> %r
162 define <vscale x 16 x i8> @insertelt_nxv16i8_idx(<vscale x 16 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
163 ; CHECK-LABEL: insertelt_nxv16i8_idx:
164 ; CHECK:       # %bb.0:
165 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
166 ; CHECK-NEXT:    vmv.s.x v10, a0
167 ; CHECK-NEXT:    addi a0, a1, 1
168 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, tu, ma
169 ; CHECK-NEXT:    vslideup.vx v8, v10, a1
170 ; CHECK-NEXT:    ret
171   %r = insertelement <vscale x 16 x i8> %v, i8 %elt, i32 %idx
172   ret <vscale x 16 x i8> %r
175 define <vscale x 32 x i8> @insertelt_nxv32i8_0(<vscale x 32 x i8> %v, i8 signext %elt) {
176 ; CHECK-LABEL: insertelt_nxv32i8_0:
177 ; CHECK:       # %bb.0:
178 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
179 ; CHECK-NEXT:    vmv.s.x v8, a0
180 ; CHECK-NEXT:    ret
181   %r = insertelement <vscale x 32 x i8> %v, i8 %elt, i32 0
182   ret <vscale x 32 x i8> %r
185 define <vscale x 32 x i8> @insertelt_nxv32i8_imm(<vscale x 32 x i8> %v, i8 signext %elt) {
186 ; CHECK-LABEL: insertelt_nxv32i8_imm:
187 ; CHECK:       # %bb.0:
188 ; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
189 ; CHECK-NEXT:    vmv.s.x v12, a0
190 ; CHECK-NEXT:    vslideup.vi v8, v12, 3
191 ; CHECK-NEXT:    ret
192   %r = insertelement <vscale x 32 x i8> %v, i8 %elt, i32 3
193   ret <vscale x 32 x i8> %r
196 define <vscale x 32 x i8> @insertelt_nxv32i8_idx(<vscale x 32 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
197 ; CHECK-LABEL: insertelt_nxv32i8_idx:
198 ; CHECK:       # %bb.0:
199 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
200 ; CHECK-NEXT:    vmv.s.x v12, a0
201 ; CHECK-NEXT:    addi a0, a1, 1
202 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma
203 ; CHECK-NEXT:    vslideup.vx v8, v12, a1
204 ; CHECK-NEXT:    ret
205   %r = insertelement <vscale x 32 x i8> %v, i8 %elt, i32 %idx
206   ret <vscale x 32 x i8> %r
209 define <vscale x 64 x i8> @insertelt_nxv64i8_0(<vscale x 64 x i8> %v, i8 signext %elt) {
210 ; CHECK-LABEL: insertelt_nxv64i8_0:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, tu, ma
213 ; CHECK-NEXT:    vmv.s.x v8, a0
214 ; CHECK-NEXT:    ret
215   %r = insertelement <vscale x 64 x i8> %v, i8 %elt, i32 0
216   ret <vscale x 64 x i8> %r
219 define <vscale x 64 x i8> @insertelt_nxv64i8_imm(<vscale x 64 x i8> %v, i8 signext %elt) {
220 ; CHECK-LABEL: insertelt_nxv64i8_imm:
221 ; CHECK:       # %bb.0:
222 ; CHECK-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
223 ; CHECK-NEXT:    vmv.s.x v16, a0
224 ; CHECK-NEXT:    vslideup.vi v8, v16, 3
225 ; CHECK-NEXT:    ret
226   %r = insertelement <vscale x 64 x i8> %v, i8 %elt, i32 3
227   ret <vscale x 64 x i8> %r
230 define <vscale x 64 x i8> @insertelt_nxv64i8_idx(<vscale x 64 x i8> %v, i8 signext %elt, i32 zeroext %idx) {
231 ; CHECK-LABEL: insertelt_nxv64i8_idx:
232 ; CHECK:       # %bb.0:
233 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
234 ; CHECK-NEXT:    vmv.s.x v16, a0
235 ; CHECK-NEXT:    addi a0, a1, 1
236 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, tu, ma
237 ; CHECK-NEXT:    vslideup.vx v8, v16, a1
238 ; CHECK-NEXT:    ret
239   %r = insertelement <vscale x 64 x i8> %v, i8 %elt, i32 %idx
240   ret <vscale x 64 x i8> %r
243 define <vscale x 1 x i16> @insertelt_nxv1i16_0(<vscale x 1 x i16> %v, i16 signext %elt) {
244 ; CHECK-LABEL: insertelt_nxv1i16_0:
245 ; CHECK:       # %bb.0:
246 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma
247 ; CHECK-NEXT:    vmv.s.x v8, a0
248 ; CHECK-NEXT:    ret
249   %r = insertelement <vscale x 1 x i16> %v, i16 %elt, i32 0
250   ret <vscale x 1 x i16> %r
253 define <vscale x 1 x i16> @insertelt_nxv1i16_imm(<vscale x 1 x i16> %v, i16 signext %elt) {
254 ; CHECK-LABEL: insertelt_nxv1i16_imm:
255 ; CHECK:       # %bb.0:
256 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf4, tu, ma
257 ; CHECK-NEXT:    vmv.s.x v9, a0
258 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
259 ; CHECK-NEXT:    ret
260   %r = insertelement <vscale x 1 x i16> %v, i16 %elt, i32 3
261   ret <vscale x 1 x i16> %r
264 define <vscale x 1 x i16> @insertelt_nxv1i16_idx(<vscale x 1 x i16> %v, i16 signext %elt, i32 zeroext %idx) {
265 ; CHECK-LABEL: insertelt_nxv1i16_idx:
266 ; CHECK:       # %bb.0:
267 ; CHECK-NEXT:    addi a2, a1, 1
268 ; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
269 ; CHECK-NEXT:    vmv.s.x v9, a0
270 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf4, tu, ma
271 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
272 ; CHECK-NEXT:    ret
273   %r = insertelement <vscale x 1 x i16> %v, i16 %elt, i32 %idx
274   ret <vscale x 1 x i16> %r
277 define <vscale x 2 x i16> @insertelt_nxv2i16_0(<vscale x 2 x i16> %v, i16 signext %elt) {
278 ; CHECK-LABEL: insertelt_nxv2i16_0:
279 ; CHECK:       # %bb.0:
280 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma
281 ; CHECK-NEXT:    vmv.s.x v8, a0
282 ; CHECK-NEXT:    ret
283   %r = insertelement <vscale x 2 x i16> %v, i16 %elt, i32 0
284   ret <vscale x 2 x i16> %r
287 define <vscale x 2 x i16> @insertelt_nxv2i16_imm(<vscale x 2 x i16> %v, i16 signext %elt) {
288 ; CHECK-LABEL: insertelt_nxv2i16_imm:
289 ; CHECK:       # %bb.0:
290 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, tu, ma
291 ; CHECK-NEXT:    vmv.s.x v9, a0
292 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
293 ; CHECK-NEXT:    ret
294   %r = insertelement <vscale x 2 x i16> %v, i16 %elt, i32 3
295   ret <vscale x 2 x i16> %r
298 define <vscale x 2 x i16> @insertelt_nxv2i16_idx(<vscale x 2 x i16> %v, i16 signext %elt, i32 zeroext %idx) {
299 ; CHECK-LABEL: insertelt_nxv2i16_idx:
300 ; CHECK:       # %bb.0:
301 ; CHECK-NEXT:    addi a2, a1, 1
302 ; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
303 ; CHECK-NEXT:    vmv.s.x v9, a0
304 ; CHECK-NEXT:    vsetvli zero, a2, e16, mf2, tu, ma
305 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
306 ; CHECK-NEXT:    ret
307   %r = insertelement <vscale x 2 x i16> %v, i16 %elt, i32 %idx
308   ret <vscale x 2 x i16> %r
311 define <vscale x 4 x i16> @insertelt_nxv4i16_0(<vscale x 4 x i16> %v, i16 signext %elt) {
312 ; CHECK-LABEL: insertelt_nxv4i16_0:
313 ; CHECK:       # %bb.0:
314 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma
315 ; CHECK-NEXT:    vmv.s.x v8, a0
316 ; CHECK-NEXT:    ret
317   %r = insertelement <vscale x 4 x i16> %v, i16 %elt, i32 0
318   ret <vscale x 4 x i16> %r
321 define <vscale x 4 x i16> @insertelt_nxv4i16_imm(<vscale x 4 x i16> %v, i16 signext %elt) {
322 ; CHECK-LABEL: insertelt_nxv4i16_imm:
323 ; CHECK:       # %bb.0:
324 ; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
325 ; CHECK-NEXT:    vmv.s.x v9, a0
326 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
327 ; CHECK-NEXT:    ret
328   %r = insertelement <vscale x 4 x i16> %v, i16 %elt, i32 3
329   ret <vscale x 4 x i16> %r
332 define <vscale x 4 x i16> @insertelt_nxv4i16_idx(<vscale x 4 x i16> %v, i16 signext %elt, i32 zeroext %idx) {
333 ; CHECK-LABEL: insertelt_nxv4i16_idx:
334 ; CHECK:       # %bb.0:
335 ; CHECK-NEXT:    addi a2, a1, 1
336 ; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
337 ; CHECK-NEXT:    vmv.s.x v9, a0
338 ; CHECK-NEXT:    vsetvli zero, a2, e16, m1, tu, ma
339 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
340 ; CHECK-NEXT:    ret
341   %r = insertelement <vscale x 4 x i16> %v, i16 %elt, i32 %idx
342   ret <vscale x 4 x i16> %r
345 define <vscale x 8 x i16> @insertelt_nxv8i16_0(<vscale x 8 x i16> %v, i16 signext %elt) {
346 ; CHECK-LABEL: insertelt_nxv8i16_0:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma
349 ; CHECK-NEXT:    vmv.s.x v8, a0
350 ; CHECK-NEXT:    ret
351   %r = insertelement <vscale x 8 x i16> %v, i16 %elt, i32 0
352   ret <vscale x 8 x i16> %r
355 define <vscale x 8 x i16> @insertelt_nxv8i16_imm(<vscale x 8 x i16> %v, i16 signext %elt) {
356 ; CHECK-LABEL: insertelt_nxv8i16_imm:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
359 ; CHECK-NEXT:    vmv.s.x v10, a0
360 ; CHECK-NEXT:    vslideup.vi v8, v10, 3
361 ; CHECK-NEXT:    ret
362   %r = insertelement <vscale x 8 x i16> %v, i16 %elt, i32 3
363   ret <vscale x 8 x i16> %r
366 define <vscale x 8 x i16> @insertelt_nxv8i16_idx(<vscale x 8 x i16> %v, i16 signext %elt, i32 zeroext %idx) {
367 ; CHECK-LABEL: insertelt_nxv8i16_idx:
368 ; CHECK:       # %bb.0:
369 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
370 ; CHECK-NEXT:    vmv.s.x v10, a0
371 ; CHECK-NEXT:    addi a0, a1, 1
372 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma
373 ; CHECK-NEXT:    vslideup.vx v8, v10, a1
374 ; CHECK-NEXT:    ret
375   %r = insertelement <vscale x 8 x i16> %v, i16 %elt, i32 %idx
376   ret <vscale x 8 x i16> %r
379 define <vscale x 16 x i16> @insertelt_nxv16i16_0(<vscale x 16 x i16> %v, i16 signext %elt) {
380 ; CHECK-LABEL: insertelt_nxv16i16_0:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma
383 ; CHECK-NEXT:    vmv.s.x v8, a0
384 ; CHECK-NEXT:    ret
385   %r = insertelement <vscale x 16 x i16> %v, i16 %elt, i32 0
386   ret <vscale x 16 x i16> %r
389 define <vscale x 16 x i16> @insertelt_nxv16i16_imm(<vscale x 16 x i16> %v, i16 signext %elt) {
390 ; CHECK-LABEL: insertelt_nxv16i16_imm:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
393 ; CHECK-NEXT:    vmv.s.x v12, a0
394 ; CHECK-NEXT:    vslideup.vi v8, v12, 3
395 ; CHECK-NEXT:    ret
396   %r = insertelement <vscale x 16 x i16> %v, i16 %elt, i32 3
397   ret <vscale x 16 x i16> %r
400 define <vscale x 16 x i16> @insertelt_nxv16i16_idx(<vscale x 16 x i16> %v, i16 signext %elt, i32 zeroext %idx) {
401 ; CHECK-LABEL: insertelt_nxv16i16_idx:
402 ; CHECK:       # %bb.0:
403 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
404 ; CHECK-NEXT:    vmv.s.x v12, a0
405 ; CHECK-NEXT:    addi a0, a1, 1
406 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, tu, ma
407 ; CHECK-NEXT:    vslideup.vx v8, v12, a1
408 ; CHECK-NEXT:    ret
409   %r = insertelement <vscale x 16 x i16> %v, i16 %elt, i32 %idx
410   ret <vscale x 16 x i16> %r
413 define <vscale x 32 x i16> @insertelt_nxv32i16_0(<vscale x 32 x i16> %v, i16 signext %elt) {
414 ; CHECK-LABEL: insertelt_nxv32i16_0:
415 ; CHECK:       # %bb.0:
416 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, tu, ma
417 ; CHECK-NEXT:    vmv.s.x v8, a0
418 ; CHECK-NEXT:    ret
419   %r = insertelement <vscale x 32 x i16> %v, i16 %elt, i32 0
420   ret <vscale x 32 x i16> %r
423 define <vscale x 32 x i16> @insertelt_nxv32i16_imm(<vscale x 32 x i16> %v, i16 signext %elt) {
424 ; CHECK-LABEL: insertelt_nxv32i16_imm:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
427 ; CHECK-NEXT:    vmv.s.x v16, a0
428 ; CHECK-NEXT:    vslideup.vi v8, v16, 3
429 ; CHECK-NEXT:    ret
430   %r = insertelement <vscale x 32 x i16> %v, i16 %elt, i32 3
431   ret <vscale x 32 x i16> %r
434 define <vscale x 32 x i16> @insertelt_nxv32i16_idx(<vscale x 32 x i16> %v, i16 signext %elt, i32 zeroext %idx) {
435 ; CHECK-LABEL: insertelt_nxv32i16_idx:
436 ; CHECK:       # %bb.0:
437 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
438 ; CHECK-NEXT:    vmv.s.x v16, a0
439 ; CHECK-NEXT:    addi a0, a1, 1
440 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, tu, ma
441 ; CHECK-NEXT:    vslideup.vx v8, v16, a1
442 ; CHECK-NEXT:    ret
443   %r = insertelement <vscale x 32 x i16> %v, i16 %elt, i32 %idx
444   ret <vscale x 32 x i16> %r
447 define <vscale x 1 x i32> @insertelt_nxv1i32_0(<vscale x 1 x i32> %v, i32 signext %elt) {
448 ; CHECK-LABEL: insertelt_nxv1i32_0:
449 ; CHECK:       # %bb.0:
450 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma
451 ; CHECK-NEXT:    vmv.s.x v8, a0
452 ; CHECK-NEXT:    ret
453   %r = insertelement <vscale x 1 x i32> %v, i32 %elt, i32 0
454   ret <vscale x 1 x i32> %r
457 define <vscale x 1 x i32> @insertelt_nxv1i32_imm(<vscale x 1 x i32> %v, i32 signext %elt) {
458 ; CHECK-LABEL: insertelt_nxv1i32_imm:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetivli zero, 4, e32, mf2, tu, ma
461 ; CHECK-NEXT:    vmv.s.x v9, a0
462 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
463 ; CHECK-NEXT:    ret
464   %r = insertelement <vscale x 1 x i32> %v, i32 %elt, i32 3
465   ret <vscale x 1 x i32> %r
468 define <vscale x 1 x i32> @insertelt_nxv1i32_idx(<vscale x 1 x i32> %v, i32 signext %elt, i32 zeroext %idx) {
469 ; CHECK-LABEL: insertelt_nxv1i32_idx:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    addi a2, a1, 1
472 ; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
473 ; CHECK-NEXT:    vmv.s.x v9, a0
474 ; CHECK-NEXT:    vsetvli zero, a2, e32, mf2, tu, ma
475 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
476 ; CHECK-NEXT:    ret
477   %r = insertelement <vscale x 1 x i32> %v, i32 %elt, i32 %idx
478   ret <vscale x 1 x i32> %r
481 define <vscale x 2 x i32> @insertelt_nxv2i32_0(<vscale x 2 x i32> %v, i32 signext %elt) {
482 ; CHECK-LABEL: insertelt_nxv2i32_0:
483 ; CHECK:       # %bb.0:
484 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma
485 ; CHECK-NEXT:    vmv.s.x v8, a0
486 ; CHECK-NEXT:    ret
487   %r = insertelement <vscale x 2 x i32> %v, i32 %elt, i32 0
488   ret <vscale x 2 x i32> %r
491 define <vscale x 2 x i32> @insertelt_nxv2i32_imm(<vscale x 2 x i32> %v, i32 signext %elt) {
492 ; CHECK-LABEL: insertelt_nxv2i32_imm:
493 ; CHECK:       # %bb.0:
494 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
495 ; CHECK-NEXT:    vmv.s.x v9, a0
496 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
497 ; CHECK-NEXT:    ret
498   %r = insertelement <vscale x 2 x i32> %v, i32 %elt, i32 3
499   ret <vscale x 2 x i32> %r
502 define <vscale x 2 x i32> @insertelt_nxv2i32_idx(<vscale x 2 x i32> %v, i32 signext %elt, i32 zeroext %idx) {
503 ; CHECK-LABEL: insertelt_nxv2i32_idx:
504 ; CHECK:       # %bb.0:
505 ; CHECK-NEXT:    addi a2, a1, 1
506 ; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
507 ; CHECK-NEXT:    vmv.s.x v9, a0
508 ; CHECK-NEXT:    vsetvli zero, a2, e32, m1, tu, ma
509 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
510 ; CHECK-NEXT:    ret
511   %r = insertelement <vscale x 2 x i32> %v, i32 %elt, i32 %idx
512   ret <vscale x 2 x i32> %r
515 define <vscale x 4 x i32> @insertelt_nxv4i32_0(<vscale x 4 x i32> %v, i32 signext %elt) {
516 ; CHECK-LABEL: insertelt_nxv4i32_0:
517 ; CHECK:       # %bb.0:
518 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma
519 ; CHECK-NEXT:    vmv.s.x v8, a0
520 ; CHECK-NEXT:    ret
521   %r = insertelement <vscale x 4 x i32> %v, i32 %elt, i32 0
522   ret <vscale x 4 x i32> %r
525 define <vscale x 4 x i32> @insertelt_nxv4i32_imm(<vscale x 4 x i32> %v, i32 signext %elt) {
526 ; CHECK-LABEL: insertelt_nxv4i32_imm:
527 ; CHECK:       # %bb.0:
528 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
529 ; CHECK-NEXT:    vmv.s.x v10, a0
530 ; CHECK-NEXT:    vslideup.vi v8, v10, 3
531 ; CHECK-NEXT:    ret
532   %r = insertelement <vscale x 4 x i32> %v, i32 %elt, i32 3
533   ret <vscale x 4 x i32> %r
536 define <vscale x 4 x i32> @insertelt_nxv4i32_idx(<vscale x 4 x i32> %v, i32 signext %elt, i32 zeroext %idx) {
537 ; CHECK-LABEL: insertelt_nxv4i32_idx:
538 ; CHECK:       # %bb.0:
539 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
540 ; CHECK-NEXT:    vmv.s.x v10, a0
541 ; CHECK-NEXT:    addi a0, a1, 1
542 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma
543 ; CHECK-NEXT:    vslideup.vx v8, v10, a1
544 ; CHECK-NEXT:    ret
545   %r = insertelement <vscale x 4 x i32> %v, i32 %elt, i32 %idx
546   ret <vscale x 4 x i32> %r
549 define <vscale x 8 x i32> @insertelt_nxv8i32_0(<vscale x 8 x i32> %v, i32 signext %elt) {
550 ; CHECK-LABEL: insertelt_nxv8i32_0:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma
553 ; CHECK-NEXT:    vmv.s.x v8, a0
554 ; CHECK-NEXT:    ret
555   %r = insertelement <vscale x 8 x i32> %v, i32 %elt, i32 0
556   ret <vscale x 8 x i32> %r
559 define <vscale x 8 x i32> @insertelt_nxv8i32_imm(<vscale x 8 x i32> %v, i32 signext %elt) {
560 ; CHECK-LABEL: insertelt_nxv8i32_imm:
561 ; CHECK:       # %bb.0:
562 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
563 ; CHECK-NEXT:    vmv.s.x v12, a0
564 ; CHECK-NEXT:    vslideup.vi v8, v12, 3
565 ; CHECK-NEXT:    ret
566   %r = insertelement <vscale x 8 x i32> %v, i32 %elt, i32 3
567   ret <vscale x 8 x i32> %r
570 define <vscale x 8 x i32> @insertelt_nxv8i32_idx(<vscale x 8 x i32> %v, i32 signext %elt, i32 zeroext %idx) {
571 ; CHECK-LABEL: insertelt_nxv8i32_idx:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
574 ; CHECK-NEXT:    vmv.s.x v12, a0
575 ; CHECK-NEXT:    addi a0, a1, 1
576 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma
577 ; CHECK-NEXT:    vslideup.vx v8, v12, a1
578 ; CHECK-NEXT:    ret
579   %r = insertelement <vscale x 8 x i32> %v, i32 %elt, i32 %idx
580   ret <vscale x 8 x i32> %r
583 define <vscale x 16 x i32> @insertelt_nxv16i32_0(<vscale x 16 x i32> %v, i32 signext %elt) {
584 ; CHECK-LABEL: insertelt_nxv16i32_0:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, tu, ma
587 ; CHECK-NEXT:    vmv.s.x v8, a0
588 ; CHECK-NEXT:    ret
589   %r = insertelement <vscale x 16 x i32> %v, i32 %elt, i32 0
590   ret <vscale x 16 x i32> %r
593 define <vscale x 16 x i32> @insertelt_nxv16i32_imm(<vscale x 16 x i32> %v, i32 signext %elt) {
594 ; CHECK-LABEL: insertelt_nxv16i32_imm:
595 ; CHECK:       # %bb.0:
596 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
597 ; CHECK-NEXT:    vmv.s.x v16, a0
598 ; CHECK-NEXT:    vslideup.vi v8, v16, 3
599 ; CHECK-NEXT:    ret
600   %r = insertelement <vscale x 16 x i32> %v, i32 %elt, i32 3
601   ret <vscale x 16 x i32> %r
604 define <vscale x 16 x i32> @insertelt_nxv16i32_idx(<vscale x 16 x i32> %v, i32 signext %elt, i32 zeroext %idx) {
605 ; CHECK-LABEL: insertelt_nxv16i32_idx:
606 ; CHECK:       # %bb.0:
607 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
608 ; CHECK-NEXT:    vmv.s.x v16, a0
609 ; CHECK-NEXT:    addi a0, a1, 1
610 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, tu, ma
611 ; CHECK-NEXT:    vslideup.vx v8, v16, a1
612 ; CHECK-NEXT:    ret
613   %r = insertelement <vscale x 16 x i32> %v, i32 %elt, i32 %idx
614   ret <vscale x 16 x i32> %r
617 define <vscale x 1 x i64> @insertelt_nxv1i64_0(<vscale x 1 x i64> %v, i64 %elt) {
618 ; CHECK-LABEL: insertelt_nxv1i64_0:
619 ; CHECK:       # %bb.0:
620 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, tu, ma
621 ; CHECK-NEXT:    vmv.s.x v8, a0
622 ; CHECK-NEXT:    ret
623   %r = insertelement <vscale x 1 x i64> %v, i64 %elt, i32 0
624   ret <vscale x 1 x i64> %r
627 define <vscale x 1 x i64> @insertelt_nxv1i64_imm(<vscale x 1 x i64> %v, i64 %elt) {
628 ; CHECK-LABEL: insertelt_nxv1i64_imm:
629 ; CHECK:       # %bb.0:
630 ; CHECK-NEXT:    vsetivli zero, 4, e64, m1, tu, ma
631 ; CHECK-NEXT:    vmv.s.x v9, a0
632 ; CHECK-NEXT:    vslideup.vi v8, v9, 3
633 ; CHECK-NEXT:    ret
634   %r = insertelement <vscale x 1 x i64> %v, i64 %elt, i32 3
635   ret <vscale x 1 x i64> %r
638 define <vscale x 1 x i64> @insertelt_nxv1i64_idx(<vscale x 1 x i64> %v, i64 %elt, i32 %idx) {
639 ; CHECK-LABEL: insertelt_nxv1i64_idx:
640 ; CHECK:       # %bb.0:
641 ; CHECK-NEXT:    vsetvli a2, zero, e64, m1, ta, ma
642 ; CHECK-NEXT:    vmv.s.x v9, a0
643 ; CHECK-NEXT:    slli a1, a1, 32
644 ; CHECK-NEXT:    srli a1, a1, 32
645 ; CHECK-NEXT:    addi a0, a1, 1
646 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma
647 ; CHECK-NEXT:    vslideup.vx v8, v9, a1
648 ; CHECK-NEXT:    ret
649   %r = insertelement <vscale x 1 x i64> %v, i64 %elt, i32 %idx
650   ret <vscale x 1 x i64> %r
653 define <vscale x 2 x i64> @insertelt_nxv2i64_0(<vscale x 2 x i64> %v, i64 %elt) {
654 ; CHECK-LABEL: insertelt_nxv2i64_0:
655 ; CHECK:       # %bb.0:
656 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, tu, ma
657 ; CHECK-NEXT:    vmv.s.x v8, a0
658 ; CHECK-NEXT:    ret
659   %r = insertelement <vscale x 2 x i64> %v, i64 %elt, i32 0
660   ret <vscale x 2 x i64> %r
663 define <vscale x 2 x i64> @insertelt_nxv2i64_imm(<vscale x 2 x i64> %v, i64 %elt) {
664 ; CHECK-LABEL: insertelt_nxv2i64_imm:
665 ; CHECK:       # %bb.0:
666 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma
667 ; CHECK-NEXT:    vmv.s.x v10, a0
668 ; CHECK-NEXT:    vslideup.vi v8, v10, 3
669 ; CHECK-NEXT:    ret
670   %r = insertelement <vscale x 2 x i64> %v, i64 %elt, i32 3
671   ret <vscale x 2 x i64> %r
674 define <vscale x 2 x i64> @insertelt_nxv2i64_idx(<vscale x 2 x i64> %v, i64 %elt, i32 %idx) {
675 ; CHECK-LABEL: insertelt_nxv2i64_idx:
676 ; CHECK:       # %bb.0:
677 ; CHECK-NEXT:    vsetvli a2, zero, e64, m1, ta, ma
678 ; CHECK-NEXT:    vmv.s.x v10, a0
679 ; CHECK-NEXT:    slli a1, a1, 32
680 ; CHECK-NEXT:    srli a1, a1, 32
681 ; CHECK-NEXT:    addi a0, a1, 1
682 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma
683 ; CHECK-NEXT:    vslideup.vx v8, v10, a1
684 ; CHECK-NEXT:    ret
685   %r = insertelement <vscale x 2 x i64> %v, i64 %elt, i32 %idx
686   ret <vscale x 2 x i64> %r
689 define <vscale x 4 x i64> @insertelt_nxv4i64_0(<vscale x 4 x i64> %v, i64 %elt) {
690 ; CHECK-LABEL: insertelt_nxv4i64_0:
691 ; CHECK:       # %bb.0:
692 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, tu, ma
693 ; CHECK-NEXT:    vmv.s.x v8, a0
694 ; CHECK-NEXT:    ret
695   %r = insertelement <vscale x 4 x i64> %v, i64 %elt, i32 0
696   ret <vscale x 4 x i64> %r
699 define <vscale x 4 x i64> @insertelt_nxv4i64_imm(<vscale x 4 x i64> %v, i64 %elt) {
700 ; CHECK-LABEL: insertelt_nxv4i64_imm:
701 ; CHECK:       # %bb.0:
702 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma
703 ; CHECK-NEXT:    vmv.s.x v12, a0
704 ; CHECK-NEXT:    vslideup.vi v8, v12, 3
705 ; CHECK-NEXT:    ret
706   %r = insertelement <vscale x 4 x i64> %v, i64 %elt, i32 3
707   ret <vscale x 4 x i64> %r
710 define <vscale x 4 x i64> @insertelt_nxv4i64_idx(<vscale x 4 x i64> %v, i64 %elt, i32 %idx) {
711 ; CHECK-LABEL: insertelt_nxv4i64_idx:
712 ; CHECK:       # %bb.0:
713 ; CHECK-NEXT:    vsetvli a2, zero, e64, m1, ta, ma
714 ; CHECK-NEXT:    vmv.s.x v12, a0
715 ; CHECK-NEXT:    slli a1, a1, 32
716 ; CHECK-NEXT:    srli a1, a1, 32
717 ; CHECK-NEXT:    addi a0, a1, 1
718 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma
719 ; CHECK-NEXT:    vslideup.vx v8, v12, a1
720 ; CHECK-NEXT:    ret
721   %r = insertelement <vscale x 4 x i64> %v, i64 %elt, i32 %idx
722   ret <vscale x 4 x i64> %r
725 define <vscale x 8 x i64> @insertelt_nxv8i64_0(<vscale x 8 x i64> %v, i64 %elt) {
726 ; CHECK-LABEL: insertelt_nxv8i64_0:
727 ; CHECK:       # %bb.0:
728 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, tu, ma
729 ; CHECK-NEXT:    vmv.s.x v8, a0
730 ; CHECK-NEXT:    ret
731   %r = insertelement <vscale x 8 x i64> %v, i64 %elt, i32 0
732   ret <vscale x 8 x i64> %r
735 define <vscale x 8 x i64> @insertelt_nxv8i64_imm(<vscale x 8 x i64> %v, i64 %elt) {
736 ; CHECK-LABEL: insertelt_nxv8i64_imm:
737 ; CHECK:       # %bb.0:
738 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma
739 ; CHECK-NEXT:    vmv.s.x v16, a0
740 ; CHECK-NEXT:    vslideup.vi v8, v16, 3
741 ; CHECK-NEXT:    ret
742   %r = insertelement <vscale x 8 x i64> %v, i64 %elt, i32 3
743   ret <vscale x 8 x i64> %r
746 define <vscale x 8 x i64> @insertelt_nxv8i64_idx(<vscale x 8 x i64> %v, i64 %elt, i32 %idx) {
747 ; CHECK-LABEL: insertelt_nxv8i64_idx:
748 ; CHECK:       # %bb.0:
749 ; CHECK-NEXT:    vsetvli a2, zero, e64, m1, ta, ma
750 ; CHECK-NEXT:    vmv.s.x v16, a0
751 ; CHECK-NEXT:    slli a1, a1, 32
752 ; CHECK-NEXT:    srli a1, a1, 32
753 ; CHECK-NEXT:    addi a0, a1, 1
754 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma
755 ; CHECK-NEXT:    vslideup.vx v8, v16, a1
756 ; CHECK-NEXT:    ret
757   %r = insertelement <vscale x 8 x i64> %v, i64 %elt, i32 %idx
758   ret <vscale x 8 x i64> %r