[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vreductions-mask-vp.ll
blob18d20f66987b27934fb73376cb9efc57b32a5d19
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
5 declare i1 @llvm.vp.reduce.and.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
7 define zeroext i1 @vpreduce_and_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
8 ; CHECK-LABEL: vpreduce_and_nxv1i1:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
11 ; CHECK-NEXT:    vmnot.m v9, v0
12 ; CHECK-NEXT:    vmv1r.v v0, v8
13 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
14 ; CHECK-NEXT:    seqz a1, a1
15 ; CHECK-NEXT:    and a0, a1, a0
16 ; CHECK-NEXT:    ret
17   %r = call i1 @llvm.vp.reduce.and.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
18   ret i1 %r
21 declare i1 @llvm.vp.reduce.or.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
23 define zeroext i1 @vpreduce_or_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: vpreduce_or_nxv1i1:
25 ; CHECK:       # %bb.0:
26 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
27 ; CHECK-NEXT:    vmv1r.v v9, v0
28 ; CHECK-NEXT:    vmv1r.v v0, v8
29 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
30 ; CHECK-NEXT:    snez a1, a1
31 ; CHECK-NEXT:    or a0, a1, a0
32 ; CHECK-NEXT:    ret
33   %r = call i1 @llvm.vp.reduce.or.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
34   ret i1 %r
37 declare i1 @llvm.vp.reduce.xor.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
39 define zeroext i1 @vpreduce_xor_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
40 ; CHECK-LABEL: vpreduce_xor_nxv1i1:
41 ; CHECK:       # %bb.0:
42 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
43 ; CHECK-NEXT:    vmv1r.v v9, v0
44 ; CHECK-NEXT:    vmv1r.v v0, v8
45 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
46 ; CHECK-NEXT:    andi a1, a1, 1
47 ; CHECK-NEXT:    xor a0, a1, a0
48 ; CHECK-NEXT:    ret
49   %r = call i1 @llvm.vp.reduce.xor.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
50   ret i1 %r
53 declare i1 @llvm.vp.reduce.and.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
55 define zeroext i1 @vpreduce_and_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
56 ; CHECK-LABEL: vpreduce_and_nxv2i1:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
59 ; CHECK-NEXT:    vmnot.m v9, v0
60 ; CHECK-NEXT:    vmv1r.v v0, v8
61 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
62 ; CHECK-NEXT:    seqz a1, a1
63 ; CHECK-NEXT:    and a0, a1, a0
64 ; CHECK-NEXT:    ret
65   %r = call i1 @llvm.vp.reduce.and.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
66   ret i1 %r
69 declare i1 @llvm.vp.reduce.or.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
71 define zeroext i1 @vpreduce_or_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
72 ; CHECK-LABEL: vpreduce_or_nxv2i1:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
75 ; CHECK-NEXT:    vmv1r.v v9, v0
76 ; CHECK-NEXT:    vmv1r.v v0, v8
77 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
78 ; CHECK-NEXT:    snez a1, a1
79 ; CHECK-NEXT:    or a0, a1, a0
80 ; CHECK-NEXT:    ret
81   %r = call i1 @llvm.vp.reduce.or.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
82   ret i1 %r
85 declare i1 @llvm.vp.reduce.xor.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
87 define zeroext i1 @vpreduce_xor_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
88 ; CHECK-LABEL: vpreduce_xor_nxv2i1:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
91 ; CHECK-NEXT:    vmv1r.v v9, v0
92 ; CHECK-NEXT:    vmv1r.v v0, v8
93 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
94 ; CHECK-NEXT:    andi a1, a1, 1
95 ; CHECK-NEXT:    xor a0, a1, a0
96 ; CHECK-NEXT:    ret
97   %r = call i1 @llvm.vp.reduce.xor.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
98   ret i1 %r
101 declare i1 @llvm.vp.reduce.and.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
103 define zeroext i1 @vpreduce_and_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
104 ; CHECK-LABEL: vpreduce_and_nxv4i1:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
107 ; CHECK-NEXT:    vmnot.m v9, v0
108 ; CHECK-NEXT:    vmv1r.v v0, v8
109 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
110 ; CHECK-NEXT:    seqz a1, a1
111 ; CHECK-NEXT:    and a0, a1, a0
112 ; CHECK-NEXT:    ret
113   %r = call i1 @llvm.vp.reduce.and.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
114   ret i1 %r
117 declare i1 @llvm.vp.reduce.or.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
119 define zeroext i1 @vpreduce_or_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
120 ; CHECK-LABEL: vpreduce_or_nxv4i1:
121 ; CHECK:       # %bb.0:
122 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
123 ; CHECK-NEXT:    vmv1r.v v9, v0
124 ; CHECK-NEXT:    vmv1r.v v0, v8
125 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
126 ; CHECK-NEXT:    snez a1, a1
127 ; CHECK-NEXT:    or a0, a1, a0
128 ; CHECK-NEXT:    ret
129   %r = call i1 @llvm.vp.reduce.or.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
130   ret i1 %r
133 declare i1 @llvm.vp.reduce.xor.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
135 define zeroext i1 @vpreduce_xor_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
136 ; CHECK-LABEL: vpreduce_xor_nxv4i1:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
139 ; CHECK-NEXT:    vmv1r.v v9, v0
140 ; CHECK-NEXT:    vmv1r.v v0, v8
141 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
142 ; CHECK-NEXT:    andi a1, a1, 1
143 ; CHECK-NEXT:    xor a0, a1, a0
144 ; CHECK-NEXT:    ret
145   %r = call i1 @llvm.vp.reduce.xor.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
146   ret i1 %r
149 declare i1 @llvm.vp.reduce.and.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
151 define zeroext i1 @vpreduce_and_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
152 ; CHECK-LABEL: vpreduce_and_nxv8i1:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
155 ; CHECK-NEXT:    vmnot.m v9, v0
156 ; CHECK-NEXT:    vmv1r.v v0, v8
157 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
158 ; CHECK-NEXT:    seqz a1, a1
159 ; CHECK-NEXT:    and a0, a1, a0
160 ; CHECK-NEXT:    ret
161   %r = call i1 @llvm.vp.reduce.and.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
162   ret i1 %r
165 declare i1 @llvm.vp.reduce.or.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
167 define zeroext i1 @vpreduce_or_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
168 ; CHECK-LABEL: vpreduce_or_nxv8i1:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
171 ; CHECK-NEXT:    vmv1r.v v9, v0
172 ; CHECK-NEXT:    vmv1r.v v0, v8
173 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
174 ; CHECK-NEXT:    snez a1, a1
175 ; CHECK-NEXT:    or a0, a1, a0
176 ; CHECK-NEXT:    ret
177   %r = call i1 @llvm.vp.reduce.or.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
178   ret i1 %r
181 declare i1 @llvm.vp.reduce.xor.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
183 define zeroext i1 @vpreduce_xor_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
184 ; CHECK-LABEL: vpreduce_xor_nxv8i1:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
187 ; CHECK-NEXT:    vmv1r.v v9, v0
188 ; CHECK-NEXT:    vmv1r.v v0, v8
189 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
190 ; CHECK-NEXT:    andi a1, a1, 1
191 ; CHECK-NEXT:    xor a0, a1, a0
192 ; CHECK-NEXT:    ret
193   %r = call i1 @llvm.vp.reduce.xor.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
194   ret i1 %r
197 declare i1 @llvm.vp.reduce.and.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
199 define zeroext i1 @vpreduce_and_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
200 ; CHECK-LABEL: vpreduce_and_nxv16i1:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
203 ; CHECK-NEXT:    vmnot.m v9, v0
204 ; CHECK-NEXT:    vmv1r.v v0, v8
205 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
206 ; CHECK-NEXT:    seqz a1, a1
207 ; CHECK-NEXT:    and a0, a1, a0
208 ; CHECK-NEXT:    ret
209   %r = call i1 @llvm.vp.reduce.and.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
210   ret i1 %r
213 declare i1 @llvm.vp.reduce.or.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
215 define zeroext i1 @vpreduce_or_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
216 ; CHECK-LABEL: vpreduce_or_nxv16i1:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
219 ; CHECK-NEXT:    vmv1r.v v9, v0
220 ; CHECK-NEXT:    vmv1r.v v0, v8
221 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
222 ; CHECK-NEXT:    snez a1, a1
223 ; CHECK-NEXT:    or a0, a1, a0
224 ; CHECK-NEXT:    ret
225   %r = call i1 @llvm.vp.reduce.or.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
226   ret i1 %r
229 declare i1 @llvm.vp.reduce.xor.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
231 define zeroext i1 @vpreduce_xor_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
232 ; CHECK-LABEL: vpreduce_xor_nxv16i1:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
235 ; CHECK-NEXT:    vmv1r.v v9, v0
236 ; CHECK-NEXT:    vmv1r.v v0, v8
237 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
238 ; CHECK-NEXT:    andi a1, a1, 1
239 ; CHECK-NEXT:    xor a0, a1, a0
240 ; CHECK-NEXT:    ret
241   %r = call i1 @llvm.vp.reduce.xor.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
242   ret i1 %r
245 declare i1 @llvm.vp.reduce.and.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
247 define zeroext i1 @vpreduce_and_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
248 ; CHECK-LABEL: vpreduce_and_nxv32i1:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
251 ; CHECK-NEXT:    vmnot.m v9, v0
252 ; CHECK-NEXT:    vmv1r.v v0, v8
253 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
254 ; CHECK-NEXT:    seqz a1, a1
255 ; CHECK-NEXT:    and a0, a1, a0
256 ; CHECK-NEXT:    ret
257   %r = call i1 @llvm.vp.reduce.and.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
258   ret i1 %r
261 declare i1 @llvm.vp.reduce.or.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
263 define zeroext i1 @vpreduce_or_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
264 ; CHECK-LABEL: vpreduce_or_nxv32i1:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
267 ; CHECK-NEXT:    vmv1r.v v9, v0
268 ; CHECK-NEXT:    vmv1r.v v0, v8
269 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
270 ; CHECK-NEXT:    snez a1, a1
271 ; CHECK-NEXT:    or a0, a1, a0
272 ; CHECK-NEXT:    ret
273   %r = call i1 @llvm.vp.reduce.or.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
274   ret i1 %r
277 declare i1 @llvm.vp.reduce.xor.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
279 define zeroext i1 @vpreduce_xor_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
280 ; CHECK-LABEL: vpreduce_xor_nxv32i1:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
283 ; CHECK-NEXT:    vmv1r.v v9, v0
284 ; CHECK-NEXT:    vmv1r.v v0, v8
285 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
286 ; CHECK-NEXT:    andi a1, a1, 1
287 ; CHECK-NEXT:    xor a0, a1, a0
288 ; CHECK-NEXT:    ret
289   %r = call i1 @llvm.vp.reduce.xor.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
290   ret i1 %r
293 declare i1 @llvm.vp.reduce.or.nxv40i1(i1, <vscale x 40 x i1>, <vscale x 40 x i1>, i32)
295 define zeroext i1 @vpreduce_or_nxv40i1(i1 zeroext %s, <vscale x 40 x i1> %v, <vscale x 40 x i1> %m, i32 zeroext %evl) {
296 ; CHECK-LABEL: vpreduce_or_nxv40i1:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
299 ; CHECK-NEXT:    vmv1r.v v9, v0
300 ; CHECK-NEXT:    vmv1r.v v0, v8
301 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
302 ; CHECK-NEXT:    snez a1, a1
303 ; CHECK-NEXT:    or a0, a1, a0
304 ; CHECK-NEXT:    ret
305   %r = call i1 @llvm.vp.reduce.or.nxv40i1(i1 %s, <vscale x 40 x i1> %v, <vscale x 40 x i1> %m, i32 %evl)
306   ret i1 %r
309 declare i1 @llvm.vp.reduce.and.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
311 define zeroext i1 @vpreduce_and_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
312 ; CHECK-LABEL: vpreduce_and_nxv64i1:
313 ; CHECK:       # %bb.0:
314 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
315 ; CHECK-NEXT:    vmnot.m v9, v0
316 ; CHECK-NEXT:    vmv1r.v v0, v8
317 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
318 ; CHECK-NEXT:    seqz a1, a1
319 ; CHECK-NEXT:    and a0, a1, a0
320 ; CHECK-NEXT:    ret
321   %r = call i1 @llvm.vp.reduce.and.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
322   ret i1 %r
325 declare i1 @llvm.vp.reduce.or.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
327 define zeroext i1 @vpreduce_or_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
328 ; CHECK-LABEL: vpreduce_or_nxv64i1:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
331 ; CHECK-NEXT:    vmv1r.v v9, v0
332 ; CHECK-NEXT:    vmv1r.v v0, v8
333 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
334 ; CHECK-NEXT:    snez a1, a1
335 ; CHECK-NEXT:    or a0, a1, a0
336 ; CHECK-NEXT:    ret
337   %r = call i1 @llvm.vp.reduce.or.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
338   ret i1 %r
341 declare i1 @llvm.vp.reduce.xor.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
343 define zeroext i1 @vpreduce_xor_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
344 ; CHECK-LABEL: vpreduce_xor_nxv64i1:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
347 ; CHECK-NEXT:    vmv1r.v v9, v0
348 ; CHECK-NEXT:    vmv1r.v v0, v8
349 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
350 ; CHECK-NEXT:    andi a1, a1, 1
351 ; CHECK-NEXT:    xor a0, a1, a0
352 ; CHECK-NEXT:    ret
353   %r = call i1 @llvm.vp.reduce.xor.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
354   ret i1 %r
357 declare i1 @llvm.vp.reduce.or.nxv128i1(i1, <vscale x 128 x i1>, <vscale x 128 x i1>, i32)
359 define zeroext i1 @vpreduce_or_nxv128i1(i1 zeroext %s, <vscale x 128 x i1> %v, <vscale x 128 x i1> %m, i32 zeroext %evl) {
360 ; CHECK-LABEL: vpreduce_or_nxv128i1:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
363 ; CHECK-NEXT:    vmv1r.v v11, v0
364 ; CHECK-NEXT:    csrr a2, vlenb
365 ; CHECK-NEXT:    slli a2, a2, 3
366 ; CHECK-NEXT:    sub a3, a1, a2
367 ; CHECK-NEXT:    sltu a4, a1, a3
368 ; CHECK-NEXT:    addi a4, a4, -1
369 ; CHECK-NEXT:    and a3, a4, a3
370 ; CHECK-NEXT:    vmv1r.v v0, v10
371 ; CHECK-NEXT:    vsetvli zero, a3, e8, m8, ta, ma
372 ; CHECK-NEXT:    vcpop.m a3, v8, v0.t
373 ; CHECK-NEXT:    snez a3, a3
374 ; CHECK-NEXT:    bltu a1, a2, .LBB22_2
375 ; CHECK-NEXT:  # %bb.1:
376 ; CHECK-NEXT:    mv a1, a2
377 ; CHECK-NEXT:  .LBB22_2:
378 ; CHECK-NEXT:    vmv1r.v v0, v9
379 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
380 ; CHECK-NEXT:    vcpop.m a1, v11, v0.t
381 ; CHECK-NEXT:    snez a1, a1
382 ; CHECK-NEXT:    or a0, a1, a0
383 ; CHECK-NEXT:    or a0, a3, a0
384 ; CHECK-NEXT:    ret
385   %r = call i1 @llvm.vp.reduce.or.nxv128i1(i1 %s, <vscale x 128 x i1> %v, <vscale x 128 x i1> %m, i32 %evl)
386   ret i1 %r
389 declare i1 @llvm.vp.reduce.add.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
391 define zeroext i1 @vpreduce_add_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
392 ; CHECK-LABEL: vpreduce_add_nxv1i1:
393 ; CHECK:       # %bb.0:
394 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
395 ; CHECK-NEXT:    vmv1r.v v9, v0
396 ; CHECK-NEXT:    vmv1r.v v0, v8
397 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
398 ; CHECK-NEXT:    andi a1, a1, 1
399 ; CHECK-NEXT:    xor a0, a1, a0
400 ; CHECK-NEXT:    ret
401   %r = call i1 @llvm.vp.reduce.add.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
402   ret i1 %r
405 declare i1 @llvm.vp.reduce.add.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
407 define zeroext i1 @vpreduce_add_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
408 ; CHECK-LABEL: vpreduce_add_nxv2i1:
409 ; CHECK:       # %bb.0:
410 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
411 ; CHECK-NEXT:    vmv1r.v v9, v0
412 ; CHECK-NEXT:    vmv1r.v v0, v8
413 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
414 ; CHECK-NEXT:    andi a1, a1, 1
415 ; CHECK-NEXT:    xor a0, a1, a0
416 ; CHECK-NEXT:    ret
417   %r = call i1 @llvm.vp.reduce.add.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
418   ret i1 %r
421 declare i1 @llvm.vp.reduce.add.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
423 define zeroext i1 @vpreduce_add_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vpreduce_add_nxv4i1:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
427 ; CHECK-NEXT:    vmv1r.v v9, v0
428 ; CHECK-NEXT:    vmv1r.v v0, v8
429 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
430 ; CHECK-NEXT:    andi a1, a1, 1
431 ; CHECK-NEXT:    xor a0, a1, a0
432 ; CHECK-NEXT:    ret
433   %r = call i1 @llvm.vp.reduce.add.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
434   ret i1 %r
437 declare i1 @llvm.vp.reduce.add.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
439 define zeroext i1 @vpreduce_add_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
440 ; CHECK-LABEL: vpreduce_add_nxv8i1:
441 ; CHECK:       # %bb.0:
442 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
443 ; CHECK-NEXT:    vmv1r.v v9, v0
444 ; CHECK-NEXT:    vmv1r.v v0, v8
445 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
446 ; CHECK-NEXT:    andi a1, a1, 1
447 ; CHECK-NEXT:    xor a0, a1, a0
448 ; CHECK-NEXT:    ret
449   %r = call i1 @llvm.vp.reduce.add.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
450   ret i1 %r
453 declare i1 @llvm.vp.reduce.add.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
455 define zeroext i1 @vpreduce_add_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
456 ; CHECK-LABEL: vpreduce_add_nxv16i1:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
459 ; CHECK-NEXT:    vmv1r.v v9, v0
460 ; CHECK-NEXT:    vmv1r.v v0, v8
461 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
462 ; CHECK-NEXT:    andi a1, a1, 1
463 ; CHECK-NEXT:    xor a0, a1, a0
464 ; CHECK-NEXT:    ret
465   %r = call i1 @llvm.vp.reduce.add.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
466   ret i1 %r
469 declare i1 @llvm.vp.reduce.add.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
471 define zeroext i1 @vpreduce_add_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
472 ; CHECK-LABEL: vpreduce_add_nxv32i1:
473 ; CHECK:       # %bb.0:
474 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
475 ; CHECK-NEXT:    vmv1r.v v9, v0
476 ; CHECK-NEXT:    vmv1r.v v0, v8
477 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
478 ; CHECK-NEXT:    andi a1, a1, 1
479 ; CHECK-NEXT:    xor a0, a1, a0
480 ; CHECK-NEXT:    ret
481   %r = call i1 @llvm.vp.reduce.add.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
482   ret i1 %r
485 declare i1 @llvm.vp.reduce.add.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
487 define zeroext i1 @vpreduce_add_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
488 ; CHECK-LABEL: vpreduce_add_nxv64i1:
489 ; CHECK:       # %bb.0:
490 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
491 ; CHECK-NEXT:    vmv1r.v v9, v0
492 ; CHECK-NEXT:    vmv1r.v v0, v8
493 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
494 ; CHECK-NEXT:    andi a1, a1, 1
495 ; CHECK-NEXT:    xor a0, a1, a0
496 ; CHECK-NEXT:    ret
497   %r = call i1 @llvm.vp.reduce.add.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
498   ret i1 %r
502 declare i1 @llvm.vp.reduce.smax.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
504 define zeroext i1 @vpreduce_smax_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
505 ; CHECK-LABEL: vpreduce_smax_nxv1i1:
506 ; CHECK:       # %bb.0:
507 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
508 ; CHECK-NEXT:    vmnot.m v9, v0
509 ; CHECK-NEXT:    vmv1r.v v0, v8
510 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
511 ; CHECK-NEXT:    seqz a1, a1
512 ; CHECK-NEXT:    and a0, a1, a0
513 ; CHECK-NEXT:    ret
514   %r = call i1 @llvm.vp.reduce.smax.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
515   ret i1 %r
518 declare i1 @llvm.vp.reduce.smax.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
520 define zeroext i1 @vpreduce_smax_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
521 ; CHECK-LABEL: vpreduce_smax_nxv2i1:
522 ; CHECK:       # %bb.0:
523 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
524 ; CHECK-NEXT:    vmnot.m v9, v0
525 ; CHECK-NEXT:    vmv1r.v v0, v8
526 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
527 ; CHECK-NEXT:    seqz a1, a1
528 ; CHECK-NEXT:    and a0, a1, a0
529 ; CHECK-NEXT:    ret
530   %r = call i1 @llvm.vp.reduce.smax.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
531   ret i1 %r
534 declare i1 @llvm.vp.reduce.smax.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
536 define zeroext i1 @vpreduce_smax_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
537 ; CHECK-LABEL: vpreduce_smax_nxv4i1:
538 ; CHECK:       # %bb.0:
539 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
540 ; CHECK-NEXT:    vmnot.m v9, v0
541 ; CHECK-NEXT:    vmv1r.v v0, v8
542 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
543 ; CHECK-NEXT:    seqz a1, a1
544 ; CHECK-NEXT:    and a0, a1, a0
545 ; CHECK-NEXT:    ret
546   %r = call i1 @llvm.vp.reduce.smax.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
547   ret i1 %r
550 declare i1 @llvm.vp.reduce.smax.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
552 define zeroext i1 @vpreduce_smax_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
553 ; CHECK-LABEL: vpreduce_smax_nxv8i1:
554 ; CHECK:       # %bb.0:
555 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
556 ; CHECK-NEXT:    vmnot.m v9, v0
557 ; CHECK-NEXT:    vmv1r.v v0, v8
558 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
559 ; CHECK-NEXT:    seqz a1, a1
560 ; CHECK-NEXT:    and a0, a1, a0
561 ; CHECK-NEXT:    ret
562   %r = call i1 @llvm.vp.reduce.smax.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
563   ret i1 %r
566 declare i1 @llvm.vp.reduce.smax.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
568 define zeroext i1 @vpreduce_smax_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
569 ; CHECK-LABEL: vpreduce_smax_nxv16i1:
570 ; CHECK:       # %bb.0:
571 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
572 ; CHECK-NEXT:    vmnot.m v9, v0
573 ; CHECK-NEXT:    vmv1r.v v0, v8
574 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
575 ; CHECK-NEXT:    seqz a1, a1
576 ; CHECK-NEXT:    and a0, a1, a0
577 ; CHECK-NEXT:    ret
578   %r = call i1 @llvm.vp.reduce.smax.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
579   ret i1 %r
582 declare i1 @llvm.vp.reduce.smax.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
584 define zeroext i1 @vpreduce_smax_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
585 ; CHECK-LABEL: vpreduce_smax_nxv32i1:
586 ; CHECK:       # %bb.0:
587 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
588 ; CHECK-NEXT:    vmnot.m v9, v0
589 ; CHECK-NEXT:    vmv1r.v v0, v8
590 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
591 ; CHECK-NEXT:    seqz a1, a1
592 ; CHECK-NEXT:    and a0, a1, a0
593 ; CHECK-NEXT:    ret
594   %r = call i1 @llvm.vp.reduce.smax.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
595   ret i1 %r
598 declare i1 @llvm.vp.reduce.smax.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
600 define zeroext i1 @vpreduce_smax_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
601 ; CHECK-LABEL: vpreduce_smax_nxv64i1:
602 ; CHECK:       # %bb.0:
603 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
604 ; CHECK-NEXT:    vmnot.m v9, v0
605 ; CHECK-NEXT:    vmv1r.v v0, v8
606 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
607 ; CHECK-NEXT:    seqz a1, a1
608 ; CHECK-NEXT:    and a0, a1, a0
609 ; CHECK-NEXT:    ret
610   %r = call i1 @llvm.vp.reduce.smax.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
611   ret i1 %r
614 declare i1 @llvm.vp.reduce.smin.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
616 define zeroext i1 @vpreduce_smin_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
617 ; CHECK-LABEL: vpreduce_smin_nxv1i1:
618 ; CHECK:       # %bb.0:
619 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
620 ; CHECK-NEXT:    vmv1r.v v9, v0
621 ; CHECK-NEXT:    vmv1r.v v0, v8
622 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
623 ; CHECK-NEXT:    snez a1, a1
624 ; CHECK-NEXT:    or a0, a1, a0
625 ; CHECK-NEXT:    ret
626   %r = call i1 @llvm.vp.reduce.smin.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
627   ret i1 %r
630 declare i1 @llvm.vp.reduce.smin.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
632 define zeroext i1 @vpreduce_smin_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
633 ; CHECK-LABEL: vpreduce_smin_nxv2i1:
634 ; CHECK:       # %bb.0:
635 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
636 ; CHECK-NEXT:    vmv1r.v v9, v0
637 ; CHECK-NEXT:    vmv1r.v v0, v8
638 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
639 ; CHECK-NEXT:    snez a1, a1
640 ; CHECK-NEXT:    or a0, a1, a0
641 ; CHECK-NEXT:    ret
642   %r = call i1 @llvm.vp.reduce.smin.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
643   ret i1 %r
646 declare i1 @llvm.vp.reduce.smin.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
648 define zeroext i1 @vpreduce_smin_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
649 ; CHECK-LABEL: vpreduce_smin_nxv4i1:
650 ; CHECK:       # %bb.0:
651 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
652 ; CHECK-NEXT:    vmv1r.v v9, v0
653 ; CHECK-NEXT:    vmv1r.v v0, v8
654 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
655 ; CHECK-NEXT:    snez a1, a1
656 ; CHECK-NEXT:    or a0, a1, a0
657 ; CHECK-NEXT:    ret
658   %r = call i1 @llvm.vp.reduce.smin.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
659   ret i1 %r
662 declare i1 @llvm.vp.reduce.smin.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
664 define zeroext i1 @vpreduce_smin_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
665 ; CHECK-LABEL: vpreduce_smin_nxv8i1:
666 ; CHECK:       # %bb.0:
667 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
668 ; CHECK-NEXT:    vmv1r.v v9, v0
669 ; CHECK-NEXT:    vmv1r.v v0, v8
670 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
671 ; CHECK-NEXT:    snez a1, a1
672 ; CHECK-NEXT:    or a0, a1, a0
673 ; CHECK-NEXT:    ret
674   %r = call i1 @llvm.vp.reduce.smin.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
675   ret i1 %r
678 declare i1 @llvm.vp.reduce.smin.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
680 define zeroext i1 @vpreduce_smin_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
681 ; CHECK-LABEL: vpreduce_smin_nxv16i1:
682 ; CHECK:       # %bb.0:
683 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
684 ; CHECK-NEXT:    vmv1r.v v9, v0
685 ; CHECK-NEXT:    vmv1r.v v0, v8
686 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
687 ; CHECK-NEXT:    snez a1, a1
688 ; CHECK-NEXT:    or a0, a1, a0
689 ; CHECK-NEXT:    ret
690   %r = call i1 @llvm.vp.reduce.smin.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
691   ret i1 %r
694 declare i1 @llvm.vp.reduce.smin.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
696 define zeroext i1 @vpreduce_smin_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
697 ; CHECK-LABEL: vpreduce_smin_nxv32i1:
698 ; CHECK:       # %bb.0:
699 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
700 ; CHECK-NEXT:    vmv1r.v v9, v0
701 ; CHECK-NEXT:    vmv1r.v v0, v8
702 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
703 ; CHECK-NEXT:    snez a1, a1
704 ; CHECK-NEXT:    or a0, a1, a0
705 ; CHECK-NEXT:    ret
706   %r = call i1 @llvm.vp.reduce.smin.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
707   ret i1 %r
710 declare i1 @llvm.vp.reduce.smin.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
712 define zeroext i1 @vpreduce_smin_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
713 ; CHECK-LABEL: vpreduce_smin_nxv64i1:
714 ; CHECK:       # %bb.0:
715 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
716 ; CHECK-NEXT:    vmv1r.v v9, v0
717 ; CHECK-NEXT:    vmv1r.v v0, v8
718 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
719 ; CHECK-NEXT:    snez a1, a1
720 ; CHECK-NEXT:    or a0, a1, a0
721 ; CHECK-NEXT:    ret
722   %r = call i1 @llvm.vp.reduce.smin.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
723   ret i1 %r
726 declare i1 @llvm.vp.reduce.umax.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
728 define zeroext i1 @vpreduce_umax_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
729 ; CHECK-LABEL: vpreduce_umax_nxv1i1:
730 ; CHECK:       # %bb.0:
731 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
732 ; CHECK-NEXT:    vmv1r.v v9, v0
733 ; CHECK-NEXT:    vmv1r.v v0, v8
734 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
735 ; CHECK-NEXT:    snez a1, a1
736 ; CHECK-NEXT:    or a0, a1, a0
737 ; CHECK-NEXT:    ret
738   %r = call i1 @llvm.vp.reduce.umax.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
739   ret i1 %r
742 declare i1 @llvm.vp.reduce.umax.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
744 define zeroext i1 @vpreduce_umax_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
745 ; CHECK-LABEL: vpreduce_umax_nxv2i1:
746 ; CHECK:       # %bb.0:
747 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
748 ; CHECK-NEXT:    vmv1r.v v9, v0
749 ; CHECK-NEXT:    vmv1r.v v0, v8
750 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
751 ; CHECK-NEXT:    snez a1, a1
752 ; CHECK-NEXT:    or a0, a1, a0
753 ; CHECK-NEXT:    ret
754   %r = call i1 @llvm.vp.reduce.umax.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
755   ret i1 %r
758 declare i1 @llvm.vp.reduce.umax.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
760 define zeroext i1 @vpreduce_umax_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
761 ; CHECK-LABEL: vpreduce_umax_nxv4i1:
762 ; CHECK:       # %bb.0:
763 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
764 ; CHECK-NEXT:    vmv1r.v v9, v0
765 ; CHECK-NEXT:    vmv1r.v v0, v8
766 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
767 ; CHECK-NEXT:    snez a1, a1
768 ; CHECK-NEXT:    or a0, a1, a0
769 ; CHECK-NEXT:    ret
770   %r = call i1 @llvm.vp.reduce.umax.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
771   ret i1 %r
774 declare i1 @llvm.vp.reduce.umax.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
776 define zeroext i1 @vpreduce_umax_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
777 ; CHECK-LABEL: vpreduce_umax_nxv8i1:
778 ; CHECK:       # %bb.0:
779 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
780 ; CHECK-NEXT:    vmv1r.v v9, v0
781 ; CHECK-NEXT:    vmv1r.v v0, v8
782 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
783 ; CHECK-NEXT:    snez a1, a1
784 ; CHECK-NEXT:    or a0, a1, a0
785 ; CHECK-NEXT:    ret
786   %r = call i1 @llvm.vp.reduce.umax.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
787   ret i1 %r
790 declare i1 @llvm.vp.reduce.umax.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
792 define zeroext i1 @vpreduce_umax_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
793 ; CHECK-LABEL: vpreduce_umax_nxv16i1:
794 ; CHECK:       # %bb.0:
795 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
796 ; CHECK-NEXT:    vmv1r.v v9, v0
797 ; CHECK-NEXT:    vmv1r.v v0, v8
798 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
799 ; CHECK-NEXT:    snez a1, a1
800 ; CHECK-NEXT:    or a0, a1, a0
801 ; CHECK-NEXT:    ret
802   %r = call i1 @llvm.vp.reduce.umax.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
803   ret i1 %r
806 declare i1 @llvm.vp.reduce.umax.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
808 define zeroext i1 @vpreduce_umax_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
809 ; CHECK-LABEL: vpreduce_umax_nxv32i1:
810 ; CHECK:       # %bb.0:
811 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
812 ; CHECK-NEXT:    vmv1r.v v9, v0
813 ; CHECK-NEXT:    vmv1r.v v0, v8
814 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
815 ; CHECK-NEXT:    snez a1, a1
816 ; CHECK-NEXT:    or a0, a1, a0
817 ; CHECK-NEXT:    ret
818   %r = call i1 @llvm.vp.reduce.umax.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
819   ret i1 %r
822 declare i1 @llvm.vp.reduce.umax.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
824 define zeroext i1 @vpreduce_umax_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
825 ; CHECK-LABEL: vpreduce_umax_nxv64i1:
826 ; CHECK:       # %bb.0:
827 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
828 ; CHECK-NEXT:    vmv1r.v v9, v0
829 ; CHECK-NEXT:    vmv1r.v v0, v8
830 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
831 ; CHECK-NEXT:    snez a1, a1
832 ; CHECK-NEXT:    or a0, a1, a0
833 ; CHECK-NEXT:    ret
834   %r = call i1 @llvm.vp.reduce.umax.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
835   ret i1 %r
838 declare i1 @llvm.vp.reduce.umin.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
840 define zeroext i1 @vpreduce_umin_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
841 ; CHECK-LABEL: vpreduce_umin_nxv1i1:
842 ; CHECK:       # %bb.0:
843 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
844 ; CHECK-NEXT:    vmnot.m v9, v0
845 ; CHECK-NEXT:    vmv1r.v v0, v8
846 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
847 ; CHECK-NEXT:    seqz a1, a1
848 ; CHECK-NEXT:    and a0, a1, a0
849 ; CHECK-NEXT:    ret
850   %r = call i1 @llvm.vp.reduce.umin.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
851   ret i1 %r
854 declare i1 @llvm.vp.reduce.umin.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
856 define zeroext i1 @vpreduce_umin_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
857 ; CHECK-LABEL: vpreduce_umin_nxv2i1:
858 ; CHECK:       # %bb.0:
859 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
860 ; CHECK-NEXT:    vmnot.m v9, v0
861 ; CHECK-NEXT:    vmv1r.v v0, v8
862 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
863 ; CHECK-NEXT:    seqz a1, a1
864 ; CHECK-NEXT:    and a0, a1, a0
865 ; CHECK-NEXT:    ret
866   %r = call i1 @llvm.vp.reduce.umin.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
867   ret i1 %r
870 declare i1 @llvm.vp.reduce.umin.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
872 define zeroext i1 @vpreduce_umin_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
873 ; CHECK-LABEL: vpreduce_umin_nxv4i1:
874 ; CHECK:       # %bb.0:
875 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
876 ; CHECK-NEXT:    vmnot.m v9, v0
877 ; CHECK-NEXT:    vmv1r.v v0, v8
878 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
879 ; CHECK-NEXT:    seqz a1, a1
880 ; CHECK-NEXT:    and a0, a1, a0
881 ; CHECK-NEXT:    ret
882   %r = call i1 @llvm.vp.reduce.umin.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
883   ret i1 %r
886 declare i1 @llvm.vp.reduce.umin.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
888 define zeroext i1 @vpreduce_umin_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
889 ; CHECK-LABEL: vpreduce_umin_nxv8i1:
890 ; CHECK:       # %bb.0:
891 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
892 ; CHECK-NEXT:    vmnot.m v9, v0
893 ; CHECK-NEXT:    vmv1r.v v0, v8
894 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
895 ; CHECK-NEXT:    seqz a1, a1
896 ; CHECK-NEXT:    and a0, a1, a0
897 ; CHECK-NEXT:    ret
898   %r = call i1 @llvm.vp.reduce.umin.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
899   ret i1 %r
902 declare i1 @llvm.vp.reduce.umin.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
904 define zeroext i1 @vpreduce_umin_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
905 ; CHECK-LABEL: vpreduce_umin_nxv16i1:
906 ; CHECK:       # %bb.0:
907 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
908 ; CHECK-NEXT:    vmnot.m v9, v0
909 ; CHECK-NEXT:    vmv1r.v v0, v8
910 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
911 ; CHECK-NEXT:    seqz a1, a1
912 ; CHECK-NEXT:    and a0, a1, a0
913 ; CHECK-NEXT:    ret
914   %r = call i1 @llvm.vp.reduce.umin.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
915   ret i1 %r
918 declare i1 @llvm.vp.reduce.umin.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
920 define zeroext i1 @vpreduce_umin_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
921 ; CHECK-LABEL: vpreduce_umin_nxv32i1:
922 ; CHECK:       # %bb.0:
923 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
924 ; CHECK-NEXT:    vmnot.m v9, v0
925 ; CHECK-NEXT:    vmv1r.v v0, v8
926 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
927 ; CHECK-NEXT:    seqz a1, a1
928 ; CHECK-NEXT:    and a0, a1, a0
929 ; CHECK-NEXT:    ret
930   %r = call i1 @llvm.vp.reduce.umin.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
931   ret i1 %r
934 declare i1 @llvm.vp.reduce.umin.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
936 define zeroext i1 @vpreduce_umin_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
937 ; CHECK-LABEL: vpreduce_umin_nxv64i1:
938 ; CHECK:       # %bb.0:
939 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
940 ; CHECK-NEXT:    vmnot.m v9, v0
941 ; CHECK-NEXT:    vmv1r.v v0, v8
942 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
943 ; CHECK-NEXT:    seqz a1, a1
944 ; CHECK-NEXT:    and a0, a1, a0
945 ; CHECK-NEXT:    ret
946   %r = call i1 @llvm.vp.reduce.umin.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
947   ret i1 %r
950 declare i1 @llvm.vp.reduce.mul.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
952 define zeroext i1 @vpreduce_mul_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
953 ; CHECK-LABEL: vpreduce_mul_nxv1i1:
954 ; CHECK:       # %bb.0:
955 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
956 ; CHECK-NEXT:    vmnot.m v9, v0
957 ; CHECK-NEXT:    vmv1r.v v0, v8
958 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
959 ; CHECK-NEXT:    seqz a1, a1
960 ; CHECK-NEXT:    and a0, a1, a0
961 ; CHECK-NEXT:    ret
962   %r = call i1 @llvm.vp.reduce.mul.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
963   ret i1 %r
966 declare i1 @llvm.vp.reduce.mul.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
968 define zeroext i1 @vpreduce_mul_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
969 ; CHECK-LABEL: vpreduce_mul_nxv2i1:
970 ; CHECK:       # %bb.0:
971 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
972 ; CHECK-NEXT:    vmnot.m v9, v0
973 ; CHECK-NEXT:    vmv1r.v v0, v8
974 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
975 ; CHECK-NEXT:    seqz a1, a1
976 ; CHECK-NEXT:    and a0, a1, a0
977 ; CHECK-NEXT:    ret
978   %r = call i1 @llvm.vp.reduce.mul.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
979   ret i1 %r
982 declare i1 @llvm.vp.reduce.mul.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
984 define zeroext i1 @vpreduce_mul_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
985 ; CHECK-LABEL: vpreduce_mul_nxv4i1:
986 ; CHECK:       # %bb.0:
987 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
988 ; CHECK-NEXT:    vmnot.m v9, v0
989 ; CHECK-NEXT:    vmv1r.v v0, v8
990 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
991 ; CHECK-NEXT:    seqz a1, a1
992 ; CHECK-NEXT:    and a0, a1, a0
993 ; CHECK-NEXT:    ret
994   %r = call i1 @llvm.vp.reduce.mul.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
995   ret i1 %r
998 declare i1 @llvm.vp.reduce.mul.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
1000 define zeroext i1 @vpreduce_mul_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1001 ; CHECK-LABEL: vpreduce_mul_nxv8i1:
1002 ; CHECK:       # %bb.0:
1003 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
1004 ; CHECK-NEXT:    vmnot.m v9, v0
1005 ; CHECK-NEXT:    vmv1r.v v0, v8
1006 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1007 ; CHECK-NEXT:    seqz a1, a1
1008 ; CHECK-NEXT:    and a0, a1, a0
1009 ; CHECK-NEXT:    ret
1010   %r = call i1 @llvm.vp.reduce.mul.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
1011   ret i1 %r
1014 declare i1 @llvm.vp.reduce.mul.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
1016 define zeroext i1 @vpreduce_mul_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1017 ; CHECK-LABEL: vpreduce_mul_nxv16i1:
1018 ; CHECK:       # %bb.0:
1019 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
1020 ; CHECK-NEXT:    vmnot.m v9, v0
1021 ; CHECK-NEXT:    vmv1r.v v0, v8
1022 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1023 ; CHECK-NEXT:    seqz a1, a1
1024 ; CHECK-NEXT:    and a0, a1, a0
1025 ; CHECK-NEXT:    ret
1026   %r = call i1 @llvm.vp.reduce.mul.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
1027   ret i1 %r
1030 declare i1 @llvm.vp.reduce.mul.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
1032 define zeroext i1 @vpreduce_mul_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
1033 ; CHECK-LABEL: vpreduce_mul_nxv32i1:
1034 ; CHECK:       # %bb.0:
1035 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
1036 ; CHECK-NEXT:    vmnot.m v9, v0
1037 ; CHECK-NEXT:    vmv1r.v v0, v8
1038 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1039 ; CHECK-NEXT:    seqz a1, a1
1040 ; CHECK-NEXT:    and a0, a1, a0
1041 ; CHECK-NEXT:    ret
1042   %r = call i1 @llvm.vp.reduce.mul.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
1043   ret i1 %r
1046 declare i1 @llvm.vp.reduce.mul.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
1048 define zeroext i1 @vpreduce_mul_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
1049 ; CHECK-LABEL: vpreduce_mul_nxv64i1:
1050 ; CHECK:       # %bb.0:
1051 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
1052 ; CHECK-NEXT:    vmnot.m v9, v0
1053 ; CHECK-NEXT:    vmv1r.v v0, v8
1054 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1055 ; CHECK-NEXT:    seqz a1, a1
1056 ; CHECK-NEXT:    and a0, a1, a0
1057 ; CHECK-NEXT:    ret
1058   %r = call i1 @llvm.vp.reduce.mul.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
1059   ret i1 %r