1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -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=+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=8 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,RV64-LMULMAX8
10
11define <1 x i1> @buildvec_mask_nonconst_v1i1(i1 %x) {
12; CHECK-LABEL: buildvec_mask_nonconst_v1i1:
13; CHECK:       # %bb.0:
14; CHECK-NEXT:    andi a0, a0, 1
15; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
16; CHECK-NEXT:    vmv.v.x v25, a0
17; CHECK-NEXT:    vmsne.vi v0, v25, 0
18; CHECK-NEXT:    ret
19  %1 = insertelement <1 x i1> undef, i1 %x, i32 0
20  ret <1 x i1> %1
21}
22
23define <1 x i1> @buildvec_mask_optsize_nonconst_v1i1(i1 %x) optsize {
24; CHECK-LABEL: buildvec_mask_optsize_nonconst_v1i1:
25; CHECK:       # %bb.0:
26; CHECK-NEXT:    andi a0, a0, 1
27; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
28; CHECK-NEXT:    vmv.v.x v25, a0
29; CHECK-NEXT:    vmsne.vi v0, v25, 0
30; CHECK-NEXT:    ret
31  %1 = insertelement <1 x i1> undef, i1 %x, i32 0
32  ret <1 x i1> %1
33}
34
35define <2 x i1> @buildvec_mask_nonconst_v2i1(i1 %x, i1 %y) {
36; CHECK-LABEL: buildvec_mask_nonconst_v2i1:
37; CHECK:       # %bb.0:
38; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
39; CHECK-NEXT:    vmv.v.x v25, a1
40; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, tu, mu
41; CHECK-NEXT:    vmv.s.x v25, a0
42; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, mu
43; CHECK-NEXT:    vand.vi v25, v25, 1
44; CHECK-NEXT:    vmsne.vi v0, v25, 0
45; CHECK-NEXT:    ret
46  %1 = insertelement <2 x i1> undef, i1 %x, i32 0
47  %2 = insertelement <2 x i1> %1,  i1 %y, i32 1
48  ret <2 x i1> %2
49}
50
51; FIXME: optsize isn't smaller than the code above
52define <2 x i1> @buildvec_mask_optsize_nonconst_v2i1(i1 %x, i1 %y) optsize {
53; CHECK-LABEL: buildvec_mask_optsize_nonconst_v2i1:
54; CHECK:       # %bb.0:
55; CHECK-NEXT:    addi sp, sp, -16
56; CHECK-NEXT:    .cfi_def_cfa_offset 16
57; CHECK-NEXT:    sb a1, 15(sp)
58; CHECK-NEXT:    sb a0, 14(sp)
59; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
60; CHECK-NEXT:    addi a0, sp, 14
61; CHECK-NEXT:    vle8.v v25, (a0)
62; CHECK-NEXT:    vand.vi v25, v25, 1
63; CHECK-NEXT:    vmsne.vi v0, v25, 0
64; CHECK-NEXT:    addi sp, sp, 16
65; CHECK-NEXT:    ret
66  %1 = insertelement <2 x i1> undef, i1 %x, i32 0
67  %2 = insertelement <2 x i1> %1,  i1 %y, i32 1
68  ret <2 x i1> %2
69}
70
71define <3 x i1> @buildvec_mask_v1i1() {
72; CHECK-LABEL: buildvec_mask_v1i1:
73; CHECK:       # %bb.0:
74; CHECK-NEXT:    addi a0, zero, 2
75; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
76; CHECK-NEXT:    vmv.s.x v0, a0
77; CHECK-NEXT:    ret
78  ret <3 x i1> <i1 0, i1 1, i1 0>
79}
80
81define <3 x i1> @buildvec_mask_optsize_v1i1() optsize {
82; CHECK-LABEL: buildvec_mask_optsize_v1i1:
83; CHECK:       # %bb.0:
84; CHECK-NEXT:    addi a0, zero, 2
85; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
86; CHECK-NEXT:    vmv.s.x v0, a0
87; CHECK-NEXT:    ret
88  ret <3 x i1> <i1 0, i1 1, i1 0>
89}
90
91define <4 x i1> @buildvec_mask_v4i1() {
92; CHECK-LABEL: buildvec_mask_v4i1:
93; CHECK:       # %bb.0:
94; CHECK-NEXT:    addi a0, zero, 6
95; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
96; CHECK-NEXT:    vmv.s.x v0, a0
97; CHECK-NEXT:    ret
98  ret <4 x i1> <i1 0, i1 1, i1 1, i1 0>
99}
100
101define <4 x i1> @buildvec_mask_nonconst_v4i1(i1 %x, i1 %y) {
102; CHECK-LABEL: buildvec_mask_nonconst_v4i1:
103; CHECK:       # %bb.0:
104; CHECK-NEXT:    addi a2, zero, 3
105; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
106; CHECK-NEXT:    vmv.s.x v0, a2
107; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, mu
108; CHECK-NEXT:    vmv.v.x v25, a1
109; CHECK-NEXT:    vmerge.vxm v25, v25, a0, v0
110; CHECK-NEXT:    vand.vi v25, v25, 1
111; CHECK-NEXT:    vmsne.vi v0, v25, 0
112; CHECK-NEXT:    ret
113  %1 = insertelement <4 x i1> undef, i1 %x, i32 0
114  %2 = insertelement <4 x i1> %1,  i1 %x, i32 1
115  %3 = insertelement <4 x i1> %2,  i1 %y, i32 2
116  %4 = insertelement <4 x i1> %3,  i1 %y, i32 3
117  ret <4 x i1> %4
118}
119
120; FIXME: optsize isn't smaller than the code above
121define <4 x i1> @buildvec_mask_optsize_nonconst_v4i1(i1 %x, i1 %y) optsize {
122; CHECK-LABEL: buildvec_mask_optsize_nonconst_v4i1:
123; CHECK:       # %bb.0:
124; CHECK-NEXT:    addi sp, sp, -16
125; CHECK-NEXT:    .cfi_def_cfa_offset 16
126; CHECK-NEXT:    sb a1, 15(sp)
127; CHECK-NEXT:    sb a1, 14(sp)
128; CHECK-NEXT:    sb a0, 13(sp)
129; CHECK-NEXT:    sb a0, 12(sp)
130; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, mu
131; CHECK-NEXT:    addi a0, sp, 12
132; CHECK-NEXT:    vle8.v v25, (a0)
133; CHECK-NEXT:    vand.vi v25, v25, 1
134; CHECK-NEXT:    vmsne.vi v0, v25, 0
135; CHECK-NEXT:    addi sp, sp, 16
136; CHECK-NEXT:    ret
137  %1 = insertelement <4 x i1> undef, i1 %x, i32 0
138  %2 = insertelement <4 x i1> %1,  i1 %x, i32 1
139  %3 = insertelement <4 x i1> %2,  i1 %y, i32 2
140  %4 = insertelement <4 x i1> %3,  i1 %y, i32 3
141  ret <4 x i1> %4
142}
143
144define <4 x i1> @buildvec_mask_nonconst_v4i1_2(i1 %x, i1 %y) {
145; CHECK-LABEL: buildvec_mask_nonconst_v4i1_2:
146; CHECK:       # %bb.0:
147; CHECK-NEXT:    addi sp, sp, -16
148; CHECK-NEXT:    .cfi_def_cfa_offset 16
149; CHECK-NEXT:    sb a1, 15(sp)
150; CHECK-NEXT:    addi a1, zero, 1
151; CHECK-NEXT:    sb a1, 14(sp)
152; CHECK-NEXT:    sb a0, 13(sp)
153; CHECK-NEXT:    sb zero, 12(sp)
154; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, mu
155; CHECK-NEXT:    addi a0, sp, 12
156; CHECK-NEXT:    vle8.v v25, (a0)
157; CHECK-NEXT:    vand.vi v25, v25, 1
158; CHECK-NEXT:    vmsne.vi v0, v25, 0
159; CHECK-NEXT:    addi sp, sp, 16
160; CHECK-NEXT:    ret
161  %1 = insertelement <4 x i1> undef, i1 0, i32 0
162  %2 = insertelement <4 x i1> %1,  i1 %x, i32 1
163  %3 = insertelement <4 x i1> %2,  i1  1, i32 2
164  %4 = insertelement <4 x i1> %3,  i1 %y, i32 3
165  ret <4 x i1> %4
166}
167
168define <8 x i1> @buildvec_mask_v8i1() {
169; CHECK-LABEL: buildvec_mask_v8i1:
170; CHECK:       # %bb.0:
171; CHECK-NEXT:    addi a0, zero, 182
172; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
173; CHECK-NEXT:    vmv.s.x v0, a0
174; CHECK-NEXT:    ret
175  ret <8 x i1> <i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1>
176}
177
178define <8 x i1> @buildvec_mask_nonconst_v8i1(i1 %x, i1 %y) {
179; CHECK-LABEL: buildvec_mask_nonconst_v8i1:
180; CHECK:       # %bb.0:
181; CHECK-NEXT:    addi a2, zero, 19
182; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
183; CHECK-NEXT:    vmv.s.x v0, a2
184; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
185; CHECK-NEXT:    vmv.v.x v25, a1
186; CHECK-NEXT:    vmerge.vxm v25, v25, a0, v0
187; CHECK-NEXT:    vand.vi v25, v25, 1
188; CHECK-NEXT:    vmsne.vi v0, v25, 0
189; CHECK-NEXT:    ret
190  %1 = insertelement <8 x i1> undef, i1 %x, i32 0
191  %2 = insertelement <8 x i1> %1,  i1 %x, i32 1
192  %3 = insertelement <8 x i1> %2,  i1 %y, i32 2
193  %4 = insertelement <8 x i1> %3,  i1 %y, i32 3
194  %5 = insertelement <8 x i1> %4,  i1 %x, i32 4
195  %6 = insertelement <8 x i1> %5,  i1 %y, i32 5
196  %7 = insertelement <8 x i1> %6,  i1 %y, i32 6
197  %8 = insertelement <8 x i1> %7,  i1 %y, i32 7
198  ret <8 x i1> %8
199}
200
201define <8 x i1> @buildvec_mask_nonconst_v8i1_2(i1 %x, i1 %y, i1 %z, i1 %w) {
202; CHECK-LABEL: buildvec_mask_nonconst_v8i1_2:
203; CHECK:       # %bb.0:
204; CHECK-NEXT:    addi sp, sp, -16
205; CHECK-NEXT:    .cfi_def_cfa_offset 16
206; CHECK-NEXT:    sb a2, 15(sp)
207; CHECK-NEXT:    sb zero, 14(sp)
208; CHECK-NEXT:    sb a3, 13(sp)
209; CHECK-NEXT:    sb a0, 12(sp)
210; CHECK-NEXT:    sb a1, 11(sp)
211; CHECK-NEXT:    addi a1, zero, 1
212; CHECK-NEXT:    sb a1, 10(sp)
213; CHECK-NEXT:    sb a0, 9(sp)
214; CHECK-NEXT:    sb a0, 8(sp)
215; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
216; CHECK-NEXT:    addi a0, sp, 8
217; CHECK-NEXT:    vle8.v v25, (a0)
218; CHECK-NEXT:    vand.vi v25, v25, 1
219; CHECK-NEXT:    vmsne.vi v0, v25, 0
220; CHECK-NEXT:    addi sp, sp, 16
221; CHECK-NEXT:    ret
222  %1 = insertelement <8 x i1> undef, i1 %x, i32 0
223  %2 = insertelement <8 x i1> %1,  i1 %x, i32 1
224  %3 = insertelement <8 x i1> %2,  i1  1, i32 2
225  %4 = insertelement <8 x i1> %3,  i1 %y, i32 3
226  %5 = insertelement <8 x i1> %4,  i1 %x, i32 4
227  %6 = insertelement <8 x i1> %5,  i1 %w, i32 5
228  %7 = insertelement <8 x i1> %6,  i1  0, i32 6
229  %8 = insertelement <8 x i1> %7,  i1 %z, i32 7
230  ret <8 x i1> %8
231}
232
233define <8 x i1> @buildvec_mask_optsize_nonconst_v8i1_2(i1 %x, i1 %y, i1 %z, i1 %w) optsize {
234; CHECK-LABEL: buildvec_mask_optsize_nonconst_v8i1_2:
235; CHECK:       # %bb.0:
236; CHECK-NEXT:    addi sp, sp, -16
237; CHECK-NEXT:    .cfi_def_cfa_offset 16
238; CHECK-NEXT:    sb a2, 15(sp)
239; CHECK-NEXT:    sb zero, 14(sp)
240; CHECK-NEXT:    sb a3, 13(sp)
241; CHECK-NEXT:    sb a0, 12(sp)
242; CHECK-NEXT:    sb a1, 11(sp)
243; CHECK-NEXT:    addi a1, zero, 1
244; CHECK-NEXT:    sb a1, 10(sp)
245; CHECK-NEXT:    sb a0, 9(sp)
246; CHECK-NEXT:    sb a0, 8(sp)
247; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
248; CHECK-NEXT:    addi a0, sp, 8
249; CHECK-NEXT:    vle8.v v25, (a0)
250; CHECK-NEXT:    vand.vi v25, v25, 1
251; CHECK-NEXT:    vmsne.vi v0, v25, 0
252; CHECK-NEXT:    addi sp, sp, 16
253; CHECK-NEXT:    ret
254  %1 = insertelement <8 x i1> undef, i1 %x, i32 0
255  %2 = insertelement <8 x i1> %1,  i1 %x, i32 1
256  %3 = insertelement <8 x i1> %2,  i1  1, i32 2
257  %4 = insertelement <8 x i1> %3,  i1 %y, i32 3
258  %5 = insertelement <8 x i1> %4,  i1 %x, i32 4
259  %6 = insertelement <8 x i1> %5,  i1 %w, i32 5
260  %7 = insertelement <8 x i1> %6,  i1  0, i32 6
261  %8 = insertelement <8 x i1> %7,  i1 %z, i32 7
262  ret <8 x i1> %8
263}
264
265define <8 x i1> @buildvec_mask_optsize_nonconst_v8i1(i1 %x, i1 %y) optsize {
266; CHECK-LABEL: buildvec_mask_optsize_nonconst_v8i1:
267; CHECK:       # %bb.0:
268; CHECK-NEXT:    addi sp, sp, -16
269; CHECK-NEXT:    .cfi_def_cfa_offset 16
270; CHECK-NEXT:    sb a1, 15(sp)
271; CHECK-NEXT:    sb a1, 14(sp)
272; CHECK-NEXT:    sb a1, 13(sp)
273; CHECK-NEXT:    sb a0, 12(sp)
274; CHECK-NEXT:    sb a1, 11(sp)
275; CHECK-NEXT:    sb a1, 10(sp)
276; CHECK-NEXT:    sb a0, 9(sp)
277; CHECK-NEXT:    sb a0, 8(sp)
278; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
279; CHECK-NEXT:    addi a0, sp, 8
280; CHECK-NEXT:    vle8.v v25, (a0)
281; CHECK-NEXT:    vand.vi v25, v25, 1
282; CHECK-NEXT:    vmsne.vi v0, v25, 0
283; CHECK-NEXT:    addi sp, sp, 16
284; CHECK-NEXT:    ret
285  %1 = insertelement <8 x i1> undef, i1 %x, i32 0
286  %2 = insertelement <8 x i1> %1,  i1 %x, i32 1
287  %3 = insertelement <8 x i1> %2,  i1 %y, i32 2
288  %4 = insertelement <8 x i1> %3,  i1 %y, i32 3
289  %5 = insertelement <8 x i1> %4,  i1 %x, i32 4
290  %6 = insertelement <8 x i1> %5,  i1 %y, i32 5
291  %7 = insertelement <8 x i1> %6,  i1 %y, i32 6
292  %8 = insertelement <8 x i1> %7,  i1 %y, i32 7
293  ret <8 x i1> %8
294}
295
296define <10 x i1> @buildvec_mask_v10i1() {
297; CHECK-LABEL: buildvec_mask_v10i1:
298; CHECK:       # %bb.0:
299; CHECK-NEXT:    addi a0, zero, 949
300; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
301; CHECK-NEXT:    vmv.s.x v0, a0
302; CHECK-NEXT:    ret
303  ret <10 x i1> <i1 1, i1 0, i1 1, i1 0, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1>
304}
305
306define <16 x i1> @buildvec_mask_v16i1() {
307; CHECK-RV32-LABEL: buildvec_mask_v16i1:
308; CHECK-RV32:       # %bb.0:
309; CHECK-RV32-NEXT:    lui a0, 11
310; CHECK-RV32-NEXT:    addi a0, a0, 1718
311; CHECK-RV32-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
312; CHECK-RV32-NEXT:    vmv.s.x v0, a0
313; CHECK-RV32-NEXT:    ret
314;
315; CHECK-RV64-LABEL: buildvec_mask_v16i1:
316; CHECK-RV64:       # %bb.0:
317; CHECK-RV64-NEXT:    lui a0, 11
318; CHECK-RV64-NEXT:    addiw a0, a0, 1718
319; CHECK-RV64-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
320; CHECK-RV64-NEXT:    vmv.s.x v0, a0
321; CHECK-RV64-NEXT:    ret
322  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>
323}
324
325define <16 x i1> @buildvec_mask_v16i1_undefs() {
326; CHECK-LABEL: buildvec_mask_v16i1_undefs:
327; CHECK:       # %bb.0:
328; CHECK-NEXT:    addi a0, zero, 1722
329; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
330; CHECK-NEXT:    vmv.s.x v0, a0
331; CHECK-NEXT:    ret
332  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>
333}
334
335define <32 x i1> @buildvec_mask_v32i1() {
336; RV32-LMULMAX1-LABEL: buildvec_mask_v32i1:
337; RV32-LMULMAX1:       # %bb.0:
338; RV32-LMULMAX1-NEXT:    addi a0, zero, 1776
339; RV32-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
340; RV32-LMULMAX1-NEXT:    vmv.s.x v0, a0
341; RV32-LMULMAX1-NEXT:    lui a0, 11
342; RV32-LMULMAX1-NEXT:    addi a0, a0, 1718
343; RV32-LMULMAX1-NEXT:    vmv.s.x v8, a0
344; RV32-LMULMAX1-NEXT:    ret
345;
346; RV64-LMULMAX1-LABEL: buildvec_mask_v32i1:
347; RV64-LMULMAX1:       # %bb.0:
348; RV64-LMULMAX1-NEXT:    addi a0, zero, 1776
349; RV64-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
350; RV64-LMULMAX1-NEXT:    vmv.s.x v0, a0
351; RV64-LMULMAX1-NEXT:    lui a0, 11
352; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1718
353; RV64-LMULMAX1-NEXT:    vmv.s.x v8, a0
354; RV64-LMULMAX1-NEXT:    ret
355;
356; RV32-LMULMAX2-LABEL: buildvec_mask_v32i1:
357; RV32-LMULMAX2:       # %bb.0:
358; RV32-LMULMAX2-NEXT:    lui a0, 748384
359; RV32-LMULMAX2-NEXT:    addi a0, a0, 1776
360; RV32-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
361; RV32-LMULMAX2-NEXT:    vmv.s.x v0, a0
362; RV32-LMULMAX2-NEXT:    ret
363;
364; RV64-LMULMAX2-LABEL: buildvec_mask_v32i1:
365; RV64-LMULMAX2:       # %bb.0:
366; RV64-LMULMAX2-NEXT:    lui a0, 748384
367; RV64-LMULMAX2-NEXT:    addiw a0, a0, 1776
368; RV64-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
369; RV64-LMULMAX2-NEXT:    vmv.s.x v0, a0
370; RV64-LMULMAX2-NEXT:    ret
371;
372; RV32-LMULMAX4-LABEL: buildvec_mask_v32i1:
373; RV32-LMULMAX4:       # %bb.0:
374; RV32-LMULMAX4-NEXT:    lui a0, 748384
375; RV32-LMULMAX4-NEXT:    addi a0, a0, 1776
376; RV32-LMULMAX4-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
377; RV32-LMULMAX4-NEXT:    vmv.s.x v0, a0
378; RV32-LMULMAX4-NEXT:    ret
379;
380; RV64-LMULMAX4-LABEL: buildvec_mask_v32i1:
381; RV64-LMULMAX4:       # %bb.0:
382; RV64-LMULMAX4-NEXT:    lui a0, 748384
383; RV64-LMULMAX4-NEXT:    addiw a0, a0, 1776
384; RV64-LMULMAX4-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
385; RV64-LMULMAX4-NEXT:    vmv.s.x v0, a0
386; RV64-LMULMAX4-NEXT:    ret
387;
388; RV32-LMULMAX8-LABEL: buildvec_mask_v32i1:
389; RV32-LMULMAX8:       # %bb.0:
390; RV32-LMULMAX8-NEXT:    lui a0, 748384
391; RV32-LMULMAX8-NEXT:    addi a0, a0, 1776
392; RV32-LMULMAX8-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
393; RV32-LMULMAX8-NEXT:    vmv.s.x v0, a0
394; RV32-LMULMAX8-NEXT:    ret
395;
396; RV64-LMULMAX8-LABEL: buildvec_mask_v32i1:
397; RV64-LMULMAX8:       # %bb.0:
398; RV64-LMULMAX8-NEXT:    lui a0, 748384
399; RV64-LMULMAX8-NEXT:    addiw a0, a0, 1776
400; RV64-LMULMAX8-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
401; RV64-LMULMAX8-NEXT:    vmv.s.x v0, a0
402; RV64-LMULMAX8-NEXT:    ret
403  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>
404}
405
406define <64 x i1> @buildvec_mask_v64i1() {
407; RV32-LMULMAX1-LABEL: buildvec_mask_v64i1:
408; RV32-LMULMAX1:       # %bb.0:
409; RV32-LMULMAX1-NEXT:    addi a0, zero, 1776
410; RV32-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
411; RV32-LMULMAX1-NEXT:    vmv.s.x v0, a0
412; RV32-LMULMAX1-NEXT:    lui a0, 4
413; RV32-LMULMAX1-NEXT:    addi a0, a0, -1793
414; RV32-LMULMAX1-NEXT:    vmv.s.x v9, a0
415; RV32-LMULMAX1-NEXT:    lui a0, 11
416; RV32-LMULMAX1-NEXT:    addi a0, a0, 1718
417; RV32-LMULMAX1-NEXT:    vmv.s.x v8, a0
418; RV32-LMULMAX1-NEXT:    vmv1r.v v10, v8
419; RV32-LMULMAX1-NEXT:    ret
420;
421; RV64-LMULMAX1-LABEL: buildvec_mask_v64i1:
422; RV64-LMULMAX1:       # %bb.0:
423; RV64-LMULMAX1-NEXT:    addi a0, zero, 1776
424; RV64-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
425; RV64-LMULMAX1-NEXT:    vmv.s.x v0, a0
426; RV64-LMULMAX1-NEXT:    lui a0, 4
427; RV64-LMULMAX1-NEXT:    addiw a0, a0, -1793
428; RV64-LMULMAX1-NEXT:    vmv.s.x v9, a0
429; RV64-LMULMAX1-NEXT:    lui a0, 11
430; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1718
431; RV64-LMULMAX1-NEXT:    vmv.s.x v8, a0
432; RV64-LMULMAX1-NEXT:    vmv1r.v v10, v8
433; RV64-LMULMAX1-NEXT:    ret
434;
435; RV32-LMULMAX2-LABEL: buildvec_mask_v64i1:
436; RV32-LMULMAX2:       # %bb.0:
437; RV32-LMULMAX2-NEXT:    lui a0, 748384
438; RV32-LMULMAX2-NEXT:    addi a0, a0, 1776
439; RV32-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
440; RV32-LMULMAX2-NEXT:    vmv.s.x v0, a0
441; RV32-LMULMAX2-NEXT:    lui a0, 748388
442; RV32-LMULMAX2-NEXT:    addi a0, a0, -1793
443; RV32-LMULMAX2-NEXT:    vmv.s.x v8, a0
444; RV32-LMULMAX2-NEXT:    ret
445;
446; RV64-LMULMAX2-LABEL: buildvec_mask_v64i1:
447; RV64-LMULMAX2:       # %bb.0:
448; RV64-LMULMAX2-NEXT:    lui a0, 748384
449; RV64-LMULMAX2-NEXT:    addiw a0, a0, 1776
450; RV64-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
451; RV64-LMULMAX2-NEXT:    vmv.s.x v0, a0
452; RV64-LMULMAX2-NEXT:    lui a0, 748388
453; RV64-LMULMAX2-NEXT:    addiw a0, a0, -1793
454; RV64-LMULMAX2-NEXT:    vmv.s.x v8, a0
455; RV64-LMULMAX2-NEXT:    ret
456;
457; RV32-LMULMAX4-LABEL: buildvec_mask_v64i1:
458; RV32-LMULMAX4:       # %bb.0:
459; RV32-LMULMAX4-NEXT:    lui a0, 748388
460; RV32-LMULMAX4-NEXT:    addi a0, a0, -1793
461; RV32-LMULMAX4-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
462; RV32-LMULMAX4-NEXT:    vmv.s.x v25, a0
463; RV32-LMULMAX4-NEXT:    lui a0, 748384
464; RV32-LMULMAX4-NEXT:    addi a0, a0, 1776
465; RV32-LMULMAX4-NEXT:    vmv.s.x v0, a0
466; RV32-LMULMAX4-NEXT:    vsetvli zero, zero, e32, mf2, tu, mu
467; RV32-LMULMAX4-NEXT:    vslideup.vi v0, v25, 1
468; RV32-LMULMAX4-NEXT:    ret
469;
470; RV64-LMULMAX4-LABEL: buildvec_mask_v64i1:
471; RV64-LMULMAX4:       # %bb.0:
472; RV64-LMULMAX4-NEXT:    lui a0, 1048429
473; RV64-LMULMAX4-NEXT:    addiw a0, a0, 1735
474; RV64-LMULMAX4-NEXT:    slli a0, a0, 13
475; RV64-LMULMAX4-NEXT:    addi a0, a0, 1023
476; RV64-LMULMAX4-NEXT:    slli a0, a0, 13
477; RV64-LMULMAX4-NEXT:    addi a0, a0, -1189
478; RV64-LMULMAX4-NEXT:    slli a0, a0, 17
479; RV64-LMULMAX4-NEXT:    addi a0, a0, 1776
480; RV64-LMULMAX4-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
481; RV64-LMULMAX4-NEXT:    vmv.s.x v0, a0
482; RV64-LMULMAX4-NEXT:    ret
483;
484; RV32-LMULMAX8-LABEL: buildvec_mask_v64i1:
485; RV32-LMULMAX8:       # %bb.0:
486; RV32-LMULMAX8-NEXT:    lui a0, 748388
487; RV32-LMULMAX8-NEXT:    addi a0, a0, -1793
488; RV32-LMULMAX8-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
489; RV32-LMULMAX8-NEXT:    vmv.s.x v25, a0
490; RV32-LMULMAX8-NEXT:    lui a0, 748384
491; RV32-LMULMAX8-NEXT:    addi a0, a0, 1776
492; RV32-LMULMAX8-NEXT:    vmv.s.x v0, a0
493; RV32-LMULMAX8-NEXT:    vsetvli zero, zero, e32, mf2, tu, mu
494; RV32-LMULMAX8-NEXT:    vslideup.vi v0, v25, 1
495; RV32-LMULMAX8-NEXT:    ret
496;
497; RV64-LMULMAX8-LABEL: buildvec_mask_v64i1:
498; RV64-LMULMAX8:       # %bb.0:
499; RV64-LMULMAX8-NEXT:    lui a0, 1048429
500; RV64-LMULMAX8-NEXT:    addiw a0, a0, 1735
501; RV64-LMULMAX8-NEXT:    slli a0, a0, 13
502; RV64-LMULMAX8-NEXT:    addi a0, a0, 1023
503; RV64-LMULMAX8-NEXT:    slli a0, a0, 13
504; RV64-LMULMAX8-NEXT:    addi a0, a0, -1189
505; RV64-LMULMAX8-NEXT:    slli a0, a0, 17
506; RV64-LMULMAX8-NEXT:    addi a0, a0, 1776
507; RV64-LMULMAX8-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
508; RV64-LMULMAX8-NEXT:    vmv.s.x v0, a0
509; RV64-LMULMAX8-NEXT:    ret
510  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>
511}
512
513define <128 x i1> @buildvec_mask_v128i1() {
514; RV32-LMULMAX1-LABEL: buildvec_mask_v128i1:
515; RV32-LMULMAX1:       # %bb.0:
516; RV32-LMULMAX1-NEXT:    addi a0, zero, 1776
517; RV32-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
518; RV32-LMULMAX1-NEXT:    vmv.s.x v0, a0
519; RV32-LMULMAX1-NEXT:    lui a0, 11
520; RV32-LMULMAX1-NEXT:    addi a0, a0, 1718
521; RV32-LMULMAX1-NEXT:    vmv.s.x v8, a0
522; RV32-LMULMAX1-NEXT:    lui a0, 8
523; RV32-LMULMAX1-NEXT:    addi a0, a0, 1718
524; RV32-LMULMAX1-NEXT:    vmv.s.x v12, a0
525; RV32-LMULMAX1-NEXT:    lui a0, 4
526; RV32-LMULMAX1-NEXT:    addi a0, a0, -1793
527; RV32-LMULMAX1-NEXT:    vmv.s.x v9, a0
528; RV32-LMULMAX1-NEXT:    lui a0, 14
529; RV32-LMULMAX1-NEXT:    addi a0, a0, 1722
530; RV32-LMULMAX1-NEXT:    vmv.s.x v14, a0
531; RV32-LMULMAX1-NEXT:    vmv1r.v v10, v8
532; RV32-LMULMAX1-NEXT:    vmv1r.v v11, v0
533; RV32-LMULMAX1-NEXT:    vmv1r.v v13, v9
534; RV32-LMULMAX1-NEXT:    ret
535;
536; RV64-LMULMAX1-LABEL: buildvec_mask_v128i1:
537; RV64-LMULMAX1:       # %bb.0:
538; RV64-LMULMAX1-NEXT:    addi a0, zero, 1776
539; RV64-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
540; RV64-LMULMAX1-NEXT:    vmv.s.x v0, a0
541; RV64-LMULMAX1-NEXT:    lui a0, 11
542; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1718
543; RV64-LMULMAX1-NEXT:    vmv.s.x v8, a0
544; RV64-LMULMAX1-NEXT:    lui a0, 8
545; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1718
546; RV64-LMULMAX1-NEXT:    vmv.s.x v12, a0
547; RV64-LMULMAX1-NEXT:    lui a0, 4
548; RV64-LMULMAX1-NEXT:    addiw a0, a0, -1793
549; RV64-LMULMAX1-NEXT:    vmv.s.x v9, a0
550; RV64-LMULMAX1-NEXT:    lui a0, 14
551; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1722
552; RV64-LMULMAX1-NEXT:    vmv.s.x v14, a0
553; RV64-LMULMAX1-NEXT:    vmv1r.v v10, v8
554; RV64-LMULMAX1-NEXT:    vmv1r.v v11, v0
555; RV64-LMULMAX1-NEXT:    vmv1r.v v13, v9
556; RV64-LMULMAX1-NEXT:    ret
557;
558; RV32-LMULMAX2-LABEL: buildvec_mask_v128i1:
559; RV32-LMULMAX2:       # %bb.0:
560; RV32-LMULMAX2-NEXT:    lui a0, 748384
561; RV32-LMULMAX2-NEXT:    addi a0, a0, 1776
562; RV32-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
563; RV32-LMULMAX2-NEXT:    vmv.s.x v0, a0
564; RV32-LMULMAX2-NEXT:    lui a0, 748388
565; RV32-LMULMAX2-NEXT:    addi a0, a0, -1793
566; RV32-LMULMAX2-NEXT:    vmv.s.x v8, a0
567; RV32-LMULMAX2-NEXT:    lui a0, 551776
568; RV32-LMULMAX2-NEXT:    addi a0, a0, 1776
569; RV32-LMULMAX2-NEXT:    vmv.s.x v9, a0
570; RV32-LMULMAX2-NEXT:    lui a0, 945060
571; RV32-LMULMAX2-NEXT:    addi a0, a0, -1793
572; RV32-LMULMAX2-NEXT:    vmv.s.x v10, a0
573; RV32-LMULMAX2-NEXT:    ret
574;
575; RV64-LMULMAX2-LABEL: buildvec_mask_v128i1:
576; RV64-LMULMAX2:       # %bb.0:
577; RV64-LMULMAX2-NEXT:    lui a0, 748384
578; RV64-LMULMAX2-NEXT:    addiw a0, a0, 1776
579; RV64-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
580; RV64-LMULMAX2-NEXT:    vmv.s.x v0, a0
581; RV64-LMULMAX2-NEXT:    lui a0, 748388
582; RV64-LMULMAX2-NEXT:    addiw a0, a0, -1793
583; RV64-LMULMAX2-NEXT:    vmv.s.x v8, a0
584; RV64-LMULMAX2-NEXT:    lui a0, 551776
585; RV64-LMULMAX2-NEXT:    addiw a0, a0, 1776
586; RV64-LMULMAX2-NEXT:    vmv.s.x v9, a0
587; RV64-LMULMAX2-NEXT:    lui a0, 945060
588; RV64-LMULMAX2-NEXT:    addiw a0, a0, -1793
589; RV64-LMULMAX2-NEXT:    vmv.s.x v10, a0
590; RV64-LMULMAX2-NEXT:    ret
591;
592; RV32-LMULMAX4-LABEL: buildvec_mask_v128i1:
593; RV32-LMULMAX4:       # %bb.0:
594; RV32-LMULMAX4-NEXT:    lui a0, 748388
595; RV32-LMULMAX4-NEXT:    addi a0, a0, -1793
596; RV32-LMULMAX4-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
597; RV32-LMULMAX4-NEXT:    vmv.s.x v25, a0
598; RV32-LMULMAX4-NEXT:    lui a0, 748384
599; RV32-LMULMAX4-NEXT:    addi a0, a0, 1776
600; RV32-LMULMAX4-NEXT:    vmv.s.x v0, a0
601; RV32-LMULMAX4-NEXT:    vsetvli zero, zero, e32, mf2, tu, mu
602; RV32-LMULMAX4-NEXT:    vslideup.vi v0, v25, 1
603; RV32-LMULMAX4-NEXT:    lui a0, 945060
604; RV32-LMULMAX4-NEXT:    addi a0, a0, -1793
605; RV32-LMULMAX4-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu
606; RV32-LMULMAX4-NEXT:    vmv.s.x v25, a0
607; RV32-LMULMAX4-NEXT:    lui a0, 551776
608; RV32-LMULMAX4-NEXT:    addi a0, a0, 1776
609; RV32-LMULMAX4-NEXT:    vmv.s.x v8, a0
610; RV32-LMULMAX4-NEXT:    vsetvli zero, zero, e32, mf2, tu, mu
611; RV32-LMULMAX4-NEXT:    vslideup.vi v8, v25, 1
612; RV32-LMULMAX4-NEXT:    ret
613;
614; RV64-LMULMAX4-LABEL: buildvec_mask_v128i1:
615; RV64-LMULMAX4:       # %bb.0:
616; RV64-LMULMAX4-NEXT:    lui a0, 841543
617; RV64-LMULMAX4-NEXT:    addiw a0, a0, 511
618; RV64-LMULMAX4-NEXT:    slli a0, a0, 14
619; RV64-LMULMAX4-NEXT:    addi a0, a0, 859
620; RV64-LMULMAX4-NEXT:    slli a0, a0, 17
621; RV64-LMULMAX4-NEXT:    addi a0, a0, 1776
622; RV64-LMULMAX4-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
623; RV64-LMULMAX4-NEXT:    vmv.s.x v8, a0
624; RV64-LMULMAX4-NEXT:    lui a0, 1048429
625; RV64-LMULMAX4-NEXT:    addiw a0, a0, 1735
626; RV64-LMULMAX4-NEXT:    slli a0, a0, 13
627; RV64-LMULMAX4-NEXT:    addi a0, a0, 1023
628; RV64-LMULMAX4-NEXT:    slli a0, a0, 13
629; RV64-LMULMAX4-NEXT:    addi a0, a0, -1189
630; RV64-LMULMAX4-NEXT:    slli a0, a0, 17
631; RV64-LMULMAX4-NEXT:    addi a0, a0, 1776
632; RV64-LMULMAX4-NEXT:    vmv.s.x v0, a0
633; RV64-LMULMAX4-NEXT:    ret
634;
635; RV32-LMULMAX8-LABEL: buildvec_mask_v128i1:
636; RV32-LMULMAX8:       # %bb.0:
637; RV32-LMULMAX8-NEXT:    lui a0, 748388
638; RV32-LMULMAX8-NEXT:    addi a0, a0, -1793
639; RV32-LMULMAX8-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
640; RV32-LMULMAX8-NEXT:    vmv.s.x v25, a0
641; RV32-LMULMAX8-NEXT:    lui a0, 748384
642; RV32-LMULMAX8-NEXT:    addi a0, a0, 1776
643; RV32-LMULMAX8-NEXT:    vmv.s.x v0, a0
644; RV32-LMULMAX8-NEXT:    vsetivli zero, 2, e32, m1, tu, mu
645; RV32-LMULMAX8-NEXT:    vslideup.vi v0, v25, 1
646; RV32-LMULMAX8-NEXT:    lui a0, 551776
647; RV32-LMULMAX8-NEXT:    addi a0, a0, 1776
648; RV32-LMULMAX8-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
649; RV32-LMULMAX8-NEXT:    vmv.s.x v25, a0
650; RV32-LMULMAX8-NEXT:    vsetivli zero, 3, e32, m1, tu, mu
651; RV32-LMULMAX8-NEXT:    vslideup.vi v0, v25, 2
652; RV32-LMULMAX8-NEXT:    lui a0, 945060
653; RV32-LMULMAX8-NEXT:    addi a0, a0, -1793
654; RV32-LMULMAX8-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
655; RV32-LMULMAX8-NEXT:    vmv.s.x v25, a0
656; RV32-LMULMAX8-NEXT:    vsetvli zero, zero, e32, m1, tu, mu
657; RV32-LMULMAX8-NEXT:    vslideup.vi v0, v25, 3
658; RV32-LMULMAX8-NEXT:    ret
659;
660; RV64-LMULMAX8-LABEL: buildvec_mask_v128i1:
661; RV64-LMULMAX8:       # %bb.0:
662; RV64-LMULMAX8-NEXT:    lui a0, 841543
663; RV64-LMULMAX8-NEXT:    addiw a0, a0, 511
664; RV64-LMULMAX8-NEXT:    slli a0, a0, 14
665; RV64-LMULMAX8-NEXT:    addi a0, a0, 859
666; RV64-LMULMAX8-NEXT:    slli a0, a0, 17
667; RV64-LMULMAX8-NEXT:    addi a0, a0, 1776
668; RV64-LMULMAX8-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
669; RV64-LMULMAX8-NEXT:    vmv.s.x v25, a0
670; RV64-LMULMAX8-NEXT:    lui a0, 1048429
671; RV64-LMULMAX8-NEXT:    addiw a0, a0, 1735
672; RV64-LMULMAX8-NEXT:    slli a0, a0, 13
673; RV64-LMULMAX8-NEXT:    addi a0, a0, 1023
674; RV64-LMULMAX8-NEXT:    slli a0, a0, 13
675; RV64-LMULMAX8-NEXT:    addi a0, a0, -1189
676; RV64-LMULMAX8-NEXT:    slli a0, a0, 17
677; RV64-LMULMAX8-NEXT:    addi a0, a0, 1776
678; RV64-LMULMAX8-NEXT:    vmv.s.x v0, a0
679; RV64-LMULMAX8-NEXT:    vsetvli zero, zero, e64, m1, tu, mu
680; RV64-LMULMAX8-NEXT:    vslideup.vi v0, v25, 1
681; RV64-LMULMAX8-NEXT:    ret
682  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>
683}
684
685define <128 x i1> @buildvec_mask_optsize_v128i1() optsize {
686; RV32-LMULMAX1-LABEL: buildvec_mask_optsize_v128i1:
687; RV32-LMULMAX1:       # %bb.0:
688; RV32-LMULMAX1-NEXT:    addi a0, zero, 1776
689; RV32-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
690; RV32-LMULMAX1-NEXT:    vmv.s.x v0, a0
691; RV32-LMULMAX1-NEXT:    lui a0, 11
692; RV32-LMULMAX1-NEXT:    addi a0, a0, 1718
693; RV32-LMULMAX1-NEXT:    vmv.s.x v8, a0
694; RV32-LMULMAX1-NEXT:    lui a0, 8
695; RV32-LMULMAX1-NEXT:    addi a0, a0, 1718
696; RV32-LMULMAX1-NEXT:    vmv.s.x v12, a0
697; RV32-LMULMAX1-NEXT:    lui a0, 4
698; RV32-LMULMAX1-NEXT:    addi a0, a0, -1793
699; RV32-LMULMAX1-NEXT:    vmv.s.x v9, a0
700; RV32-LMULMAX1-NEXT:    lui a0, 14
701; RV32-LMULMAX1-NEXT:    addi a0, a0, 1722
702; RV32-LMULMAX1-NEXT:    vmv.s.x v14, a0
703; RV32-LMULMAX1-NEXT:    vmv1r.v v10, v8
704; RV32-LMULMAX1-NEXT:    vmv1r.v v11, v0
705; RV32-LMULMAX1-NEXT:    vmv1r.v v13, v9
706; RV32-LMULMAX1-NEXT:    ret
707;
708; RV64-LMULMAX1-LABEL: buildvec_mask_optsize_v128i1:
709; RV64-LMULMAX1:       # %bb.0:
710; RV64-LMULMAX1-NEXT:    addi a0, zero, 1776
711; RV64-LMULMAX1-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
712; RV64-LMULMAX1-NEXT:    vmv.s.x v0, a0
713; RV64-LMULMAX1-NEXT:    lui a0, 11
714; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1718
715; RV64-LMULMAX1-NEXT:    vmv.s.x v8, a0
716; RV64-LMULMAX1-NEXT:    lui a0, 8
717; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1718
718; RV64-LMULMAX1-NEXT:    vmv.s.x v12, a0
719; RV64-LMULMAX1-NEXT:    lui a0, 4
720; RV64-LMULMAX1-NEXT:    addiw a0, a0, -1793
721; RV64-LMULMAX1-NEXT:    vmv.s.x v9, a0
722; RV64-LMULMAX1-NEXT:    lui a0, 14
723; RV64-LMULMAX1-NEXT:    addiw a0, a0, 1722
724; RV64-LMULMAX1-NEXT:    vmv.s.x v14, a0
725; RV64-LMULMAX1-NEXT:    vmv1r.v v10, v8
726; RV64-LMULMAX1-NEXT:    vmv1r.v v11, v0
727; RV64-LMULMAX1-NEXT:    vmv1r.v v13, v9
728; RV64-LMULMAX1-NEXT:    ret
729;
730; RV32-LMULMAX2-LABEL: buildvec_mask_optsize_v128i1:
731; RV32-LMULMAX2:       # %bb.0:
732; RV32-LMULMAX2-NEXT:    lui a0, 748384
733; RV32-LMULMAX2-NEXT:    addi a0, a0, 1776
734; RV32-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
735; RV32-LMULMAX2-NEXT:    vmv.s.x v0, a0
736; RV32-LMULMAX2-NEXT:    lui a0, 748388
737; RV32-LMULMAX2-NEXT:    addi a0, a0, -1793
738; RV32-LMULMAX2-NEXT:    vmv.s.x v8, a0
739; RV32-LMULMAX2-NEXT:    lui a0, 551776
740; RV32-LMULMAX2-NEXT:    addi a0, a0, 1776
741; RV32-LMULMAX2-NEXT:    vmv.s.x v9, a0
742; RV32-LMULMAX2-NEXT:    lui a0, 945060
743; RV32-LMULMAX2-NEXT:    addi a0, a0, -1793
744; RV32-LMULMAX2-NEXT:    vmv.s.x v10, a0
745; RV32-LMULMAX2-NEXT:    ret
746;
747; RV64-LMULMAX2-LABEL: buildvec_mask_optsize_v128i1:
748; RV64-LMULMAX2:       # %bb.0:
749; RV64-LMULMAX2-NEXT:    lui a0, 748384
750; RV64-LMULMAX2-NEXT:    addiw a0, a0, 1776
751; RV64-LMULMAX2-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
752; RV64-LMULMAX2-NEXT:    vmv.s.x v0, a0
753; RV64-LMULMAX2-NEXT:    lui a0, 748388
754; RV64-LMULMAX2-NEXT:    addiw a0, a0, -1793
755; RV64-LMULMAX2-NEXT:    vmv.s.x v8, a0
756; RV64-LMULMAX2-NEXT:    lui a0, 551776
757; RV64-LMULMAX2-NEXT:    addiw a0, a0, 1776
758; RV64-LMULMAX2-NEXT:    vmv.s.x v9, a0
759; RV64-LMULMAX2-NEXT:    lui a0, 945060
760; RV64-LMULMAX2-NEXT:    addiw a0, a0, -1793
761; RV64-LMULMAX2-NEXT:    vmv.s.x v10, a0
762; RV64-LMULMAX2-NEXT:    ret
763;
764; RV32-LMULMAX4-LABEL: buildvec_mask_optsize_v128i1:
765; RV32-LMULMAX4:       # %bb.0:
766; RV32-LMULMAX4-NEXT:    lui a0, %hi(.LCPI21_0)
767; RV32-LMULMAX4-NEXT:    addi a0, a0, %lo(.LCPI21_0)
768; RV32-LMULMAX4-NEXT:    addi a1, zero, 64
769; RV32-LMULMAX4-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
770; RV32-LMULMAX4-NEXT:    vle1.v v0, (a0)
771; RV32-LMULMAX4-NEXT:    lui a0, %hi(.LCPI21_1)
772; RV32-LMULMAX4-NEXT:    addi a0, a0, %lo(.LCPI21_1)
773; RV32-LMULMAX4-NEXT:    vle1.v v8, (a0)
774; RV32-LMULMAX4-NEXT:    ret
775;
776; RV64-LMULMAX4-LABEL: buildvec_mask_optsize_v128i1:
777; RV64-LMULMAX4:       # %bb.0:
778; RV64-LMULMAX4-NEXT:    lui a0, 841543
779; RV64-LMULMAX4-NEXT:    addiw a0, a0, 511
780; RV64-LMULMAX4-NEXT:    slli a0, a0, 14
781; RV64-LMULMAX4-NEXT:    addi a0, a0, 859
782; RV64-LMULMAX4-NEXT:    slli a0, a0, 17
783; RV64-LMULMAX4-NEXT:    addi a0, a0, 1776
784; RV64-LMULMAX4-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
785; RV64-LMULMAX4-NEXT:    vmv.s.x v8, a0
786; RV64-LMULMAX4-NEXT:    lui a0, 1048429
787; RV64-LMULMAX4-NEXT:    addiw a0, a0, 1735
788; RV64-LMULMAX4-NEXT:    slli a0, a0, 13
789; RV64-LMULMAX4-NEXT:    addi a0, a0, 1023
790; RV64-LMULMAX4-NEXT:    slli a0, a0, 13
791; RV64-LMULMAX4-NEXT:    addi a0, a0, -1189
792; RV64-LMULMAX4-NEXT:    slli a0, a0, 17
793; RV64-LMULMAX4-NEXT:    addi a0, a0, 1776
794; RV64-LMULMAX4-NEXT:    vmv.s.x v0, a0
795; RV64-LMULMAX4-NEXT:    ret
796;
797; RV32-LMULMAX8-LABEL: buildvec_mask_optsize_v128i1:
798; RV32-LMULMAX8:       # %bb.0:
799; RV32-LMULMAX8-NEXT:    lui a0, %hi(.LCPI21_0)
800; RV32-LMULMAX8-NEXT:    addi a0, a0, %lo(.LCPI21_0)
801; RV32-LMULMAX8-NEXT:    addi a1, zero, 128
802; RV32-LMULMAX8-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
803; RV32-LMULMAX8-NEXT:    vle1.v v0, (a0)
804; RV32-LMULMAX8-NEXT:    ret
805;
806; RV64-LMULMAX8-LABEL: buildvec_mask_optsize_v128i1:
807; RV64-LMULMAX8:       # %bb.0:
808; RV64-LMULMAX8-NEXT:    lui a0, %hi(.LCPI21_0)
809; RV64-LMULMAX8-NEXT:    addi a0, a0, %lo(.LCPI21_0)
810; RV64-LMULMAX8-NEXT:    addi a1, zero, 128
811; RV64-LMULMAX8-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
812; RV64-LMULMAX8-NEXT:    vle1.v v0, (a0)
813; RV64-LMULMAX8-NEXT:    ret
814  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>
815}
816