Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vreductions-mask.ll
blobb18e235bb9765007bdb1c9020adb2455d8f6bd69
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v -verify-machineinstrs -riscv-v-fixed-length-vector-lmul-max=1 < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX1
3 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v -verify-machineinstrs -riscv-v-fixed-length-vector-lmul-max=1 < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX1
4 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v -verify-machineinstrs -riscv-v-fixed-length-vector-lmul-max=8 < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX8
5 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v -verify-machineinstrs -riscv-v-fixed-length-vector-lmul-max=8 < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX8
7 declare i1 @llvm.vector.reduce.or.v1i1(<1 x i1>)
9 define zeroext i1 @vreduce_or_v1i1(<1 x i1> %v) {
10 ; CHECK-LABEL: vreduce_or_v1i1:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
13 ; CHECK-NEXT:    vfirst.m a0, v0
14 ; CHECK-NEXT:    seqz a0, a0
15 ; CHECK-NEXT:    ret
16   %red = call i1 @llvm.vector.reduce.or.v1i1(<1 x i1> %v)
17   ret i1 %red
20 declare i1 @llvm.vector.reduce.xor.v1i1(<1 x i1>)
22 define zeroext i1 @vreduce_xor_v1i1(<1 x i1> %v) {
23 ; CHECK-LABEL: vreduce_xor_v1i1:
24 ; CHECK:       # %bb.0:
25 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
26 ; CHECK-NEXT:    vfirst.m a0, v0
27 ; CHECK-NEXT:    seqz a0, a0
28 ; CHECK-NEXT:    ret
29   %red = call i1 @llvm.vector.reduce.xor.v1i1(<1 x i1> %v)
30   ret i1 %red
33 declare i1 @llvm.vector.reduce.and.v1i1(<1 x i1>)
35 define zeroext i1 @vreduce_and_v1i1(<1 x i1> %v) {
36 ; CHECK-LABEL: vreduce_and_v1i1:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
39 ; CHECK-NEXT:    vfirst.m a0, v0
40 ; CHECK-NEXT:    seqz a0, a0
41 ; CHECK-NEXT:    ret
42   %red = call i1 @llvm.vector.reduce.and.v1i1(<1 x i1> %v)
43   ret i1 %red
46 declare i1 @llvm.vector.reduce.umax.v1i1(<1 x i1>)
48 define zeroext i1 @vreduce_umax_v1i1(<1 x i1> %v) {
49 ; CHECK-LABEL: vreduce_umax_v1i1:
50 ; CHECK:       # %bb.0:
51 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
52 ; CHECK-NEXT:    vfirst.m a0, v0
53 ; CHECK-NEXT:    seqz a0, a0
54 ; CHECK-NEXT:    ret
55   %red = call i1 @llvm.vector.reduce.umax.v1i1(<1 x i1> %v)
56   ret i1 %red
59 declare i1 @llvm.vector.reduce.smax.v1i1(<1 x i1>)
61 define zeroext i1 @vreduce_smax_v1i1(<1 x i1> %v) {
62 ; CHECK-LABEL: vreduce_smax_v1i1:
63 ; CHECK:       # %bb.0:
64 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
65 ; CHECK-NEXT:    vfirst.m a0, v0
66 ; CHECK-NEXT:    seqz a0, a0
67 ; CHECK-NEXT:    ret
68   %red = call i1 @llvm.vector.reduce.smax.v1i1(<1 x i1> %v)
69   ret i1 %red
72 declare i1 @llvm.vector.reduce.umin.v1i1(<1 x i1>)
74 define zeroext i1 @vreduce_umin_v1i1(<1 x i1> %v) {
75 ; CHECK-LABEL: vreduce_umin_v1i1:
76 ; CHECK:       # %bb.0:
77 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
78 ; CHECK-NEXT:    vfirst.m a0, v0
79 ; CHECK-NEXT:    seqz a0, a0
80 ; CHECK-NEXT:    ret
81   %red = call i1 @llvm.vector.reduce.umin.v1i1(<1 x i1> %v)
82   ret i1 %red
85 declare i1 @llvm.vector.reduce.smin.v1i1(<1 x i1>)
87 define zeroext i1 @vreduce_smin_v1i1(<1 x i1> %v) {
88 ; CHECK-LABEL: vreduce_smin_v1i1:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
91 ; CHECK-NEXT:    vfirst.m a0, v0
92 ; CHECK-NEXT:    seqz a0, a0
93 ; CHECK-NEXT:    ret
94   %red = call i1 @llvm.vector.reduce.smin.v1i1(<1 x i1> %v)
95   ret i1 %red
98 declare i1 @llvm.vector.reduce.or.v2i1(<2 x i1>)
100 define zeroext i1 @vreduce_or_v2i1(<2 x i1> %v) {
101 ; CHECK-LABEL: vreduce_or_v2i1:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
104 ; CHECK-NEXT:    vcpop.m a0, v0
105 ; CHECK-NEXT:    snez a0, a0
106 ; CHECK-NEXT:    ret
107   %red = call i1 @llvm.vector.reduce.or.v2i1(<2 x i1> %v)
108   ret i1 %red
111 declare i1 @llvm.vector.reduce.xor.v2i1(<2 x i1>)
113 define zeroext i1 @vreduce_xor_v2i1(<2 x i1> %v) {
114 ; CHECK-LABEL: vreduce_xor_v2i1:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
117 ; CHECK-NEXT:    vcpop.m a0, v0
118 ; CHECK-NEXT:    andi a0, a0, 1
119 ; CHECK-NEXT:    ret
120   %red = call i1 @llvm.vector.reduce.xor.v2i1(<2 x i1> %v)
121   ret i1 %red
124 declare i1 @llvm.vector.reduce.and.v2i1(<2 x i1>)
126 define zeroext i1 @vreduce_and_v2i1(<2 x i1> %v) {
127 ; CHECK-LABEL: vreduce_and_v2i1:
128 ; CHECK:       # %bb.0:
129 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
130 ; CHECK-NEXT:    vmnot.m v8, v0
131 ; CHECK-NEXT:    vcpop.m a0, v8
132 ; CHECK-NEXT:    seqz a0, a0
133 ; CHECK-NEXT:    ret
134   %red = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %v)
135   ret i1 %red
138 declare i1 @llvm.vector.reduce.umax.v2i1(<2 x i1>)
140 define zeroext i1 @vreduce_umax_v2i1(<2 x i1> %v) {
141 ; CHECK-LABEL: vreduce_umax_v2i1:
142 ; CHECK:       # %bb.0:
143 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
144 ; CHECK-NEXT:    vcpop.m a0, v0
145 ; CHECK-NEXT:    snez a0, a0
146 ; CHECK-NEXT:    ret
147   %red = call i1 @llvm.vector.reduce.umax.v2i1(<2 x i1> %v)
148   ret i1 %red
151 declare i1 @llvm.vector.reduce.smax.v2i1(<2 x i1>)
153 define zeroext i1 @vreduce_smax_v2i1(<2 x i1> %v) {
154 ; CHECK-LABEL: vreduce_smax_v2i1:
155 ; CHECK:       # %bb.0:
156 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
157 ; CHECK-NEXT:    vmnot.m v8, v0
158 ; CHECK-NEXT:    vcpop.m a0, v8
159 ; CHECK-NEXT:    seqz a0, a0
160 ; CHECK-NEXT:    ret
161   %red = call i1 @llvm.vector.reduce.smax.v2i1(<2 x i1> %v)
162   ret i1 %red
165 declare i1 @llvm.vector.reduce.umin.v2i1(<2 x i1>)
167 define zeroext i1 @vreduce_umin_v2i1(<2 x i1> %v) {
168 ; CHECK-LABEL: vreduce_umin_v2i1:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
171 ; CHECK-NEXT:    vmnot.m v8, v0
172 ; CHECK-NEXT:    vcpop.m a0, v8
173 ; CHECK-NEXT:    seqz a0, a0
174 ; CHECK-NEXT:    ret
175   %red = call i1 @llvm.vector.reduce.umin.v2i1(<2 x i1> %v)
176   ret i1 %red
179 declare i1 @llvm.vector.reduce.smin.v2i1(<2 x i1>)
181 define zeroext i1 @vreduce_smin_v2i1(<2 x i1> %v) {
182 ; CHECK-LABEL: vreduce_smin_v2i1:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
185 ; CHECK-NEXT:    vcpop.m a0, v0
186 ; CHECK-NEXT:    snez a0, a0
187 ; CHECK-NEXT:    ret
188   %red = call i1 @llvm.vector.reduce.smin.v2i1(<2 x i1> %v)
189   ret i1 %red
192 declare i1 @llvm.vector.reduce.or.v4i1(<4 x i1>)
194 define zeroext i1 @vreduce_or_v4i1(<4 x i1> %v) {
195 ; CHECK-LABEL: vreduce_or_v4i1:
196 ; CHECK:       # %bb.0:
197 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
198 ; CHECK-NEXT:    vcpop.m a0, v0
199 ; CHECK-NEXT:    snez a0, a0
200 ; CHECK-NEXT:    ret
201   %red = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> %v)
202   ret i1 %red
205 declare i1 @llvm.vector.reduce.xor.v4i1(<4 x i1>)
207 define zeroext i1 @vreduce_xor_v4i1(<4 x i1> %v) {
208 ; CHECK-LABEL: vreduce_xor_v4i1:
209 ; CHECK:       # %bb.0:
210 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
211 ; CHECK-NEXT:    vcpop.m a0, v0
212 ; CHECK-NEXT:    andi a0, a0, 1
213 ; CHECK-NEXT:    ret
214   %red = call i1 @llvm.vector.reduce.xor.v4i1(<4 x i1> %v)
215   ret i1 %red
218 declare i1 @llvm.vector.reduce.and.v4i1(<4 x i1>)
220 define zeroext i1 @vreduce_and_v4i1(<4 x i1> %v) {
221 ; CHECK-LABEL: vreduce_and_v4i1:
222 ; CHECK:       # %bb.0:
223 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
224 ; CHECK-NEXT:    vmnot.m v8, v0
225 ; CHECK-NEXT:    vcpop.m a0, v8
226 ; CHECK-NEXT:    seqz a0, a0
227 ; CHECK-NEXT:    ret
228   %red = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %v)
229   ret i1 %red
232 declare i1 @llvm.vector.reduce.umax.v4i1(<4 x i1>)
234 define zeroext i1 @vreduce_umax_v4i1(<4 x i1> %v) {
235 ; CHECK-LABEL: vreduce_umax_v4i1:
236 ; CHECK:       # %bb.0:
237 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
238 ; CHECK-NEXT:    vcpop.m a0, v0
239 ; CHECK-NEXT:    snez a0, a0
240 ; CHECK-NEXT:    ret
241   %red = call i1 @llvm.vector.reduce.umax.v4i1(<4 x i1> %v)
242   ret i1 %red
245 declare i1 @llvm.vector.reduce.smax.v4i1(<4 x i1>)
247 define zeroext i1 @vreduce_smax_v4i1(<4 x i1> %v) {
248 ; CHECK-LABEL: vreduce_smax_v4i1:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
251 ; CHECK-NEXT:    vmnot.m v8, v0
252 ; CHECK-NEXT:    vcpop.m a0, v8
253 ; CHECK-NEXT:    seqz a0, a0
254 ; CHECK-NEXT:    ret
255   %red = call i1 @llvm.vector.reduce.smax.v4i1(<4 x i1> %v)
256   ret i1 %red
259 declare i1 @llvm.vector.reduce.umin.v4i1(<4 x i1>)
261 define zeroext i1 @vreduce_umin_v4i1(<4 x i1> %v) {
262 ; CHECK-LABEL: vreduce_umin_v4i1:
263 ; CHECK:       # %bb.0:
264 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
265 ; CHECK-NEXT:    vmnot.m v8, v0
266 ; CHECK-NEXT:    vcpop.m a0, v8
267 ; CHECK-NEXT:    seqz a0, a0
268 ; CHECK-NEXT:    ret
269   %red = call i1 @llvm.vector.reduce.umin.v4i1(<4 x i1> %v)
270   ret i1 %red
273 declare i1 @llvm.vector.reduce.smin.v4i1(<4 x i1>)
275 define zeroext i1 @vreduce_smin_v4i1(<4 x i1> %v) {
276 ; CHECK-LABEL: vreduce_smin_v4i1:
277 ; CHECK:       # %bb.0:
278 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
279 ; CHECK-NEXT:    vcpop.m a0, v0
280 ; CHECK-NEXT:    snez a0, a0
281 ; CHECK-NEXT:    ret
282   %red = call i1 @llvm.vector.reduce.smin.v4i1(<4 x i1> %v)
283   ret i1 %red
286 declare i1 @llvm.vector.reduce.or.v8i1(<8 x i1>)
288 define zeroext i1 @vreduce_or_v8i1(<8 x i1> %v) {
289 ; CHECK-LABEL: vreduce_or_v8i1:
290 ; CHECK:       # %bb.0:
291 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
292 ; CHECK-NEXT:    vcpop.m a0, v0
293 ; CHECK-NEXT:    snez a0, a0
294 ; CHECK-NEXT:    ret
295   %red = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %v)
296   ret i1 %red
299 declare i1 @llvm.vector.reduce.xor.v8i1(<8 x i1>)
301 define zeroext i1 @vreduce_xor_v8i1(<8 x i1> %v) {
302 ; CHECK-LABEL: vreduce_xor_v8i1:
303 ; CHECK:       # %bb.0:
304 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
305 ; CHECK-NEXT:    vcpop.m a0, v0
306 ; CHECK-NEXT:    andi a0, a0, 1
307 ; CHECK-NEXT:    ret
308   %red = call i1 @llvm.vector.reduce.xor.v8i1(<8 x i1> %v)
309   ret i1 %red
312 declare i1 @llvm.vector.reduce.and.v8i1(<8 x i1>)
314 define zeroext i1 @vreduce_and_v8i1(<8 x i1> %v) {
315 ; CHECK-LABEL: vreduce_and_v8i1:
316 ; CHECK:       # %bb.0:
317 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
318 ; CHECK-NEXT:    vmnot.m v8, v0
319 ; CHECK-NEXT:    vcpop.m a0, v8
320 ; CHECK-NEXT:    seqz a0, a0
321 ; CHECK-NEXT:    ret
322   %red = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %v)
323   ret i1 %red
326 declare i1 @llvm.vector.reduce.umax.v8i1(<8 x i1>)
328 define zeroext i1 @vreduce_umax_v8i1(<8 x i1> %v) {
329 ; CHECK-LABEL: vreduce_umax_v8i1:
330 ; CHECK:       # %bb.0:
331 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
332 ; CHECK-NEXT:    vcpop.m a0, v0
333 ; CHECK-NEXT:    snez a0, a0
334 ; CHECK-NEXT:    ret
335   %red = call i1 @llvm.vector.reduce.umax.v8i1(<8 x i1> %v)
336   ret i1 %red
339 declare i1 @llvm.vector.reduce.smax.v8i1(<8 x i1>)
341 define zeroext i1 @vreduce_smax_v8i1(<8 x i1> %v) {
342 ; CHECK-LABEL: vreduce_smax_v8i1:
343 ; CHECK:       # %bb.0:
344 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
345 ; CHECK-NEXT:    vmnot.m v8, v0
346 ; CHECK-NEXT:    vcpop.m a0, v8
347 ; CHECK-NEXT:    seqz a0, a0
348 ; CHECK-NEXT:    ret
349   %red = call i1 @llvm.vector.reduce.smax.v8i1(<8 x i1> %v)
350   ret i1 %red
353 declare i1 @llvm.vector.reduce.umin.v8i1(<8 x i1>)
355 define zeroext i1 @vreduce_umin_v8i1(<8 x i1> %v) {
356 ; CHECK-LABEL: vreduce_umin_v8i1:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
359 ; CHECK-NEXT:    vmnot.m v8, v0
360 ; CHECK-NEXT:    vcpop.m a0, v8
361 ; CHECK-NEXT:    seqz a0, a0
362 ; CHECK-NEXT:    ret
363   %red = call i1 @llvm.vector.reduce.umin.v8i1(<8 x i1> %v)
364   ret i1 %red
367 declare i1 @llvm.vector.reduce.smin.v8i1(<8 x i1>)
369 define zeroext i1 @vreduce_smin_v8i1(<8 x i1> %v) {
370 ; CHECK-LABEL: vreduce_smin_v8i1:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
373 ; CHECK-NEXT:    vcpop.m a0, v0
374 ; CHECK-NEXT:    snez a0, a0
375 ; CHECK-NEXT:    ret
376   %red = call i1 @llvm.vector.reduce.smin.v8i1(<8 x i1> %v)
377   ret i1 %red
380 declare i1 @llvm.vector.reduce.or.v16i1(<16 x i1>)
382 define zeroext i1 @vreduce_or_v16i1(<16 x i1> %v) {
383 ; CHECK-LABEL: vreduce_or_v16i1:
384 ; CHECK:       # %bb.0:
385 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
386 ; CHECK-NEXT:    vcpop.m a0, v0
387 ; CHECK-NEXT:    snez a0, a0
388 ; CHECK-NEXT:    ret
389   %red = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %v)
390   ret i1 %red
393 declare i1 @llvm.vector.reduce.xor.v16i1(<16 x i1>)
395 define zeroext i1 @vreduce_xor_v16i1(<16 x i1> %v) {
396 ; CHECK-LABEL: vreduce_xor_v16i1:
397 ; CHECK:       # %bb.0:
398 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
399 ; CHECK-NEXT:    vcpop.m a0, v0
400 ; CHECK-NEXT:    andi a0, a0, 1
401 ; CHECK-NEXT:    ret
402   %red = call i1 @llvm.vector.reduce.xor.v16i1(<16 x i1> %v)
403   ret i1 %red
406 declare i1 @llvm.vector.reduce.and.v16i1(<16 x i1>)
408 define zeroext i1 @vreduce_and_v16i1(<16 x i1> %v) {
409 ; CHECK-LABEL: vreduce_and_v16i1:
410 ; CHECK:       # %bb.0:
411 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
412 ; CHECK-NEXT:    vmnot.m v8, v0
413 ; CHECK-NEXT:    vcpop.m a0, v8
414 ; CHECK-NEXT:    seqz a0, a0
415 ; CHECK-NEXT:    ret
416   %red = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %v)
417   ret i1 %red
420 declare i1 @llvm.vector.reduce.umax.v16i1(<16 x i1>)
422 define zeroext i1 @vreduce_umax_v16i1(<16 x i1> %v) {
423 ; CHECK-LABEL: vreduce_umax_v16i1:
424 ; CHECK:       # %bb.0:
425 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
426 ; CHECK-NEXT:    vcpop.m a0, v0
427 ; CHECK-NEXT:    snez a0, a0
428 ; CHECK-NEXT:    ret
429   %red = call i1 @llvm.vector.reduce.umax.v16i1(<16 x i1> %v)
430   ret i1 %red
433 declare i1 @llvm.vector.reduce.smax.v16i1(<16 x i1>)
435 define zeroext i1 @vreduce_smax_v16i1(<16 x i1> %v) {
436 ; CHECK-LABEL: vreduce_smax_v16i1:
437 ; CHECK:       # %bb.0:
438 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
439 ; CHECK-NEXT:    vmnot.m v8, v0
440 ; CHECK-NEXT:    vcpop.m a0, v8
441 ; CHECK-NEXT:    seqz a0, a0
442 ; CHECK-NEXT:    ret
443   %red = call i1 @llvm.vector.reduce.smax.v16i1(<16 x i1> %v)
444   ret i1 %red
447 declare i1 @llvm.vector.reduce.umin.v16i1(<16 x i1>)
449 define zeroext i1 @vreduce_umin_v16i1(<16 x i1> %v) {
450 ; CHECK-LABEL: vreduce_umin_v16i1:
451 ; CHECK:       # %bb.0:
452 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
453 ; CHECK-NEXT:    vmnot.m v8, v0
454 ; CHECK-NEXT:    vcpop.m a0, v8
455 ; CHECK-NEXT:    seqz a0, a0
456 ; CHECK-NEXT:    ret
457   %red = call i1 @llvm.vector.reduce.umin.v16i1(<16 x i1> %v)
458   ret i1 %red
461 declare i1 @llvm.vector.reduce.smin.v16i1(<16 x i1>)
463 define zeroext i1 @vreduce_smin_v16i1(<16 x i1> %v) {
464 ; CHECK-LABEL: vreduce_smin_v16i1:
465 ; CHECK:       # %bb.0:
466 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
467 ; CHECK-NEXT:    vcpop.m a0, v0
468 ; CHECK-NEXT:    snez a0, a0
469 ; CHECK-NEXT:    ret
470   %red = call i1 @llvm.vector.reduce.smin.v16i1(<16 x i1> %v)
471   ret i1 %red
474 declare i1 @llvm.vector.reduce.or.v32i1(<32 x i1>)
476 define zeroext i1 @vreduce_or_v32i1(<32 x i1> %v) {
477 ; LMULMAX1-LABEL: vreduce_or_v32i1:
478 ; LMULMAX1:       # %bb.0:
479 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
480 ; LMULMAX1-NEXT:    vmor.mm v8, v0, v8
481 ; LMULMAX1-NEXT:    vcpop.m a0, v8
482 ; LMULMAX1-NEXT:    snez a0, a0
483 ; LMULMAX1-NEXT:    ret
485 ; LMULMAX8-LABEL: vreduce_or_v32i1:
486 ; LMULMAX8:       # %bb.0:
487 ; LMULMAX8-NEXT:    li a0, 32
488 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
489 ; LMULMAX8-NEXT:    vcpop.m a0, v0
490 ; LMULMAX8-NEXT:    snez a0, a0
491 ; LMULMAX8-NEXT:    ret
492   %red = call i1 @llvm.vector.reduce.or.v32i1(<32 x i1> %v)
493   ret i1 %red
496 declare i1 @llvm.vector.reduce.xor.v32i1(<32 x i1>)
498 define zeroext i1 @vreduce_xor_v32i1(<32 x i1> %v) {
499 ; LMULMAX1-LABEL: vreduce_xor_v32i1:
500 ; LMULMAX1:       # %bb.0:
501 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
502 ; LMULMAX1-NEXT:    vmxor.mm v8, v0, v8
503 ; LMULMAX1-NEXT:    vcpop.m a0, v8
504 ; LMULMAX1-NEXT:    andi a0, a0, 1
505 ; LMULMAX1-NEXT:    ret
507 ; LMULMAX8-LABEL: vreduce_xor_v32i1:
508 ; LMULMAX8:       # %bb.0:
509 ; LMULMAX8-NEXT:    li a0, 32
510 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
511 ; LMULMAX8-NEXT:    vcpop.m a0, v0
512 ; LMULMAX8-NEXT:    andi a0, a0, 1
513 ; LMULMAX8-NEXT:    ret
514   %red = call i1 @llvm.vector.reduce.xor.v32i1(<32 x i1> %v)
515   ret i1 %red
518 declare i1 @llvm.vector.reduce.and.v32i1(<32 x i1>)
520 define zeroext i1 @vreduce_and_v32i1(<32 x i1> %v) {
521 ; LMULMAX1-LABEL: vreduce_and_v32i1:
522 ; LMULMAX1:       # %bb.0:
523 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
524 ; LMULMAX1-NEXT:    vmnand.mm v8, v0, v8
525 ; LMULMAX1-NEXT:    vcpop.m a0, v8
526 ; LMULMAX1-NEXT:    seqz a0, a0
527 ; LMULMAX1-NEXT:    ret
529 ; LMULMAX8-LABEL: vreduce_and_v32i1:
530 ; LMULMAX8:       # %bb.0:
531 ; LMULMAX8-NEXT:    li a0, 32
532 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
533 ; LMULMAX8-NEXT:    vmnot.m v8, v0
534 ; LMULMAX8-NEXT:    vcpop.m a0, v8
535 ; LMULMAX8-NEXT:    seqz a0, a0
536 ; LMULMAX8-NEXT:    ret
537   %red = call i1 @llvm.vector.reduce.and.v32i1(<32 x i1> %v)
538   ret i1 %red
541 declare i1 @llvm.vector.reduce.umax.v32i1(<32 x i1>)
543 define zeroext i1 @vreduce_umax_v32i1(<32 x i1> %v) {
544 ; LMULMAX1-LABEL: vreduce_umax_v32i1:
545 ; LMULMAX1:       # %bb.0:
546 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
547 ; LMULMAX1-NEXT:    vmor.mm v8, v0, v8
548 ; LMULMAX1-NEXT:    vcpop.m a0, v8
549 ; LMULMAX1-NEXT:    snez a0, a0
550 ; LMULMAX1-NEXT:    ret
552 ; LMULMAX8-LABEL: vreduce_umax_v32i1:
553 ; LMULMAX8:       # %bb.0:
554 ; LMULMAX8-NEXT:    li a0, 32
555 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
556 ; LMULMAX8-NEXT:    vcpop.m a0, v0
557 ; LMULMAX8-NEXT:    snez a0, a0
558 ; LMULMAX8-NEXT:    ret
559   %red = call i1 @llvm.vector.reduce.umax.v32i1(<32 x i1> %v)
560   ret i1 %red
563 declare i1 @llvm.vector.reduce.smax.v32i1(<32 x i1>)
565 define zeroext i1 @vreduce_smax_v32i1(<32 x i1> %v) {
566 ; LMULMAX1-LABEL: vreduce_smax_v32i1:
567 ; LMULMAX1:       # %bb.0:
568 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
569 ; LMULMAX1-NEXT:    vmnand.mm v8, v0, v8
570 ; LMULMAX1-NEXT:    vcpop.m a0, v8
571 ; LMULMAX1-NEXT:    seqz a0, a0
572 ; LMULMAX1-NEXT:    ret
574 ; LMULMAX8-LABEL: vreduce_smax_v32i1:
575 ; LMULMAX8:       # %bb.0:
576 ; LMULMAX8-NEXT:    li a0, 32
577 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
578 ; LMULMAX8-NEXT:    vmnot.m v8, v0
579 ; LMULMAX8-NEXT:    vcpop.m a0, v8
580 ; LMULMAX8-NEXT:    seqz a0, a0
581 ; LMULMAX8-NEXT:    ret
582   %red = call i1 @llvm.vector.reduce.smax.v32i1(<32 x i1> %v)
583   ret i1 %red
586 declare i1 @llvm.vector.reduce.umin.v32i1(<32 x i1>)
588 define zeroext i1 @vreduce_umin_v32i1(<32 x i1> %v) {
589 ; LMULMAX1-LABEL: vreduce_umin_v32i1:
590 ; LMULMAX1:       # %bb.0:
591 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
592 ; LMULMAX1-NEXT:    vmnand.mm v8, v0, v8
593 ; LMULMAX1-NEXT:    vcpop.m a0, v8
594 ; LMULMAX1-NEXT:    seqz a0, a0
595 ; LMULMAX1-NEXT:    ret
597 ; LMULMAX8-LABEL: vreduce_umin_v32i1:
598 ; LMULMAX8:       # %bb.0:
599 ; LMULMAX8-NEXT:    li a0, 32
600 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
601 ; LMULMAX8-NEXT:    vmnot.m v8, v0
602 ; LMULMAX8-NEXT:    vcpop.m a0, v8
603 ; LMULMAX8-NEXT:    seqz a0, a0
604 ; LMULMAX8-NEXT:    ret
605   %red = call i1 @llvm.vector.reduce.umin.v32i1(<32 x i1> %v)
606   ret i1 %red
609 declare i1 @llvm.vector.reduce.smin.v32i1(<32 x i1>)
611 define zeroext i1 @vreduce_smin_v32i1(<32 x i1> %v) {
612 ; LMULMAX1-LABEL: vreduce_smin_v32i1:
613 ; LMULMAX1:       # %bb.0:
614 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
615 ; LMULMAX1-NEXT:    vmor.mm v8, v0, v8
616 ; LMULMAX1-NEXT:    vcpop.m a0, v8
617 ; LMULMAX1-NEXT:    snez a0, a0
618 ; LMULMAX1-NEXT:    ret
620 ; LMULMAX8-LABEL: vreduce_smin_v32i1:
621 ; LMULMAX8:       # %bb.0:
622 ; LMULMAX8-NEXT:    li a0, 32
623 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
624 ; LMULMAX8-NEXT:    vcpop.m a0, v0
625 ; LMULMAX8-NEXT:    snez a0, a0
626 ; LMULMAX8-NEXT:    ret
627   %red = call i1 @llvm.vector.reduce.smin.v32i1(<32 x i1> %v)
628   ret i1 %red
631 declare i1 @llvm.vector.reduce.or.v64i1(<64 x i1>)
633 define zeroext i1 @vreduce_or_v64i1(<64 x i1> %v) {
634 ; LMULMAX1-LABEL: vreduce_or_v64i1:
635 ; LMULMAX1:       # %bb.0:
636 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
637 ; LMULMAX1-NEXT:    vmor.mm v8, v8, v10
638 ; LMULMAX1-NEXT:    vmor.mm v9, v0, v9
639 ; LMULMAX1-NEXT:    vmor.mm v8, v9, v8
640 ; LMULMAX1-NEXT:    vcpop.m a0, v8
641 ; LMULMAX1-NEXT:    snez a0, a0
642 ; LMULMAX1-NEXT:    ret
644 ; LMULMAX8-LABEL: vreduce_or_v64i1:
645 ; LMULMAX8:       # %bb.0:
646 ; LMULMAX8-NEXT:    li a0, 64
647 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
648 ; LMULMAX8-NEXT:    vcpop.m a0, v0
649 ; LMULMAX8-NEXT:    snez a0, a0
650 ; LMULMAX8-NEXT:    ret
651   %red = call i1 @llvm.vector.reduce.or.v64i1(<64 x i1> %v)
652   ret i1 %red
655 declare i1 @llvm.vector.reduce.xor.v64i1(<64 x i1>)
657 define zeroext i1 @vreduce_xor_v64i1(<64 x i1> %v) {
658 ; LMULMAX1-LABEL: vreduce_xor_v64i1:
659 ; LMULMAX1:       # %bb.0:
660 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
661 ; LMULMAX1-NEXT:    vmxor.mm v8, v8, v10
662 ; LMULMAX1-NEXT:    vmxor.mm v9, v0, v9
663 ; LMULMAX1-NEXT:    vmxor.mm v8, v9, v8
664 ; LMULMAX1-NEXT:    vcpop.m a0, v8
665 ; LMULMAX1-NEXT:    andi a0, a0, 1
666 ; LMULMAX1-NEXT:    ret
668 ; LMULMAX8-LABEL: vreduce_xor_v64i1:
669 ; LMULMAX8:       # %bb.0:
670 ; LMULMAX8-NEXT:    li a0, 64
671 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
672 ; LMULMAX8-NEXT:    vcpop.m a0, v0
673 ; LMULMAX8-NEXT:    andi a0, a0, 1
674 ; LMULMAX8-NEXT:    ret
675   %red = call i1 @llvm.vector.reduce.xor.v64i1(<64 x i1> %v)
676   ret i1 %red
679 declare i1 @llvm.vector.reduce.and.v64i1(<64 x i1>)
681 define zeroext i1 @vreduce_and_v64i1(<64 x i1> %v) {
682 ; LMULMAX1-LABEL: vreduce_and_v64i1:
683 ; LMULMAX1:       # %bb.0:
684 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
685 ; LMULMAX1-NEXT:    vmand.mm v8, v8, v10
686 ; LMULMAX1-NEXT:    vmand.mm v9, v0, v9
687 ; LMULMAX1-NEXT:    vmnand.mm v8, v9, v8
688 ; LMULMAX1-NEXT:    vcpop.m a0, v8
689 ; LMULMAX1-NEXT:    seqz a0, a0
690 ; LMULMAX1-NEXT:    ret
692 ; LMULMAX8-LABEL: vreduce_and_v64i1:
693 ; LMULMAX8:       # %bb.0:
694 ; LMULMAX8-NEXT:    li a0, 64
695 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
696 ; LMULMAX8-NEXT:    vmnot.m v8, v0
697 ; LMULMAX8-NEXT:    vcpop.m a0, v8
698 ; LMULMAX8-NEXT:    seqz a0, a0
699 ; LMULMAX8-NEXT:    ret
700   %red = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %v)
701   ret i1 %red
704 declare i1 @llvm.vector.reduce.umax.v64i1(<64 x i1>)
706 define zeroext i1 @vreduce_umax_v64i1(<64 x i1> %v) {
707 ; LMULMAX1-LABEL: vreduce_umax_v64i1:
708 ; LMULMAX1:       # %bb.0:
709 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
710 ; LMULMAX1-NEXT:    vmor.mm v8, v8, v10
711 ; LMULMAX1-NEXT:    vmor.mm v9, v0, v9
712 ; LMULMAX1-NEXT:    vmor.mm v8, v9, v8
713 ; LMULMAX1-NEXT:    vcpop.m a0, v8
714 ; LMULMAX1-NEXT:    snez a0, a0
715 ; LMULMAX1-NEXT:    ret
717 ; LMULMAX8-LABEL: vreduce_umax_v64i1:
718 ; LMULMAX8:       # %bb.0:
719 ; LMULMAX8-NEXT:    li a0, 64
720 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
721 ; LMULMAX8-NEXT:    vcpop.m a0, v0
722 ; LMULMAX8-NEXT:    snez a0, a0
723 ; LMULMAX8-NEXT:    ret
724   %red = call i1 @llvm.vector.reduce.umax.v64i1(<64 x i1> %v)
725   ret i1 %red
728 declare i1 @llvm.vector.reduce.smax.v64i1(<64 x i1>)
730 define zeroext i1 @vreduce_smax_v64i1(<64 x i1> %v) {
731 ; LMULMAX1-LABEL: vreduce_smax_v64i1:
732 ; LMULMAX1:       # %bb.0:
733 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
734 ; LMULMAX1-NEXT:    vmand.mm v8, v8, v10
735 ; LMULMAX1-NEXT:    vmand.mm v9, v0, v9
736 ; LMULMAX1-NEXT:    vmnand.mm v8, v9, v8
737 ; LMULMAX1-NEXT:    vcpop.m a0, v8
738 ; LMULMAX1-NEXT:    seqz a0, a0
739 ; LMULMAX1-NEXT:    ret
741 ; LMULMAX8-LABEL: vreduce_smax_v64i1:
742 ; LMULMAX8:       # %bb.0:
743 ; LMULMAX8-NEXT:    li a0, 64
744 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
745 ; LMULMAX8-NEXT:    vmnot.m v8, v0
746 ; LMULMAX8-NEXT:    vcpop.m a0, v8
747 ; LMULMAX8-NEXT:    seqz a0, a0
748 ; LMULMAX8-NEXT:    ret
749   %red = call i1 @llvm.vector.reduce.smax.v64i1(<64 x i1> %v)
750   ret i1 %red
753 declare i1 @llvm.vector.reduce.umin.v64i1(<64 x i1>)
755 define zeroext i1 @vreduce_umin_v64i1(<64 x i1> %v) {
756 ; LMULMAX1-LABEL: vreduce_umin_v64i1:
757 ; LMULMAX1:       # %bb.0:
758 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
759 ; LMULMAX1-NEXT:    vmand.mm v8, v8, v10
760 ; LMULMAX1-NEXT:    vmand.mm v9, v0, v9
761 ; LMULMAX1-NEXT:    vmnand.mm v8, v9, v8
762 ; LMULMAX1-NEXT:    vcpop.m a0, v8
763 ; LMULMAX1-NEXT:    seqz a0, a0
764 ; LMULMAX1-NEXT:    ret
766 ; LMULMAX8-LABEL: vreduce_umin_v64i1:
767 ; LMULMAX8:       # %bb.0:
768 ; LMULMAX8-NEXT:    li a0, 64
769 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
770 ; LMULMAX8-NEXT:    vmnot.m v8, v0
771 ; LMULMAX8-NEXT:    vcpop.m a0, v8
772 ; LMULMAX8-NEXT:    seqz a0, a0
773 ; LMULMAX8-NEXT:    ret
774   %red = call i1 @llvm.vector.reduce.umin.v64i1(<64 x i1> %v)
775   ret i1 %red
778 declare i1 @llvm.vector.reduce.smin.v64i1(<64 x i1>)
780 define zeroext i1 @vreduce_smin_v64i1(<64 x i1> %v) {
781 ; LMULMAX1-LABEL: vreduce_smin_v64i1:
782 ; LMULMAX1:       # %bb.0:
783 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
784 ; LMULMAX1-NEXT:    vmor.mm v8, v8, v10
785 ; LMULMAX1-NEXT:    vmor.mm v9, v0, v9
786 ; LMULMAX1-NEXT:    vmor.mm v8, v9, v8
787 ; LMULMAX1-NEXT:    vcpop.m a0, v8
788 ; LMULMAX1-NEXT:    snez a0, a0
789 ; LMULMAX1-NEXT:    ret
791 ; LMULMAX8-LABEL: vreduce_smin_v64i1:
792 ; LMULMAX8:       # %bb.0:
793 ; LMULMAX8-NEXT:    li a0, 64
794 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
795 ; LMULMAX8-NEXT:    vcpop.m a0, v0
796 ; LMULMAX8-NEXT:    snez a0, a0
797 ; LMULMAX8-NEXT:    ret
798   %red = call i1 @llvm.vector.reduce.smin.v64i1(<64 x i1> %v)
799   ret i1 %red
802 declare i1 @llvm.vector.reduce.add.v1i1(<1 x i1>)
804 define zeroext i1 @vreduce_add_v1i1(<1 x i1> %v) {
805 ; CHECK-LABEL: vreduce_add_v1i1:
806 ; CHECK:       # %bb.0:
807 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
808 ; CHECK-NEXT:    vfirst.m a0, v0
809 ; CHECK-NEXT:    seqz a0, a0
810 ; CHECK-NEXT:    ret
811   %red = call i1 @llvm.vector.reduce.add.v1i1(<1 x i1> %v)
812   ret i1 %red
815 declare i1 @llvm.vector.reduce.add.v2i1(<2 x i1>)
817 define zeroext i1 @vreduce_add_v2i1(<2 x i1> %v) {
818 ; CHECK-LABEL: vreduce_add_v2i1:
819 ; CHECK:       # %bb.0:
820 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
821 ; CHECK-NEXT:    vcpop.m a0, v0
822 ; CHECK-NEXT:    andi a0, a0, 1
823 ; CHECK-NEXT:    ret
824   %red = call i1 @llvm.vector.reduce.add.v2i1(<2 x i1> %v)
825   ret i1 %red
828 declare i1 @llvm.vector.reduce.add.v4i1(<4 x i1>)
830 define zeroext i1 @vreduce_add_v4i1(<4 x i1> %v) {
831 ; CHECK-LABEL: vreduce_add_v4i1:
832 ; CHECK:       # %bb.0:
833 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
834 ; CHECK-NEXT:    vcpop.m a0, v0
835 ; CHECK-NEXT:    andi a0, a0, 1
836 ; CHECK-NEXT:    ret
837   %red = call i1 @llvm.vector.reduce.add.v4i1(<4 x i1> %v)
838   ret i1 %red
841 declare i1 @llvm.vector.reduce.add.v8i1(<8 x i1>)
843 define zeroext i1 @vreduce_add_v8i1(<8 x i1> %v) {
844 ; CHECK-LABEL: vreduce_add_v8i1:
845 ; CHECK:       # %bb.0:
846 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
847 ; CHECK-NEXT:    vcpop.m a0, v0
848 ; CHECK-NEXT:    andi a0, a0, 1
849 ; CHECK-NEXT:    ret
850   %red = call i1 @llvm.vector.reduce.add.v8i1(<8 x i1> %v)
851   ret i1 %red
854 declare i1 @llvm.vector.reduce.add.v16i1(<16 x i1>)
856 define zeroext i1 @vreduce_add_v16i1(<16 x i1> %v) {
857 ; CHECK-LABEL: vreduce_add_v16i1:
858 ; CHECK:       # %bb.0:
859 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
860 ; CHECK-NEXT:    vcpop.m a0, v0
861 ; CHECK-NEXT:    andi a0, a0, 1
862 ; CHECK-NEXT:    ret
863   %red = call i1 @llvm.vector.reduce.add.v16i1(<16 x i1> %v)
864   ret i1 %red
867 declare i1 @llvm.vector.reduce.add.v32i1(<32 x i1>)
869 define zeroext i1 @vreduce_add_v32i1(<32 x i1> %v) {
870 ; LMULMAX1-LABEL: vreduce_add_v32i1:
871 ; LMULMAX1:       # %bb.0:
872 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
873 ; LMULMAX1-NEXT:    vmxor.mm v8, v0, v8
874 ; LMULMAX1-NEXT:    vcpop.m a0, v8
875 ; LMULMAX1-NEXT:    andi a0, a0, 1
876 ; LMULMAX1-NEXT:    ret
878 ; LMULMAX8-LABEL: vreduce_add_v32i1:
879 ; LMULMAX8:       # %bb.0:
880 ; LMULMAX8-NEXT:    li a0, 32
881 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
882 ; LMULMAX8-NEXT:    vcpop.m a0, v0
883 ; LMULMAX8-NEXT:    andi a0, a0, 1
884 ; LMULMAX8-NEXT:    ret
885   %red = call i1 @llvm.vector.reduce.add.v32i1(<32 x i1> %v)
886   ret i1 %red
889 declare i1 @llvm.vector.reduce.add.v64i1(<64 x i1>)
891 define zeroext i1 @vreduce_add_v64i1(<64 x i1> %v) {
892 ; LMULMAX1-LABEL: vreduce_add_v64i1:
893 ; LMULMAX1:       # %bb.0:
894 ; LMULMAX1-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
895 ; LMULMAX1-NEXT:    vmxor.mm v8, v8, v10
896 ; LMULMAX1-NEXT:    vmxor.mm v9, v0, v9
897 ; LMULMAX1-NEXT:    vmxor.mm v8, v9, v8
898 ; LMULMAX1-NEXT:    vcpop.m a0, v8
899 ; LMULMAX1-NEXT:    andi a0, a0, 1
900 ; LMULMAX1-NEXT:    ret
902 ; LMULMAX8-LABEL: vreduce_add_v64i1:
903 ; LMULMAX8:       # %bb.0:
904 ; LMULMAX8-NEXT:    li a0, 64
905 ; LMULMAX8-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
906 ; LMULMAX8-NEXT:    vcpop.m a0, v0
907 ; LMULMAX8-NEXT:    andi a0, a0, 1
908 ; LMULMAX8-NEXT:    ret
909   %red = call i1 @llvm.vector.reduce.add.v64i1(<64 x i1> %v)
910   ret i1 %red