1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
4 ; Test with ELEN limited
5 ; RUN: llc -mtriple=riscv32 -mattr=+f,+zve32f,+zvl128b -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVE32F
6 ; RUN: llc -mtriple=riscv64 -mattr=+f,+zve32f,+zvl128b -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVE32F
8 define <1 x i1> @buildvec_mask_nonconst_v1i1(i1 %x) {
9 ; CHECK-LABEL: buildvec_mask_nonconst_v1i1:
11 ; CHECK-NEXT: andi a0, a0, 1
12 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
13 ; CHECK-NEXT: vmv.s.x v8, a0
14 ; CHECK-NEXT: vmsne.vi v0, v8, 0
17 ; ZVE32F-LABEL: buildvec_mask_nonconst_v1i1:
19 ; ZVE32F-NEXT: andi a0, a0, 1
20 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
21 ; ZVE32F-NEXT: vmv.s.x v8, a0
22 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
24 %1 = insertelement <1 x i1> poison, i1 %x, i32 0
28 define <1 x i1> @buildvec_mask_optsize_nonconst_v1i1(i1 %x) optsize {
29 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v1i1:
31 ; CHECK-NEXT: andi a0, a0, 1
32 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
33 ; CHECK-NEXT: vmv.s.x v8, a0
34 ; CHECK-NEXT: vmsne.vi v0, v8, 0
37 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v1i1:
39 ; ZVE32F-NEXT: andi a0, a0, 1
40 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
41 ; ZVE32F-NEXT: vmv.s.x v8, a0
42 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
44 %1 = insertelement <1 x i1> poison, i1 %x, i32 0
48 define <2 x i1> @buildvec_mask_nonconst_v2i1(i1 %x, i1 %y) {
49 ; CHECK-LABEL: buildvec_mask_nonconst_v2i1:
51 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
52 ; CHECK-NEXT: vmv.v.x v8, a0
53 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
54 ; CHECK-NEXT: vand.vi v8, v8, 1
55 ; CHECK-NEXT: vmsne.vi v0, v8, 0
58 ; ZVE32F-LABEL: buildvec_mask_nonconst_v2i1:
60 ; ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
61 ; ZVE32F-NEXT: vmv.v.x v8, a0
62 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
63 ; ZVE32F-NEXT: vand.vi v8, v8, 1
64 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
66 %1 = insertelement <2 x i1> poison, i1 %x, i32 0
67 %2 = insertelement <2 x i1> %1, i1 %y, i32 1
71 ; FIXME: optsize isn't smaller than the code above
72 define <2 x i1> @buildvec_mask_optsize_nonconst_v2i1(i1 %x, i1 %y) optsize {
73 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v2i1:
75 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
76 ; CHECK-NEXT: vmv.v.x v8, a0
77 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
78 ; CHECK-NEXT: vand.vi v8, v8, 1
79 ; CHECK-NEXT: vmsne.vi v0, v8, 0
82 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v2i1:
84 ; ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
85 ; ZVE32F-NEXT: vmv.v.x v8, a0
86 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
87 ; ZVE32F-NEXT: vand.vi v8, v8, 1
88 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
90 %1 = insertelement <2 x i1> poison, i1 %x, i32 0
91 %2 = insertelement <2 x i1> %1, i1 %y, i32 1
95 define <3 x i1> @buildvec_mask_v1i1() {
96 ; CHECK-LABEL: buildvec_mask_v1i1:
98 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
99 ; CHECK-NEXT: vmv.v.i v0, 2
102 ; ZVE32F-LABEL: buildvec_mask_v1i1:
104 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
105 ; ZVE32F-NEXT: vmv.v.i v0, 2
107 ret <3 x i1> <i1 0, i1 1, i1 0>
110 define <3 x i1> @buildvec_mask_optsize_v1i1() optsize {
111 ; CHECK-LABEL: buildvec_mask_optsize_v1i1:
113 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
114 ; CHECK-NEXT: vmv.v.i v0, 2
117 ; ZVE32F-LABEL: buildvec_mask_optsize_v1i1:
119 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
120 ; ZVE32F-NEXT: vmv.v.i v0, 2
122 ret <3 x i1> <i1 0, i1 1, i1 0>
125 define <4 x i1> @buildvec_mask_v4i1() {
126 ; CHECK-LABEL: buildvec_mask_v4i1:
128 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
129 ; CHECK-NEXT: vmv.v.i v0, 6
132 ; ZVE32F-LABEL: buildvec_mask_v4i1:
134 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
135 ; ZVE32F-NEXT: vmv.v.i v0, 6
137 ret <4 x i1> <i1 0, i1 1, i1 1, i1 0>
140 define <4 x i1> @buildvec_mask_nonconst_v4i1(i1 %x, i1 %y) {
141 ; CHECK-LABEL: buildvec_mask_nonconst_v4i1:
143 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
144 ; CHECK-NEXT: vmv.v.i v0, 3
145 ; CHECK-NEXT: vmv.v.x v8, a1
146 ; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0
147 ; CHECK-NEXT: vand.vi v8, v8, 1
148 ; CHECK-NEXT: vmsne.vi v0, v8, 0
151 ; ZVE32F-LABEL: buildvec_mask_nonconst_v4i1:
153 ; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
154 ; ZVE32F-NEXT: vmv.v.i v0, 3
155 ; ZVE32F-NEXT: vmv.v.x v8, a1
156 ; ZVE32F-NEXT: vmerge.vxm v8, v8, a0, v0
157 ; ZVE32F-NEXT: vand.vi v8, v8, 1
158 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
160 %1 = insertelement <4 x i1> poison, i1 %x, i32 0
161 %2 = insertelement <4 x i1> %1, i1 %x, i32 1
162 %3 = insertelement <4 x i1> %2, i1 %y, i32 2
163 %4 = insertelement <4 x i1> %3, i1 %y, i32 3
167 ; FIXME: optsize isn't smaller than the code above
168 define <4 x i1> @buildvec_mask_optsize_nonconst_v4i1(i1 %x, i1 %y) optsize {
169 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v4i1:
171 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
172 ; CHECK-NEXT: vmv.v.x v8, a0
173 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
174 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
175 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
176 ; CHECK-NEXT: vand.vi v8, v8, 1
177 ; CHECK-NEXT: vmsne.vi v0, v8, 0
180 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v4i1:
182 ; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
183 ; ZVE32F-NEXT: vmv.v.x v8, a0
184 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
185 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
186 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
187 ; ZVE32F-NEXT: vand.vi v8, v8, 1
188 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
190 %1 = insertelement <4 x i1> poison, i1 %x, i32 0
191 %2 = insertelement <4 x i1> %1, i1 %x, i32 1
192 %3 = insertelement <4 x i1> %2, i1 %y, i32 2
193 %4 = insertelement <4 x i1> %3, i1 %y, i32 3
197 define <4 x i1> @buildvec_mask_nonconst_v4i1_2(i1 %x, i1 %y) {
198 ; CHECK-LABEL: buildvec_mask_nonconst_v4i1_2:
200 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
201 ; CHECK-NEXT: vmv.v.i v8, 0
202 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
203 ; CHECK-NEXT: li a0, 1
204 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
205 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
206 ; CHECK-NEXT: vand.vi v8, v8, 1
207 ; CHECK-NEXT: vmsne.vi v0, v8, 0
210 ; ZVE32F-LABEL: buildvec_mask_nonconst_v4i1_2:
212 ; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
213 ; ZVE32F-NEXT: vmv.v.i v8, 0
214 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
215 ; ZVE32F-NEXT: li a0, 1
216 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
217 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
218 ; ZVE32F-NEXT: vand.vi v8, v8, 1
219 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
221 %1 = insertelement <4 x i1> poison, i1 0, i32 0
222 %2 = insertelement <4 x i1> %1, i1 %x, i32 1
223 %3 = insertelement <4 x i1> %2, i1 1, i32 2
224 %4 = insertelement <4 x i1> %3, i1 %y, i32 3
228 define <8 x i1> @buildvec_mask_v8i1() {
229 ; CHECK-LABEL: buildvec_mask_v8i1:
231 ; CHECK-NEXT: li a0, 182
232 ; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
233 ; CHECK-NEXT: vmv.s.x v0, a0
236 ; ZVE32F-LABEL: buildvec_mask_v8i1:
238 ; ZVE32F-NEXT: li a0, 182
239 ; ZVE32F-NEXT: vsetivli zero, 1, e8, m1, ta, ma
240 ; ZVE32F-NEXT: vmv.s.x v0, a0
242 ret <8 x i1> <i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1>
245 define <8 x i1> @buildvec_mask_nonconst_v8i1(i1 %x, i1 %y) {
246 ; CHECK-LABEL: buildvec_mask_nonconst_v8i1:
248 ; CHECK-NEXT: li a2, 19
249 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
250 ; CHECK-NEXT: vmv.s.x v0, a2
251 ; CHECK-NEXT: vmv.v.x v8, a1
252 ; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0
253 ; CHECK-NEXT: vand.vi v8, v8, 1
254 ; CHECK-NEXT: vmsne.vi v0, v8, 0
257 ; ZVE32F-LABEL: buildvec_mask_nonconst_v8i1:
259 ; ZVE32F-NEXT: li a2, 19
260 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
261 ; ZVE32F-NEXT: vmv.s.x v0, a2
262 ; ZVE32F-NEXT: vmv.v.x v8, a1
263 ; ZVE32F-NEXT: vmerge.vxm v8, v8, a0, v0
264 ; ZVE32F-NEXT: vand.vi v8, v8, 1
265 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
267 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
268 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
269 %3 = insertelement <8 x i1> %2, i1 %y, i32 2
270 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
271 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
272 %6 = insertelement <8 x i1> %5, i1 %y, i32 5
273 %7 = insertelement <8 x i1> %6, i1 %y, i32 6
274 %8 = insertelement <8 x i1> %7, i1 %y, i32 7
278 define <8 x i1> @buildvec_mask_nonconst_v8i1_2(i1 %x, i1 %y, i1 %z, i1 %w) {
279 ; CHECK-LABEL: buildvec_mask_nonconst_v8i1_2:
281 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
282 ; CHECK-NEXT: vmv.v.x v8, a0
283 ; CHECK-NEXT: vslide1down.vx v9, v8, a0
284 ; CHECK-NEXT: li a0, 1
285 ; CHECK-NEXT: vslide1down.vx v9, v9, a0
286 ; CHECK-NEXT: vslide1down.vx v9, v9, a1
287 ; CHECK-NEXT: vslide1down.vx v8, v8, a3
288 ; CHECK-NEXT: vslide1down.vx v8, v8, zero
289 ; CHECK-NEXT: vmv.v.i v0, 15
290 ; CHECK-NEXT: vslide1down.vx v8, v8, a2
291 ; CHECK-NEXT: vslidedown.vi v8, v9, 4, v0.t
292 ; CHECK-NEXT: vand.vi v8, v8, 1
293 ; CHECK-NEXT: vmsne.vi v0, v8, 0
296 ; ZVE32F-LABEL: buildvec_mask_nonconst_v8i1_2:
298 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
299 ; ZVE32F-NEXT: vmv.v.x v8, a0
300 ; ZVE32F-NEXT: vslide1down.vx v9, v8, a0
301 ; ZVE32F-NEXT: li a0, 1
302 ; ZVE32F-NEXT: vslide1down.vx v9, v9, a0
303 ; ZVE32F-NEXT: vslide1down.vx v9, v9, a1
304 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a3
305 ; ZVE32F-NEXT: vslide1down.vx v8, v8, zero
306 ; ZVE32F-NEXT: vmv.v.i v0, 15
307 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a2
308 ; ZVE32F-NEXT: vslidedown.vi v8, v9, 4, v0.t
309 ; ZVE32F-NEXT: vand.vi v8, v8, 1
310 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
312 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
313 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
314 %3 = insertelement <8 x i1> %2, i1 1, i32 2
315 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
316 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
317 %6 = insertelement <8 x i1> %5, i1 %w, i32 5
318 %7 = insertelement <8 x i1> %6, i1 0, i32 6
319 %8 = insertelement <8 x i1> %7, i1 %z, i32 7
323 define <8 x i1> @buildvec_mask_optsize_nonconst_v8i1_2(i1 %x, i1 %y, i1 %z, i1 %w) optsize {
324 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v8i1_2:
326 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
327 ; CHECK-NEXT: vmv.v.x v8, a0
328 ; CHECK-NEXT: vslide1down.vx v9, v8, a0
329 ; CHECK-NEXT: li a0, 1
330 ; CHECK-NEXT: vslide1down.vx v9, v9, a0
331 ; CHECK-NEXT: vslide1down.vx v9, v9, a1
332 ; CHECK-NEXT: vslide1down.vx v8, v8, a3
333 ; CHECK-NEXT: vslide1down.vx v8, v8, zero
334 ; CHECK-NEXT: vmv.v.i v0, 15
335 ; CHECK-NEXT: vslide1down.vx v8, v8, a2
336 ; CHECK-NEXT: vslidedown.vi v8, v9, 4, v0.t
337 ; CHECK-NEXT: vand.vi v8, v8, 1
338 ; CHECK-NEXT: vmsne.vi v0, v8, 0
341 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v8i1_2:
343 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
344 ; ZVE32F-NEXT: vmv.v.x v8, a0
345 ; ZVE32F-NEXT: vslide1down.vx v9, v8, a0
346 ; ZVE32F-NEXT: li a0, 1
347 ; ZVE32F-NEXT: vslide1down.vx v9, v9, a0
348 ; ZVE32F-NEXT: vslide1down.vx v9, v9, a1
349 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a3
350 ; ZVE32F-NEXT: vslide1down.vx v8, v8, zero
351 ; ZVE32F-NEXT: vmv.v.i v0, 15
352 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a2
353 ; ZVE32F-NEXT: vslidedown.vi v8, v9, 4, v0.t
354 ; ZVE32F-NEXT: vand.vi v8, v8, 1
355 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
357 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
358 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
359 %3 = insertelement <8 x i1> %2, i1 1, i32 2
360 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
361 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
362 %6 = insertelement <8 x i1> %5, i1 %w, i32 5
363 %7 = insertelement <8 x i1> %6, i1 0, i32 6
364 %8 = insertelement <8 x i1> %7, i1 %z, i32 7
368 define <8 x i1> @buildvec_mask_optsize_nonconst_v8i1(i1 %x, i1 %y) optsize {
369 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v8i1:
371 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
372 ; CHECK-NEXT: vmv.v.x v8, a0
373 ; CHECK-NEXT: vslide1down.vx v9, v8, a0
374 ; CHECK-NEXT: vslide1down.vx v9, v9, a1
375 ; CHECK-NEXT: vslide1down.vx v9, v9, a1
376 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
377 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
378 ; CHECK-NEXT: vmv.v.i v0, 15
379 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
380 ; CHECK-NEXT: vslidedown.vi v8, v9, 4, v0.t
381 ; CHECK-NEXT: vand.vi v8, v8, 1
382 ; CHECK-NEXT: vmsne.vi v0, v8, 0
385 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v8i1:
387 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
388 ; ZVE32F-NEXT: vmv.v.x v8, a0
389 ; ZVE32F-NEXT: vslide1down.vx v9, v8, a0
390 ; ZVE32F-NEXT: vslide1down.vx v9, v9, a1
391 ; ZVE32F-NEXT: vslide1down.vx v9, v9, a1
392 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
393 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
394 ; ZVE32F-NEXT: vmv.v.i v0, 15
395 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
396 ; ZVE32F-NEXT: vslidedown.vi v8, v9, 4, v0.t
397 ; ZVE32F-NEXT: vand.vi v8, v8, 1
398 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
400 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
401 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
402 %3 = insertelement <8 x i1> %2, i1 %y, i32 2
403 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
404 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
405 %6 = insertelement <8 x i1> %5, i1 %y, i32 5
406 %7 = insertelement <8 x i1> %6, i1 %y, i32 6
407 %8 = insertelement <8 x i1> %7, i1 %y, i32 7
411 define <10 x i1> @buildvec_mask_v10i1() {
412 ; CHECK-LABEL: buildvec_mask_v10i1:
414 ; CHECK-NEXT: li a0, 949
415 ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
416 ; CHECK-NEXT: vmv.s.x v0, a0
419 ; ZVE32F-LABEL: buildvec_mask_v10i1:
421 ; ZVE32F-NEXT: li a0, 949
422 ; ZVE32F-NEXT: vsetivli zero, 1, e16, m1, ta, ma
423 ; ZVE32F-NEXT: vmv.s.x v0, a0
425 ret <10 x i1> <i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1>
428 define <16 x i1> @buildvec_mask_v16i1() {
429 ; CHECK-LABEL: buildvec_mask_v16i1:
431 ; CHECK-NEXT: lui a0, 11
432 ; CHECK-NEXT: addi a0, a0, 1718
433 ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
434 ; CHECK-NEXT: vmv.s.x v0, a0
437 ; ZVE32F-LABEL: buildvec_mask_v16i1:
439 ; ZVE32F-NEXT: lui a0, 11
440 ; ZVE32F-NEXT: addi a0, a0, 1718
441 ; ZVE32F-NEXT: vsetivli zero, 1, e16, m1, ta, ma
442 ; ZVE32F-NEXT: vmv.s.x v0, a0
444 ret <16 x i1> <i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1>
447 define <16 x i1> @buildvec_mask_v16i1_undefs() {
448 ; CHECK-LABEL: buildvec_mask_v16i1_undefs:
450 ; CHECK-NEXT: li a0, 1722
451 ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
452 ; CHECK-NEXT: vmv.s.x v0, a0
455 ; ZVE32F-LABEL: buildvec_mask_v16i1_undefs:
457 ; ZVE32F-NEXT: li a0, 1722
458 ; ZVE32F-NEXT: vsetivli zero, 1, e16, m1, ta, ma
459 ; ZVE32F-NEXT: vmv.s.x v0, a0
461 ret <16 x i1> <i1 undef, i1 1, i1 undef, i1 1, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 undef, i1 undef, i1 undef, i1 undef, i1 undef>
464 define <32 x i1> @buildvec_mask_v32i1() {
465 ; CHECK-LABEL: buildvec_mask_v32i1:
467 ; CHECK-NEXT: lui a0, 748384
468 ; CHECK-NEXT: addi a0, a0, 1776
469 ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma
470 ; CHECK-NEXT: vmv.s.x v0, a0
473 ; ZVE32F-LABEL: buildvec_mask_v32i1:
475 ; ZVE32F-NEXT: lui a0, 748384
476 ; ZVE32F-NEXT: addi a0, a0, 1776
477 ; ZVE32F-NEXT: vsetivli zero, 1, e32, m1, ta, ma
478 ; ZVE32F-NEXT: vmv.s.x v0, a0
480 ret <32 x i1> <i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1>
483 define <64 x i1> @buildvec_mask_v64i1() {
484 ; RV32-LABEL: buildvec_mask_v64i1:
486 ; RV32-NEXT: lui a0, 748388
487 ; RV32-NEXT: addi a0, a0, -1793
488 ; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
489 ; RV32-NEXT: vmv.v.x v0, a0
490 ; RV32-NEXT: lui a0, 748384
491 ; RV32-NEXT: addi a0, a0, 1776
492 ; RV32-NEXT: vsetvli zero, zero, e32, mf2, tu, ma
493 ; RV32-NEXT: vmv.s.x v0, a0
496 ; RV64-LABEL: buildvec_mask_v64i1:
498 ; RV64-NEXT: lui a0, %hi(.LCPI19_0)
499 ; RV64-NEXT: addi a0, a0, %lo(.LCPI19_0)
500 ; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma
501 ; RV64-NEXT: vle64.v v0, (a0)
504 ; ZVE32F-LABEL: buildvec_mask_v64i1:
506 ; ZVE32F-NEXT: lui a0, 748388
507 ; ZVE32F-NEXT: addi a0, a0, -1793
508 ; ZVE32F-NEXT: vsetivli zero, 2, e32, m1, ta, ma
509 ; ZVE32F-NEXT: vmv.v.x v0, a0
510 ; ZVE32F-NEXT: lui a0, 748384
511 ; ZVE32F-NEXT: addi a0, a0, 1776
512 ; ZVE32F-NEXT: vsetvli zero, zero, e32, m1, tu, ma
513 ; ZVE32F-NEXT: vmv.s.x v0, a0
515 ret <64 x i1> <i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1>
518 define <128 x i1> @buildvec_mask_v128i1() {
519 ; RV32-LABEL: buildvec_mask_v128i1:
521 ; RV32-NEXT: lui a0, %hi(.LCPI20_0)
522 ; RV32-NEXT: addi a0, a0, %lo(.LCPI20_0)
523 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
524 ; RV32-NEXT: vle32.v v0, (a0)
527 ; RV64-LABEL: buildvec_mask_v128i1:
529 ; RV64-NEXT: lui a0, %hi(.LCPI20_0)
530 ; RV64-NEXT: ld a0, %lo(.LCPI20_0)(a0)
531 ; RV64-NEXT: lui a1, %hi(.LCPI20_1)
532 ; RV64-NEXT: ld a1, %lo(.LCPI20_1)(a1)
533 ; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma
534 ; RV64-NEXT: vmv.v.x v0, a0
535 ; RV64-NEXT: vsetvli zero, zero, e64, m1, tu, ma
536 ; RV64-NEXT: vmv.s.x v0, a1
539 ; ZVE32F-LABEL: buildvec_mask_v128i1:
541 ; ZVE32F-NEXT: lui a0, %hi(.LCPI20_0)
542 ; ZVE32F-NEXT: addi a0, a0, %lo(.LCPI20_0)
543 ; ZVE32F-NEXT: vsetivli zero, 4, e32, m1, ta, ma
544 ; ZVE32F-NEXT: vle32.v v0, (a0)
546 ret <128 x i1> <i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 0, i1 1, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1>
549 define <128 x i1> @buildvec_mask_optsize_v128i1() optsize {
550 ; CHECK-LABEL: buildvec_mask_optsize_v128i1:
552 ; CHECK-NEXT: li a0, 128
553 ; CHECK-NEXT: lui a1, %hi(.LCPI21_0)
554 ; CHECK-NEXT: addi a1, a1, %lo(.LCPI21_0)
555 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
556 ; CHECK-NEXT: vlm.v v0, (a1)
559 ; ZVE32F-LABEL: buildvec_mask_optsize_v128i1:
561 ; ZVE32F-NEXT: li a0, 128
562 ; ZVE32F-NEXT: lui a1, %hi(.LCPI21_0)
563 ; ZVE32F-NEXT: addi a1, a1, %lo(.LCPI21_0)
564 ; ZVE32F-NEXT: vsetvli zero, a0, e8, m8, ta, ma
565 ; ZVE32F-NEXT: vlm.v v0, (a1)
567 ret <128 x i1> <i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 1, i1 0, i1 1, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1>