1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,RV32-LMULMAX1
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,RV64-LMULMAX1
4 ; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,RV32-LMULMAX2
5 ; RUN: llc -mtriple=riscv64 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,RV64-LMULMAX2
6 ; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=4 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,RV32-LMULMAX4
7 ; RUN: llc -mtriple=riscv64 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=4 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,RV64-LMULMAX4
8 ; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=8 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,RV32-LMULMAX8
9 ; RUN: llc -mtriple=riscv64 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=8 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,RV64-LMULMAX8
10 ; Test with ELEN limited
11 ; RUN: llc -mtriple=riscv32 -mattr=+f,+zve32f,+zvl128b -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVE32F
12 ; RUN: llc -mtriple=riscv64 -mattr=+f,+zve32f,+zvl128b -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZVE32F
14 define <1 x i1> @buildvec_mask_nonconst_v1i1(i1 %x) {
15 ; CHECK-LABEL: buildvec_mask_nonconst_v1i1:
17 ; CHECK-NEXT: andi a0, a0, 1
18 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
19 ; CHECK-NEXT: vmv.s.x v8, a0
20 ; CHECK-NEXT: vmsne.vi v0, v8, 0
23 ; ZVE32F-LABEL: buildvec_mask_nonconst_v1i1:
25 ; ZVE32F-NEXT: andi a0, a0, 1
26 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
27 ; ZVE32F-NEXT: vmv.s.x v8, a0
28 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
30 %1 = insertelement <1 x i1> poison, i1 %x, i32 0
34 define <1 x i1> @buildvec_mask_optsize_nonconst_v1i1(i1 %x) optsize {
35 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v1i1:
37 ; CHECK-NEXT: andi a0, a0, 1
38 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
39 ; CHECK-NEXT: vmv.s.x v8, a0
40 ; CHECK-NEXT: vmsne.vi v0, v8, 0
43 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v1i1:
45 ; ZVE32F-NEXT: andi a0, a0, 1
46 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
47 ; ZVE32F-NEXT: vmv.s.x v8, a0
48 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
50 %1 = insertelement <1 x i1> poison, i1 %x, i32 0
54 define <2 x i1> @buildvec_mask_nonconst_v2i1(i1 %x, i1 %y) {
55 ; CHECK-LABEL: buildvec_mask_nonconst_v2i1:
57 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
58 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
59 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
60 ; CHECK-NEXT: vand.vi v8, v8, 1
61 ; CHECK-NEXT: vmsne.vi v0, v8, 0
64 ; ZVE32F-LABEL: buildvec_mask_nonconst_v2i1:
66 ; ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
67 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
68 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
69 ; ZVE32F-NEXT: vand.vi v8, v8, 1
70 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
72 %1 = insertelement <2 x i1> poison, i1 %x, i32 0
73 %2 = insertelement <2 x i1> %1, i1 %y, i32 1
77 ; FIXME: optsize isn't smaller than the code above
78 define <2 x i1> @buildvec_mask_optsize_nonconst_v2i1(i1 %x, i1 %y) optsize {
79 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v2i1:
81 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
82 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
83 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
84 ; CHECK-NEXT: vand.vi v8, v8, 1
85 ; CHECK-NEXT: vmsne.vi v0, v8, 0
88 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v2i1:
90 ; ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
91 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
92 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
93 ; ZVE32F-NEXT: vand.vi v8, v8, 1
94 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
96 %1 = insertelement <2 x i1> poison, i1 %x, i32 0
97 %2 = insertelement <2 x i1> %1, i1 %y, i32 1
101 define <3 x i1> @buildvec_mask_v1i1() {
102 ; CHECK-LABEL: buildvec_mask_v1i1:
104 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
105 ; CHECK-NEXT: vmv.v.i v0, 2
108 ; ZVE32F-LABEL: buildvec_mask_v1i1:
110 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
111 ; ZVE32F-NEXT: vmv.v.i v0, 2
113 ret <3 x i1> <i1 0, i1 1, i1 0>
116 define <3 x i1> @buildvec_mask_optsize_v1i1() optsize {
117 ; CHECK-LABEL: buildvec_mask_optsize_v1i1:
119 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
120 ; CHECK-NEXT: vmv.v.i v0, 2
123 ; ZVE32F-LABEL: buildvec_mask_optsize_v1i1:
125 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
126 ; ZVE32F-NEXT: vmv.v.i v0, 2
128 ret <3 x i1> <i1 0, i1 1, i1 0>
131 define <4 x i1> @buildvec_mask_v4i1() {
132 ; CHECK-LABEL: buildvec_mask_v4i1:
134 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
135 ; CHECK-NEXT: vmv.v.i v0, 6
138 ; ZVE32F-LABEL: buildvec_mask_v4i1:
140 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
141 ; ZVE32F-NEXT: vmv.v.i v0, 6
143 ret <4 x i1> <i1 0, i1 1, i1 1, i1 0>
146 define <4 x i1> @buildvec_mask_nonconst_v4i1(i1 %x, i1 %y) {
147 ; CHECK-LABEL: buildvec_mask_nonconst_v4i1:
149 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
150 ; CHECK-NEXT: vmv.v.i v0, 3
151 ; CHECK-NEXT: vmv.v.x v8, a1
152 ; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0
153 ; CHECK-NEXT: vand.vi v8, v8, 1
154 ; CHECK-NEXT: vmsne.vi v0, v8, 0
157 ; ZVE32F-LABEL: buildvec_mask_nonconst_v4i1:
159 ; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
160 ; ZVE32F-NEXT: vmv.v.i v0, 3
161 ; ZVE32F-NEXT: vmv.v.x v8, a1
162 ; ZVE32F-NEXT: vmerge.vxm v8, v8, a0, v0
163 ; ZVE32F-NEXT: vand.vi v8, v8, 1
164 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
166 %1 = insertelement <4 x i1> poison, i1 %x, i32 0
167 %2 = insertelement <4 x i1> %1, i1 %x, i32 1
168 %3 = insertelement <4 x i1> %2, i1 %y, i32 2
169 %4 = insertelement <4 x i1> %3, i1 %y, i32 3
173 ; FIXME: optsize isn't smaller than the code above
174 define <4 x i1> @buildvec_mask_optsize_nonconst_v4i1(i1 %x, i1 %y) optsize {
175 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v4i1:
177 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
178 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
179 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
180 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
181 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
182 ; CHECK-NEXT: vand.vi v8, v8, 1
183 ; CHECK-NEXT: vmsne.vi v0, v8, 0
186 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v4i1:
188 ; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
189 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
190 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
191 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
192 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
193 ; ZVE32F-NEXT: vand.vi v8, v8, 1
194 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
196 %1 = insertelement <4 x i1> poison, i1 %x, i32 0
197 %2 = insertelement <4 x i1> %1, i1 %x, i32 1
198 %3 = insertelement <4 x i1> %2, i1 %y, i32 2
199 %4 = insertelement <4 x i1> %3, i1 %y, i32 3
203 define <4 x i1> @buildvec_mask_nonconst_v4i1_2(i1 %x, i1 %y) {
204 ; CHECK-LABEL: buildvec_mask_nonconst_v4i1_2:
206 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
207 ; CHECK-NEXT: vslide1down.vx v8, v8, zero
208 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
209 ; CHECK-NEXT: li a0, 1
210 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
211 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
212 ; CHECK-NEXT: vand.vi v8, v8, 1
213 ; CHECK-NEXT: vmsne.vi v0, v8, 0
216 ; ZVE32F-LABEL: buildvec_mask_nonconst_v4i1_2:
218 ; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
219 ; ZVE32F-NEXT: vslide1down.vx v8, v8, zero
220 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
221 ; ZVE32F-NEXT: li a0, 1
222 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
223 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
224 ; ZVE32F-NEXT: vand.vi v8, v8, 1
225 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
227 %1 = insertelement <4 x i1> poison, i1 0, i32 0
228 %2 = insertelement <4 x i1> %1, i1 %x, i32 1
229 %3 = insertelement <4 x i1> %2, i1 1, i32 2
230 %4 = insertelement <4 x i1> %3, i1 %y, i32 3
234 define <8 x i1> @buildvec_mask_v8i1() {
235 ; CHECK-LABEL: buildvec_mask_v8i1:
237 ; CHECK-NEXT: li a0, 182
238 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma
239 ; CHECK-NEXT: vmv.s.x v0, a0
242 ; ZVE32F-LABEL: buildvec_mask_v8i1:
244 ; ZVE32F-NEXT: li a0, 182
245 ; ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma
246 ; ZVE32F-NEXT: vmv.s.x v0, a0
248 ret <8 x i1> <i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1>
251 define <8 x i1> @buildvec_mask_nonconst_v8i1(i1 %x, i1 %y) {
252 ; CHECK-LABEL: buildvec_mask_nonconst_v8i1:
254 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
255 ; CHECK-NEXT: li a2, 19
256 ; CHECK-NEXT: vmv.s.x v0, a2
257 ; CHECK-NEXT: vmv.v.x v8, a1
258 ; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0
259 ; CHECK-NEXT: vand.vi v8, v8, 1
260 ; CHECK-NEXT: vmsne.vi v0, v8, 0
263 ; ZVE32F-LABEL: buildvec_mask_nonconst_v8i1:
265 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
266 ; ZVE32F-NEXT: li a2, 19
267 ; ZVE32F-NEXT: vmv.s.x v0, a2
268 ; ZVE32F-NEXT: vmv.v.x v8, a1
269 ; ZVE32F-NEXT: vmerge.vxm v8, v8, a0, v0
270 ; ZVE32F-NEXT: vand.vi v8, v8, 1
271 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
273 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
274 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
275 %3 = insertelement <8 x i1> %2, i1 %y, i32 2
276 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
277 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
278 %6 = insertelement <8 x i1> %5, i1 %y, i32 5
279 %7 = insertelement <8 x i1> %6, i1 %y, i32 6
280 %8 = insertelement <8 x i1> %7, i1 %y, i32 7
284 define <8 x i1> @buildvec_mask_nonconst_v8i1_2(i1 %x, i1 %y, i1 %z, i1 %w) {
285 ; CHECK-LABEL: buildvec_mask_nonconst_v8i1_2:
287 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
288 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
289 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
290 ; CHECK-NEXT: li a4, 1
291 ; CHECK-NEXT: vslide1down.vx v8, v8, a4
292 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
293 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
294 ; CHECK-NEXT: vslide1down.vx v8, v8, a3
295 ; CHECK-NEXT: vslide1down.vx v8, v8, zero
296 ; CHECK-NEXT: vslide1down.vx v8, v8, a2
297 ; CHECK-NEXT: vand.vi v8, v8, 1
298 ; CHECK-NEXT: vmsne.vi v0, v8, 0
301 ; ZVE32F-LABEL: buildvec_mask_nonconst_v8i1_2:
303 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
304 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
305 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
306 ; ZVE32F-NEXT: li a4, 1
307 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a4
308 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
309 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
310 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a3
311 ; ZVE32F-NEXT: vslide1down.vx v8, v8, zero
312 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a2
313 ; ZVE32F-NEXT: vand.vi v8, v8, 1
314 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
316 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
317 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
318 %3 = insertelement <8 x i1> %2, i1 1, i32 2
319 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
320 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
321 %6 = insertelement <8 x i1> %5, i1 %w, i32 5
322 %7 = insertelement <8 x i1> %6, i1 0, i32 6
323 %8 = insertelement <8 x i1> %7, i1 %z, i32 7
327 define <8 x i1> @buildvec_mask_optsize_nonconst_v8i1_2(i1 %x, i1 %y, i1 %z, i1 %w) optsize {
328 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v8i1_2:
330 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
331 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
332 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
333 ; CHECK-NEXT: li a4, 1
334 ; CHECK-NEXT: vslide1down.vx v8, v8, a4
335 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
336 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
337 ; CHECK-NEXT: vslide1down.vx v8, v8, a3
338 ; CHECK-NEXT: vslide1down.vx v8, v8, zero
339 ; CHECK-NEXT: vslide1down.vx v8, v8, a2
340 ; CHECK-NEXT: vand.vi v8, v8, 1
341 ; CHECK-NEXT: vmsne.vi v0, v8, 0
344 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v8i1_2:
346 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
347 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
348 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
349 ; ZVE32F-NEXT: li a4, 1
350 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a4
351 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
352 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
353 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a3
354 ; ZVE32F-NEXT: vslide1down.vx v8, v8, zero
355 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a2
356 ; ZVE32F-NEXT: vand.vi v8, v8, 1
357 ; ZVE32F-NEXT: vmsne.vi v0, v8, 0
359 %1 = insertelement <8 x i1> poison, i1 %x, i32 0
360 %2 = insertelement <8 x i1> %1, i1 %x, i32 1
361 %3 = insertelement <8 x i1> %2, i1 1, i32 2
362 %4 = insertelement <8 x i1> %3, i1 %y, i32 3
363 %5 = insertelement <8 x i1> %4, i1 %x, i32 4
364 %6 = insertelement <8 x i1> %5, i1 %w, i32 5
365 %7 = insertelement <8 x i1> %6, i1 0, i32 6
366 %8 = insertelement <8 x i1> %7, i1 %z, i32 7
370 define <8 x i1> @buildvec_mask_optsize_nonconst_v8i1(i1 %x, i1 %y) optsize {
371 ; CHECK-LABEL: buildvec_mask_optsize_nonconst_v8i1:
373 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
374 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
375 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
376 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
377 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
378 ; CHECK-NEXT: vslide1down.vx v8, v8, a0
379 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
380 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
381 ; CHECK-NEXT: vslide1down.vx v8, v8, a1
382 ; CHECK-NEXT: vand.vi v8, v8, 1
383 ; CHECK-NEXT: vmsne.vi v0, v8, 0
386 ; ZVE32F-LABEL: buildvec_mask_optsize_nonconst_v8i1:
388 ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
389 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
390 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
391 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
392 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
393 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a0
394 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
395 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
396 ; ZVE32F-NEXT: vslide1down.vx v8, v8, a1
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, mf4, 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, mf2, 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, mf4, 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, mf2, 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, mf4, 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, mf2, 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 ; RV32-LMULMAX1-LABEL: buildvec_mask_v32i1:
466 ; RV32-LMULMAX1: # %bb.0:
467 ; RV32-LMULMAX1-NEXT: li a0, 1776
468 ; RV32-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
469 ; RV32-LMULMAX1-NEXT: vmv.s.x v0, a0
470 ; RV32-LMULMAX1-NEXT: lui a0, 11
471 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1718
472 ; RV32-LMULMAX1-NEXT: vmv.s.x v8, a0
473 ; RV32-LMULMAX1-NEXT: ret
475 ; RV64-LMULMAX1-LABEL: buildvec_mask_v32i1:
476 ; RV64-LMULMAX1: # %bb.0:
477 ; RV64-LMULMAX1-NEXT: li a0, 1776
478 ; RV64-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
479 ; RV64-LMULMAX1-NEXT: vmv.s.x v0, a0
480 ; RV64-LMULMAX1-NEXT: lui a0, 11
481 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1718
482 ; RV64-LMULMAX1-NEXT: vmv.s.x v8, a0
483 ; RV64-LMULMAX1-NEXT: ret
485 ; RV32-LMULMAX2-LABEL: buildvec_mask_v32i1:
486 ; RV32-LMULMAX2: # %bb.0:
487 ; RV32-LMULMAX2-NEXT: lui a0, 748384
488 ; RV32-LMULMAX2-NEXT: addi a0, a0, 1776
489 ; RV32-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
490 ; RV32-LMULMAX2-NEXT: vmv.s.x v0, a0
491 ; RV32-LMULMAX2-NEXT: ret
493 ; RV64-LMULMAX2-LABEL: buildvec_mask_v32i1:
494 ; RV64-LMULMAX2: # %bb.0:
495 ; RV64-LMULMAX2-NEXT: lui a0, 748384
496 ; RV64-LMULMAX2-NEXT: addi a0, a0, 1776
497 ; RV64-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
498 ; RV64-LMULMAX2-NEXT: vmv.s.x v0, a0
499 ; RV64-LMULMAX2-NEXT: ret
501 ; RV32-LMULMAX4-LABEL: buildvec_mask_v32i1:
502 ; RV32-LMULMAX4: # %bb.0:
503 ; RV32-LMULMAX4-NEXT: lui a0, 748384
504 ; RV32-LMULMAX4-NEXT: addi a0, a0, 1776
505 ; RV32-LMULMAX4-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
506 ; RV32-LMULMAX4-NEXT: vmv.s.x v0, a0
507 ; RV32-LMULMAX4-NEXT: ret
509 ; RV64-LMULMAX4-LABEL: buildvec_mask_v32i1:
510 ; RV64-LMULMAX4: # %bb.0:
511 ; RV64-LMULMAX4-NEXT: lui a0, 748384
512 ; RV64-LMULMAX4-NEXT: addi a0, a0, 1776
513 ; RV64-LMULMAX4-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
514 ; RV64-LMULMAX4-NEXT: vmv.s.x v0, a0
515 ; RV64-LMULMAX4-NEXT: ret
517 ; RV32-LMULMAX8-LABEL: buildvec_mask_v32i1:
518 ; RV32-LMULMAX8: # %bb.0:
519 ; RV32-LMULMAX8-NEXT: lui a0, 748384
520 ; RV32-LMULMAX8-NEXT: addi a0, a0, 1776
521 ; RV32-LMULMAX8-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
522 ; RV32-LMULMAX8-NEXT: vmv.s.x v0, a0
523 ; RV32-LMULMAX8-NEXT: ret
525 ; RV64-LMULMAX8-LABEL: buildvec_mask_v32i1:
526 ; RV64-LMULMAX8: # %bb.0:
527 ; RV64-LMULMAX8-NEXT: lui a0, 748384
528 ; RV64-LMULMAX8-NEXT: addi a0, a0, 1776
529 ; RV64-LMULMAX8-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
530 ; RV64-LMULMAX8-NEXT: vmv.s.x v0, a0
531 ; RV64-LMULMAX8-NEXT: ret
533 ; ZVE32F-LABEL: buildvec_mask_v32i1:
535 ; ZVE32F-NEXT: lui a0, 748384
536 ; ZVE32F-NEXT: addi a0, a0, 1776
537 ; ZVE32F-NEXT: vsetivli zero, 1, e32, m1, ta, ma
538 ; ZVE32F-NEXT: vmv.s.x v0, a0
540 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>
543 define <64 x i1> @buildvec_mask_v64i1() {
544 ; RV32-LMULMAX1-LABEL: buildvec_mask_v64i1:
545 ; RV32-LMULMAX1: # %bb.0:
546 ; RV32-LMULMAX1-NEXT: li a0, 1776
547 ; RV32-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
548 ; RV32-LMULMAX1-NEXT: vmv.s.x v0, a0
549 ; RV32-LMULMAX1-NEXT: lui a0, 4
550 ; RV32-LMULMAX1-NEXT: addi a0, a0, -1793
551 ; RV32-LMULMAX1-NEXT: vmv.s.x v9, a0
552 ; RV32-LMULMAX1-NEXT: lui a0, 11
553 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1718
554 ; RV32-LMULMAX1-NEXT: vmv.s.x v8, a0
555 ; RV32-LMULMAX1-NEXT: vmv1r.v v10, v8
556 ; RV32-LMULMAX1-NEXT: ret
558 ; RV64-LMULMAX1-LABEL: buildvec_mask_v64i1:
559 ; RV64-LMULMAX1: # %bb.0:
560 ; RV64-LMULMAX1-NEXT: li a0, 1776
561 ; RV64-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
562 ; RV64-LMULMAX1-NEXT: vmv.s.x v0, a0
563 ; RV64-LMULMAX1-NEXT: lui a0, 4
564 ; RV64-LMULMAX1-NEXT: addi a0, a0, -1793
565 ; RV64-LMULMAX1-NEXT: vmv.s.x v9, a0
566 ; RV64-LMULMAX1-NEXT: lui a0, 11
567 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1718
568 ; RV64-LMULMAX1-NEXT: vmv.s.x v8, a0
569 ; RV64-LMULMAX1-NEXT: vmv1r.v v10, v8
570 ; RV64-LMULMAX1-NEXT: ret
572 ; RV32-LMULMAX2-LABEL: buildvec_mask_v64i1:
573 ; RV32-LMULMAX2: # %bb.0:
574 ; RV32-LMULMAX2-NEXT: lui a0, 748384
575 ; RV32-LMULMAX2-NEXT: addi a0, a0, 1776
576 ; RV32-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
577 ; RV32-LMULMAX2-NEXT: vmv.s.x v0, a0
578 ; RV32-LMULMAX2-NEXT: lui a0, 748388
579 ; RV32-LMULMAX2-NEXT: addi a0, a0, -1793
580 ; RV32-LMULMAX2-NEXT: vmv.s.x v8, a0
581 ; RV32-LMULMAX2-NEXT: ret
583 ; RV64-LMULMAX2-LABEL: buildvec_mask_v64i1:
584 ; RV64-LMULMAX2: # %bb.0:
585 ; RV64-LMULMAX2-NEXT: lui a0, 748384
586 ; RV64-LMULMAX2-NEXT: addi a0, a0, 1776
587 ; RV64-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
588 ; RV64-LMULMAX2-NEXT: vmv.s.x v0, a0
589 ; RV64-LMULMAX2-NEXT: lui a0, 748388
590 ; RV64-LMULMAX2-NEXT: addi a0, a0, -1793
591 ; RV64-LMULMAX2-NEXT: vmv.s.x v8, a0
592 ; RV64-LMULMAX2-NEXT: ret
594 ; RV32-LMULMAX4-LABEL: buildvec_mask_v64i1:
595 ; RV32-LMULMAX4: # %bb.0:
596 ; RV32-LMULMAX4-NEXT: lui a0, 748388
597 ; RV32-LMULMAX4-NEXT: addi a0, a0, -1793
598 ; RV32-LMULMAX4-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
599 ; RV32-LMULMAX4-NEXT: vmv.v.x v0, a0
600 ; RV32-LMULMAX4-NEXT: lui a0, 748384
601 ; RV32-LMULMAX4-NEXT: addi a0, a0, 1776
602 ; RV32-LMULMAX4-NEXT: vsetvli zero, zero, e32, mf2, tu, ma
603 ; RV32-LMULMAX4-NEXT: vmv.s.x v0, a0
604 ; RV32-LMULMAX4-NEXT: ret
606 ; RV64-LMULMAX4-LABEL: buildvec_mask_v64i1:
607 ; RV64-LMULMAX4: # %bb.0:
608 ; RV64-LMULMAX4-NEXT: lui a0, %hi(.LCPI19_0)
609 ; RV64-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI19_0)
610 ; RV64-LMULMAX4-NEXT: vsetivli zero, 1, e64, m1, ta, ma
611 ; RV64-LMULMAX4-NEXT: vle64.v v0, (a0)
612 ; RV64-LMULMAX4-NEXT: ret
614 ; RV32-LMULMAX8-LABEL: buildvec_mask_v64i1:
615 ; RV32-LMULMAX8: # %bb.0:
616 ; RV32-LMULMAX8-NEXT: lui a0, 748388
617 ; RV32-LMULMAX8-NEXT: addi a0, a0, -1793
618 ; RV32-LMULMAX8-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
619 ; RV32-LMULMAX8-NEXT: vmv.v.x v0, a0
620 ; RV32-LMULMAX8-NEXT: lui a0, 748384
621 ; RV32-LMULMAX8-NEXT: addi a0, a0, 1776
622 ; RV32-LMULMAX8-NEXT: vsetvli zero, zero, e32, mf2, tu, ma
623 ; RV32-LMULMAX8-NEXT: vmv.s.x v0, a0
624 ; RV32-LMULMAX8-NEXT: ret
626 ; RV64-LMULMAX8-LABEL: buildvec_mask_v64i1:
627 ; RV64-LMULMAX8: # %bb.0:
628 ; RV64-LMULMAX8-NEXT: lui a0, %hi(.LCPI19_0)
629 ; RV64-LMULMAX8-NEXT: addi a0, a0, %lo(.LCPI19_0)
630 ; RV64-LMULMAX8-NEXT: vsetivli zero, 1, e64, m1, ta, ma
631 ; RV64-LMULMAX8-NEXT: vle64.v v0, (a0)
632 ; RV64-LMULMAX8-NEXT: ret
634 ; ZVE32F-LABEL: buildvec_mask_v64i1:
636 ; ZVE32F-NEXT: lui a0, 748388
637 ; ZVE32F-NEXT: addi a0, a0, -1793
638 ; ZVE32F-NEXT: vsetivli zero, 2, e32, m1, ta, ma
639 ; ZVE32F-NEXT: vmv.v.x v0, a0
640 ; ZVE32F-NEXT: lui a0, 748384
641 ; ZVE32F-NEXT: addi a0, a0, 1776
642 ; ZVE32F-NEXT: vsetvli zero, zero, e32, m1, tu, ma
643 ; ZVE32F-NEXT: vmv.s.x v0, a0
645 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>
648 define <128 x i1> @buildvec_mask_v128i1() {
649 ; RV32-LMULMAX1-LABEL: buildvec_mask_v128i1:
650 ; RV32-LMULMAX1: # %bb.0:
651 ; RV32-LMULMAX1-NEXT: li a0, 1776
652 ; RV32-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
653 ; RV32-LMULMAX1-NEXT: vmv.s.x v0, a0
654 ; RV32-LMULMAX1-NEXT: lui a0, 11
655 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1718
656 ; RV32-LMULMAX1-NEXT: vmv.s.x v8, a0
657 ; RV32-LMULMAX1-NEXT: lui a0, 8
658 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1718
659 ; RV32-LMULMAX1-NEXT: vmv.s.x v12, a0
660 ; RV32-LMULMAX1-NEXT: lui a0, 4
661 ; RV32-LMULMAX1-NEXT: addi a0, a0, -1793
662 ; RV32-LMULMAX1-NEXT: vmv.s.x v9, a0
663 ; RV32-LMULMAX1-NEXT: lui a0, 14
664 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1722
665 ; RV32-LMULMAX1-NEXT: vmv.s.x v14, a0
666 ; RV32-LMULMAX1-NEXT: vmv1r.v v10, v8
667 ; RV32-LMULMAX1-NEXT: vmv1r.v v11, v0
668 ; RV32-LMULMAX1-NEXT: vmv1r.v v13, v9
669 ; RV32-LMULMAX1-NEXT: ret
671 ; RV64-LMULMAX1-LABEL: buildvec_mask_v128i1:
672 ; RV64-LMULMAX1: # %bb.0:
673 ; RV64-LMULMAX1-NEXT: li a0, 1776
674 ; RV64-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
675 ; RV64-LMULMAX1-NEXT: vmv.s.x v0, a0
676 ; RV64-LMULMAX1-NEXT: lui a0, 11
677 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1718
678 ; RV64-LMULMAX1-NEXT: vmv.s.x v8, a0
679 ; RV64-LMULMAX1-NEXT: lui a0, 8
680 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1718
681 ; RV64-LMULMAX1-NEXT: vmv.s.x v12, a0
682 ; RV64-LMULMAX1-NEXT: lui a0, 4
683 ; RV64-LMULMAX1-NEXT: addi a0, a0, -1793
684 ; RV64-LMULMAX1-NEXT: vmv.s.x v9, a0
685 ; RV64-LMULMAX1-NEXT: lui a0, 14
686 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1722
687 ; RV64-LMULMAX1-NEXT: vmv.s.x v14, a0
688 ; RV64-LMULMAX1-NEXT: vmv1r.v v10, v8
689 ; RV64-LMULMAX1-NEXT: vmv1r.v v11, v0
690 ; RV64-LMULMAX1-NEXT: vmv1r.v v13, v9
691 ; RV64-LMULMAX1-NEXT: ret
693 ; RV32-LMULMAX2-LABEL: buildvec_mask_v128i1:
694 ; RV32-LMULMAX2: # %bb.0:
695 ; RV32-LMULMAX2-NEXT: lui a0, 748384
696 ; RV32-LMULMAX2-NEXT: addi a0, a0, 1776
697 ; RV32-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
698 ; RV32-LMULMAX2-NEXT: vmv.s.x v0, a0
699 ; RV32-LMULMAX2-NEXT: lui a0, 748388
700 ; RV32-LMULMAX2-NEXT: addi a0, a0, -1793
701 ; RV32-LMULMAX2-NEXT: vmv.s.x v8, a0
702 ; RV32-LMULMAX2-NEXT: lui a0, 551776
703 ; RV32-LMULMAX2-NEXT: addi a0, a0, 1776
704 ; RV32-LMULMAX2-NEXT: vmv.s.x v9, a0
705 ; RV32-LMULMAX2-NEXT: lui a0, 945060
706 ; RV32-LMULMAX2-NEXT: addi a0, a0, -1793
707 ; RV32-LMULMAX2-NEXT: vmv.s.x v10, a0
708 ; RV32-LMULMAX2-NEXT: ret
710 ; RV64-LMULMAX2-LABEL: buildvec_mask_v128i1:
711 ; RV64-LMULMAX2: # %bb.0:
712 ; RV64-LMULMAX2-NEXT: lui a0, 748384
713 ; RV64-LMULMAX2-NEXT: addi a0, a0, 1776
714 ; RV64-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
715 ; RV64-LMULMAX2-NEXT: vmv.s.x v0, a0
716 ; RV64-LMULMAX2-NEXT: lui a0, 748388
717 ; RV64-LMULMAX2-NEXT: addi a0, a0, -1793
718 ; RV64-LMULMAX2-NEXT: vmv.s.x v8, a0
719 ; RV64-LMULMAX2-NEXT: lui a0, 551776
720 ; RV64-LMULMAX2-NEXT: addi a0, a0, 1776
721 ; RV64-LMULMAX2-NEXT: vmv.s.x v9, a0
722 ; RV64-LMULMAX2-NEXT: lui a0, 945060
723 ; RV64-LMULMAX2-NEXT: addi a0, a0, -1793
724 ; RV64-LMULMAX2-NEXT: vmv.s.x v10, a0
725 ; RV64-LMULMAX2-NEXT: ret
727 ; RV32-LMULMAX4-LABEL: buildvec_mask_v128i1:
728 ; RV32-LMULMAX4: # %bb.0:
729 ; RV32-LMULMAX4-NEXT: lui a0, 748388
730 ; RV32-LMULMAX4-NEXT: addi a0, a0, -1793
731 ; RV32-LMULMAX4-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
732 ; RV32-LMULMAX4-NEXT: vmv.v.x v0, a0
733 ; RV32-LMULMAX4-NEXT: lui a0, 748384
734 ; RV32-LMULMAX4-NEXT: addi a0, a0, 1776
735 ; RV32-LMULMAX4-NEXT: vsetvli zero, zero, e32, mf2, tu, ma
736 ; RV32-LMULMAX4-NEXT: vmv.s.x v0, a0
737 ; RV32-LMULMAX4-NEXT: lui a0, 945060
738 ; RV32-LMULMAX4-NEXT: addi a0, a0, -1793
739 ; RV32-LMULMAX4-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
740 ; RV32-LMULMAX4-NEXT: vmv.v.x v8, a0
741 ; RV32-LMULMAX4-NEXT: lui a0, 551776
742 ; RV32-LMULMAX4-NEXT: addi a0, a0, 1776
743 ; RV32-LMULMAX4-NEXT: vsetvli zero, zero, e32, mf2, tu, ma
744 ; RV32-LMULMAX4-NEXT: vmv.s.x v8, a0
745 ; RV32-LMULMAX4-NEXT: ret
747 ; RV64-LMULMAX4-LABEL: buildvec_mask_v128i1:
748 ; RV64-LMULMAX4: # %bb.0:
749 ; RV64-LMULMAX4-NEXT: lui a0, %hi(.LCPI20_0)
750 ; RV64-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI20_0)
751 ; RV64-LMULMAX4-NEXT: vsetivli zero, 1, e64, m1, ta, ma
752 ; RV64-LMULMAX4-NEXT: vle64.v v0, (a0)
753 ; RV64-LMULMAX4-NEXT: lui a0, %hi(.LCPI20_1)
754 ; RV64-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI20_1)
755 ; RV64-LMULMAX4-NEXT: vle64.v v8, (a0)
756 ; RV64-LMULMAX4-NEXT: ret
758 ; RV32-LMULMAX8-LABEL: buildvec_mask_v128i1:
759 ; RV32-LMULMAX8: # %bb.0:
760 ; RV32-LMULMAX8-NEXT: lui a0, %hi(.LCPI20_0)
761 ; RV32-LMULMAX8-NEXT: addi a0, a0, %lo(.LCPI20_0)
762 ; RV32-LMULMAX8-NEXT: vsetivli zero, 4, e32, m1, ta, ma
763 ; RV32-LMULMAX8-NEXT: vle32.v v0, (a0)
764 ; RV32-LMULMAX8-NEXT: ret
766 ; RV64-LMULMAX8-LABEL: buildvec_mask_v128i1:
767 ; RV64-LMULMAX8: # %bb.0:
768 ; RV64-LMULMAX8-NEXT: lui a0, %hi(.LCPI20_0)
769 ; RV64-LMULMAX8-NEXT: addi a0, a0, %lo(.LCPI20_0)
770 ; RV64-LMULMAX8-NEXT: vsetivli zero, 2, e64, m1, ta, ma
771 ; RV64-LMULMAX8-NEXT: vlse64.v v0, (a0), zero
772 ; RV64-LMULMAX8-NEXT: lui a0, %hi(.LCPI20_1)
773 ; RV64-LMULMAX8-NEXT: ld a0, %lo(.LCPI20_1)(a0)
774 ; RV64-LMULMAX8-NEXT: vsetvli zero, zero, e64, m1, tu, ma
775 ; RV64-LMULMAX8-NEXT: vmv.s.x v0, a0
776 ; RV64-LMULMAX8-NEXT: ret
778 ; ZVE32F-LABEL: buildvec_mask_v128i1:
780 ; ZVE32F-NEXT: lui a0, %hi(.LCPI20_0)
781 ; ZVE32F-NEXT: addi a0, a0, %lo(.LCPI20_0)
782 ; ZVE32F-NEXT: vsetivli zero, 4, e32, m1, ta, ma
783 ; ZVE32F-NEXT: vle32.v v0, (a0)
785 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>
788 define <128 x i1> @buildvec_mask_optsize_v128i1() optsize {
789 ; RV32-LMULMAX1-LABEL: buildvec_mask_optsize_v128i1:
790 ; RV32-LMULMAX1: # %bb.0:
791 ; RV32-LMULMAX1-NEXT: li a0, 1776
792 ; RV32-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
793 ; RV32-LMULMAX1-NEXT: vmv.s.x v0, a0
794 ; RV32-LMULMAX1-NEXT: lui a0, 11
795 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1718
796 ; RV32-LMULMAX1-NEXT: vmv.s.x v8, a0
797 ; RV32-LMULMAX1-NEXT: lui a0, 8
798 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1718
799 ; RV32-LMULMAX1-NEXT: vmv.s.x v12, a0
800 ; RV32-LMULMAX1-NEXT: lui a0, 4
801 ; RV32-LMULMAX1-NEXT: addi a0, a0, -1793
802 ; RV32-LMULMAX1-NEXT: vmv.s.x v9, a0
803 ; RV32-LMULMAX1-NEXT: lui a0, 14
804 ; RV32-LMULMAX1-NEXT: addi a0, a0, 1722
805 ; RV32-LMULMAX1-NEXT: vmv.s.x v14, a0
806 ; RV32-LMULMAX1-NEXT: vmv1r.v v10, v8
807 ; RV32-LMULMAX1-NEXT: vmv1r.v v11, v0
808 ; RV32-LMULMAX1-NEXT: vmv1r.v v13, v9
809 ; RV32-LMULMAX1-NEXT: ret
811 ; RV64-LMULMAX1-LABEL: buildvec_mask_optsize_v128i1:
812 ; RV64-LMULMAX1: # %bb.0:
813 ; RV64-LMULMAX1-NEXT: li a0, 1776
814 ; RV64-LMULMAX1-NEXT: vsetivli zero, 1, e16, mf4, ta, ma
815 ; RV64-LMULMAX1-NEXT: vmv.s.x v0, a0
816 ; RV64-LMULMAX1-NEXT: lui a0, 11
817 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1718
818 ; RV64-LMULMAX1-NEXT: vmv.s.x v8, a0
819 ; RV64-LMULMAX1-NEXT: lui a0, 8
820 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1718
821 ; RV64-LMULMAX1-NEXT: vmv.s.x v12, a0
822 ; RV64-LMULMAX1-NEXT: lui a0, 4
823 ; RV64-LMULMAX1-NEXT: addi a0, a0, -1793
824 ; RV64-LMULMAX1-NEXT: vmv.s.x v9, a0
825 ; RV64-LMULMAX1-NEXT: lui a0, 14
826 ; RV64-LMULMAX1-NEXT: addi a0, a0, 1722
827 ; RV64-LMULMAX1-NEXT: vmv.s.x v14, a0
828 ; RV64-LMULMAX1-NEXT: vmv1r.v v10, v8
829 ; RV64-LMULMAX1-NEXT: vmv1r.v v11, v0
830 ; RV64-LMULMAX1-NEXT: vmv1r.v v13, v9
831 ; RV64-LMULMAX1-NEXT: ret
833 ; RV32-LMULMAX2-LABEL: buildvec_mask_optsize_v128i1:
834 ; RV32-LMULMAX2: # %bb.0:
835 ; RV32-LMULMAX2-NEXT: lui a0, 748384
836 ; RV32-LMULMAX2-NEXT: addi a0, a0, 1776
837 ; RV32-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
838 ; RV32-LMULMAX2-NEXT: vmv.s.x v0, a0
839 ; RV32-LMULMAX2-NEXT: lui a0, 748388
840 ; RV32-LMULMAX2-NEXT: addi a0, a0, -1793
841 ; RV32-LMULMAX2-NEXT: vmv.s.x v8, a0
842 ; RV32-LMULMAX2-NEXT: lui a0, 551776
843 ; RV32-LMULMAX2-NEXT: addi a0, a0, 1776
844 ; RV32-LMULMAX2-NEXT: vmv.s.x v9, a0
845 ; RV32-LMULMAX2-NEXT: lui a0, 945060
846 ; RV32-LMULMAX2-NEXT: addi a0, a0, -1793
847 ; RV32-LMULMAX2-NEXT: vmv.s.x v10, a0
848 ; RV32-LMULMAX2-NEXT: ret
850 ; RV64-LMULMAX2-LABEL: buildvec_mask_optsize_v128i1:
851 ; RV64-LMULMAX2: # %bb.0:
852 ; RV64-LMULMAX2-NEXT: lui a0, 748384
853 ; RV64-LMULMAX2-NEXT: addi a0, a0, 1776
854 ; RV64-LMULMAX2-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
855 ; RV64-LMULMAX2-NEXT: vmv.s.x v0, a0
856 ; RV64-LMULMAX2-NEXT: lui a0, 748388
857 ; RV64-LMULMAX2-NEXT: addi a0, a0, -1793
858 ; RV64-LMULMAX2-NEXT: vmv.s.x v8, a0
859 ; RV64-LMULMAX2-NEXT: lui a0, 551776
860 ; RV64-LMULMAX2-NEXT: addi a0, a0, 1776
861 ; RV64-LMULMAX2-NEXT: vmv.s.x v9, a0
862 ; RV64-LMULMAX2-NEXT: lui a0, 945060
863 ; RV64-LMULMAX2-NEXT: addi a0, a0, -1793
864 ; RV64-LMULMAX2-NEXT: vmv.s.x v10, a0
865 ; RV64-LMULMAX2-NEXT: ret
867 ; RV32-LMULMAX4-LABEL: buildvec_mask_optsize_v128i1:
868 ; RV32-LMULMAX4: # %bb.0:
869 ; RV32-LMULMAX4-NEXT: lui a0, %hi(.LCPI21_0)
870 ; RV32-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI21_0)
871 ; RV32-LMULMAX4-NEXT: li a1, 64
872 ; RV32-LMULMAX4-NEXT: vsetvli zero, a1, e8, m4, ta, ma
873 ; RV32-LMULMAX4-NEXT: vlm.v v0, (a0)
874 ; RV32-LMULMAX4-NEXT: lui a0, %hi(.LCPI21_1)
875 ; RV32-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI21_1)
876 ; RV32-LMULMAX4-NEXT: vlm.v v8, (a0)
877 ; RV32-LMULMAX4-NEXT: ret
879 ; RV64-LMULMAX4-LABEL: buildvec_mask_optsize_v128i1:
880 ; RV64-LMULMAX4: # %bb.0:
881 ; RV64-LMULMAX4-NEXT: lui a0, %hi(.LCPI21_0)
882 ; RV64-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI21_0)
883 ; RV64-LMULMAX4-NEXT: vsetivli zero, 1, e64, m1, ta, ma
884 ; RV64-LMULMAX4-NEXT: vle64.v v0, (a0)
885 ; RV64-LMULMAX4-NEXT: lui a0, %hi(.LCPI21_1)
886 ; RV64-LMULMAX4-NEXT: addi a0, a0, %lo(.LCPI21_1)
887 ; RV64-LMULMAX4-NEXT: vle64.v v8, (a0)
888 ; RV64-LMULMAX4-NEXT: ret
890 ; RV32-LMULMAX8-LABEL: buildvec_mask_optsize_v128i1:
891 ; RV32-LMULMAX8: # %bb.0:
892 ; RV32-LMULMAX8-NEXT: lui a0, %hi(.LCPI21_0)
893 ; RV32-LMULMAX8-NEXT: addi a0, a0, %lo(.LCPI21_0)
894 ; RV32-LMULMAX8-NEXT: li a1, 128
895 ; RV32-LMULMAX8-NEXT: vsetvli zero, a1, e8, m8, ta, ma
896 ; RV32-LMULMAX8-NEXT: vlm.v v0, (a0)
897 ; RV32-LMULMAX8-NEXT: ret
899 ; RV64-LMULMAX8-LABEL: buildvec_mask_optsize_v128i1:
900 ; RV64-LMULMAX8: # %bb.0:
901 ; RV64-LMULMAX8-NEXT: lui a0, %hi(.LCPI21_0)
902 ; RV64-LMULMAX8-NEXT: addi a0, a0, %lo(.LCPI21_0)
903 ; RV64-LMULMAX8-NEXT: li a1, 128
904 ; RV64-LMULMAX8-NEXT: vsetvli zero, a1, e8, m8, ta, ma
905 ; RV64-LMULMAX8-NEXT: vlm.v v0, (a0)
906 ; RV64-LMULMAX8-NEXT: ret
908 ; ZVE32F-LABEL: buildvec_mask_optsize_v128i1:
910 ; ZVE32F-NEXT: lui a0, %hi(.LCPI21_0)
911 ; ZVE32F-NEXT: addi a0, a0, %lo(.LCPI21_0)
912 ; ZVE32F-NEXT: li a1, 128
913 ; ZVE32F-NEXT: vsetvli zero, a1, e8, m8, ta, ma
914 ; ZVE32F-NEXT: vlm.v v0, (a0)
916 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>
918 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: