[CodeGenPrepare] Drop nsw flags in `optimizeLoadExt` (#118180)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vreductions-mask-vp.ll
blob39666bb6119a0f2c74c93da38fc942847a48afd4
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:    vmv1r.v v9, v0
27 ; CHECK-NEXT:    vmv1r.v v0, v8
28 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
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:    vmv1r.v v9, v0
43 ; CHECK-NEXT:    vmv1r.v v0, v8
44 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
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:    vmv1r.v v9, v0
75 ; CHECK-NEXT:    vmv1r.v v0, v8
76 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
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:    vmv1r.v v9, v0
91 ; CHECK-NEXT:    vmv1r.v v0, v8
92 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
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:    vmv1r.v v9, v0
123 ; CHECK-NEXT:    vmv1r.v v0, v8
124 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
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:    vmv1r.v v9, v0
139 ; CHECK-NEXT:    vmv1r.v v0, v8
140 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
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:    vmv1r.v v9, v0
171 ; CHECK-NEXT:    vmv1r.v v0, v8
172 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
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:    vmv1r.v v9, v0
187 ; CHECK-NEXT:    vmv1r.v v0, v8
188 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
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:    vmv1r.v v9, v0
219 ; CHECK-NEXT:    vmv1r.v v0, v8
220 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
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:    vmv1r.v v9, v0
235 ; CHECK-NEXT:    vmv1r.v v0, v8
236 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
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:    vmv1r.v v9, v0
267 ; CHECK-NEXT:    vmv1r.v v0, v8
268 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
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:    vmv1r.v v9, v0
283 ; CHECK-NEXT:    vmv1r.v v0, v8
284 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
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:    vmv1r.v v9, v0
299 ; CHECK-NEXT:    vmv1r.v v0, v8
300 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
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:    vmv1r.v v9, v0
331 ; CHECK-NEXT:    vmv1r.v v0, v8
332 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
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:    vmv1r.v v9, v0
347 ; CHECK-NEXT:    vmv1r.v v0, v8
348 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
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:    vmv1r.v v11, v0
363 ; CHECK-NEXT:    csrr a2, vlenb
364 ; CHECK-NEXT:    slli a2, a2, 3
365 ; CHECK-NEXT:    sub a3, a1, a2
366 ; CHECK-NEXT:    sltu a4, a1, a3
367 ; CHECK-NEXT:    addi a4, a4, -1
368 ; CHECK-NEXT:    and a3, a4, a3
369 ; CHECK-NEXT:    vmv1r.v v0, v10
370 ; CHECK-NEXT:    vsetvli zero, a3, e8, m8, ta, ma
371 ; CHECK-NEXT:    vcpop.m a3, v8, v0.t
372 ; CHECK-NEXT:    snez a3, a3
373 ; CHECK-NEXT:    bltu a1, a2, .LBB22_2
374 ; CHECK-NEXT:  # %bb.1:
375 ; CHECK-NEXT:    mv a1, a2
376 ; CHECK-NEXT:  .LBB22_2:
377 ; CHECK-NEXT:    vmv1r.v v0, v9
378 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
379 ; CHECK-NEXT:    vcpop.m a1, v11, v0.t
380 ; CHECK-NEXT:    snez a1, a1
381 ; CHECK-NEXT:    or a0, a1, a0
382 ; CHECK-NEXT:    or a0, a3, a0
383 ; CHECK-NEXT:    ret
384   %r = call i1 @llvm.vp.reduce.or.nxv128i1(i1 %s, <vscale x 128 x i1> %v, <vscale x 128 x i1> %m, i32 %evl)
385   ret i1 %r
388 declare i1 @llvm.vp.reduce.add.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
390 define zeroext i1 @vpreduce_add_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
391 ; CHECK-LABEL: vpreduce_add_nxv1i1:
392 ; CHECK:       # %bb.0:
393 ; CHECK-NEXT:    vmv1r.v v9, v0
394 ; CHECK-NEXT:    vmv1r.v v0, v8
395 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
396 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
397 ; CHECK-NEXT:    andi a1, a1, 1
398 ; CHECK-NEXT:    xor a0, a1, a0
399 ; CHECK-NEXT:    ret
400   %r = call i1 @llvm.vp.reduce.add.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
401   ret i1 %r
404 declare i1 @llvm.vp.reduce.add.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
406 define zeroext i1 @vpreduce_add_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
407 ; CHECK-LABEL: vpreduce_add_nxv2i1:
408 ; CHECK:       # %bb.0:
409 ; CHECK-NEXT:    vmv1r.v v9, v0
410 ; CHECK-NEXT:    vmv1r.v v0, v8
411 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
412 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
413 ; CHECK-NEXT:    andi a1, a1, 1
414 ; CHECK-NEXT:    xor a0, a1, a0
415 ; CHECK-NEXT:    ret
416   %r = call i1 @llvm.vp.reduce.add.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
417   ret i1 %r
420 declare i1 @llvm.vp.reduce.add.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
422 define zeroext i1 @vpreduce_add_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
423 ; CHECK-LABEL: vpreduce_add_nxv4i1:
424 ; CHECK:       # %bb.0:
425 ; CHECK-NEXT:    vmv1r.v v9, v0
426 ; CHECK-NEXT:    vmv1r.v v0, v8
427 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
428 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
429 ; CHECK-NEXT:    andi a1, a1, 1
430 ; CHECK-NEXT:    xor a0, a1, a0
431 ; CHECK-NEXT:    ret
432   %r = call i1 @llvm.vp.reduce.add.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
433   ret i1 %r
436 declare i1 @llvm.vp.reduce.add.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
438 define zeroext i1 @vpreduce_add_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
439 ; CHECK-LABEL: vpreduce_add_nxv8i1:
440 ; CHECK:       # %bb.0:
441 ; CHECK-NEXT:    vmv1r.v v9, v0
442 ; CHECK-NEXT:    vmv1r.v v0, v8
443 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
444 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
445 ; CHECK-NEXT:    andi a1, a1, 1
446 ; CHECK-NEXT:    xor a0, a1, a0
447 ; CHECK-NEXT:    ret
448   %r = call i1 @llvm.vp.reduce.add.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
449   ret i1 %r
452 declare i1 @llvm.vp.reduce.add.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
454 define zeroext i1 @vpreduce_add_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
455 ; CHECK-LABEL: vpreduce_add_nxv16i1:
456 ; CHECK:       # %bb.0:
457 ; CHECK-NEXT:    vmv1r.v v9, v0
458 ; CHECK-NEXT:    vmv1r.v v0, v8
459 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
460 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
461 ; CHECK-NEXT:    andi a1, a1, 1
462 ; CHECK-NEXT:    xor a0, a1, a0
463 ; CHECK-NEXT:    ret
464   %r = call i1 @llvm.vp.reduce.add.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
465   ret i1 %r
468 declare i1 @llvm.vp.reduce.add.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
470 define zeroext i1 @vpreduce_add_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
471 ; CHECK-LABEL: vpreduce_add_nxv32i1:
472 ; CHECK:       # %bb.0:
473 ; CHECK-NEXT:    vmv1r.v v9, v0
474 ; CHECK-NEXT:    vmv1r.v v0, v8
475 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
476 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
477 ; CHECK-NEXT:    andi a1, a1, 1
478 ; CHECK-NEXT:    xor a0, a1, a0
479 ; CHECK-NEXT:    ret
480   %r = call i1 @llvm.vp.reduce.add.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
481   ret i1 %r
484 declare i1 @llvm.vp.reduce.add.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
486 define zeroext i1 @vpreduce_add_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
487 ; CHECK-LABEL: vpreduce_add_nxv64i1:
488 ; CHECK:       # %bb.0:
489 ; CHECK-NEXT:    vmv1r.v v9, v0
490 ; CHECK-NEXT:    vmv1r.v v0, v8
491 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
492 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
493 ; CHECK-NEXT:    andi a1, a1, 1
494 ; CHECK-NEXT:    xor a0, a1, a0
495 ; CHECK-NEXT:    ret
496   %r = call i1 @llvm.vp.reduce.add.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
497   ret i1 %r
501 declare i1 @llvm.vp.reduce.smax.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
503 define zeroext i1 @vpreduce_smax_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
504 ; CHECK-LABEL: vpreduce_smax_nxv1i1:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
507 ; CHECK-NEXT:    vmnot.m v9, v0
508 ; CHECK-NEXT:    vmv1r.v v0, v8
509 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
510 ; CHECK-NEXT:    seqz a1, a1
511 ; CHECK-NEXT:    and a0, a1, a0
512 ; CHECK-NEXT:    ret
513   %r = call i1 @llvm.vp.reduce.smax.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
514   ret i1 %r
517 declare i1 @llvm.vp.reduce.smax.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
519 define zeroext i1 @vpreduce_smax_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
520 ; CHECK-LABEL: vpreduce_smax_nxv2i1:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
523 ; CHECK-NEXT:    vmnot.m v9, v0
524 ; CHECK-NEXT:    vmv1r.v v0, v8
525 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
526 ; CHECK-NEXT:    seqz a1, a1
527 ; CHECK-NEXT:    and a0, a1, a0
528 ; CHECK-NEXT:    ret
529   %r = call i1 @llvm.vp.reduce.smax.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
530   ret i1 %r
533 declare i1 @llvm.vp.reduce.smax.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
535 define zeroext i1 @vpreduce_smax_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
536 ; CHECK-LABEL: vpreduce_smax_nxv4i1:
537 ; CHECK:       # %bb.0:
538 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
539 ; CHECK-NEXT:    vmnot.m v9, v0
540 ; CHECK-NEXT:    vmv1r.v v0, v8
541 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
542 ; CHECK-NEXT:    seqz a1, a1
543 ; CHECK-NEXT:    and a0, a1, a0
544 ; CHECK-NEXT:    ret
545   %r = call i1 @llvm.vp.reduce.smax.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
546   ret i1 %r
549 declare i1 @llvm.vp.reduce.smax.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
551 define zeroext i1 @vpreduce_smax_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
552 ; CHECK-LABEL: vpreduce_smax_nxv8i1:
553 ; CHECK:       # %bb.0:
554 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
555 ; CHECK-NEXT:    vmnot.m v9, v0
556 ; CHECK-NEXT:    vmv1r.v v0, v8
557 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
558 ; CHECK-NEXT:    seqz a1, a1
559 ; CHECK-NEXT:    and a0, a1, a0
560 ; CHECK-NEXT:    ret
561   %r = call i1 @llvm.vp.reduce.smax.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
562   ret i1 %r
565 declare i1 @llvm.vp.reduce.smax.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
567 define zeroext i1 @vpreduce_smax_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
568 ; CHECK-LABEL: vpreduce_smax_nxv16i1:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
571 ; CHECK-NEXT:    vmnot.m v9, v0
572 ; CHECK-NEXT:    vmv1r.v v0, v8
573 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
574 ; CHECK-NEXT:    seqz a1, a1
575 ; CHECK-NEXT:    and a0, a1, a0
576 ; CHECK-NEXT:    ret
577   %r = call i1 @llvm.vp.reduce.smax.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
578   ret i1 %r
581 declare i1 @llvm.vp.reduce.smax.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
583 define zeroext i1 @vpreduce_smax_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
584 ; CHECK-LABEL: vpreduce_smax_nxv32i1:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
587 ; CHECK-NEXT:    vmnot.m v9, v0
588 ; CHECK-NEXT:    vmv1r.v v0, v8
589 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
590 ; CHECK-NEXT:    seqz a1, a1
591 ; CHECK-NEXT:    and a0, a1, a0
592 ; CHECK-NEXT:    ret
593   %r = call i1 @llvm.vp.reduce.smax.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
594   ret i1 %r
597 declare i1 @llvm.vp.reduce.smax.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
599 define zeroext i1 @vpreduce_smax_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
600 ; CHECK-LABEL: vpreduce_smax_nxv64i1:
601 ; CHECK:       # %bb.0:
602 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
603 ; CHECK-NEXT:    vmnot.m v9, v0
604 ; CHECK-NEXT:    vmv1r.v v0, v8
605 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
606 ; CHECK-NEXT:    seqz a1, a1
607 ; CHECK-NEXT:    and a0, a1, a0
608 ; CHECK-NEXT:    ret
609   %r = call i1 @llvm.vp.reduce.smax.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
610   ret i1 %r
613 declare i1 @llvm.vp.reduce.smin.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
615 define zeroext i1 @vpreduce_smin_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
616 ; CHECK-LABEL: vpreduce_smin_nxv1i1:
617 ; CHECK:       # %bb.0:
618 ; CHECK-NEXT:    vmv1r.v v9, v0
619 ; CHECK-NEXT:    vmv1r.v v0, v8
620 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
621 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
622 ; CHECK-NEXT:    snez a1, a1
623 ; CHECK-NEXT:    or a0, a1, a0
624 ; CHECK-NEXT:    ret
625   %r = call i1 @llvm.vp.reduce.smin.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
626   ret i1 %r
629 declare i1 @llvm.vp.reduce.smin.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
631 define zeroext i1 @vpreduce_smin_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
632 ; CHECK-LABEL: vpreduce_smin_nxv2i1:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vmv1r.v v9, v0
635 ; CHECK-NEXT:    vmv1r.v v0, v8
636 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
637 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
638 ; CHECK-NEXT:    snez a1, a1
639 ; CHECK-NEXT:    or a0, a1, a0
640 ; CHECK-NEXT:    ret
641   %r = call i1 @llvm.vp.reduce.smin.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
642   ret i1 %r
645 declare i1 @llvm.vp.reduce.smin.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
647 define zeroext i1 @vpreduce_smin_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
648 ; CHECK-LABEL: vpreduce_smin_nxv4i1:
649 ; CHECK:       # %bb.0:
650 ; CHECK-NEXT:    vmv1r.v v9, v0
651 ; CHECK-NEXT:    vmv1r.v v0, v8
652 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
653 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
654 ; CHECK-NEXT:    snez a1, a1
655 ; CHECK-NEXT:    or a0, a1, a0
656 ; CHECK-NEXT:    ret
657   %r = call i1 @llvm.vp.reduce.smin.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
658   ret i1 %r
661 declare i1 @llvm.vp.reduce.smin.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
663 define zeroext i1 @vpreduce_smin_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
664 ; CHECK-LABEL: vpreduce_smin_nxv8i1:
665 ; CHECK:       # %bb.0:
666 ; CHECK-NEXT:    vmv1r.v v9, v0
667 ; CHECK-NEXT:    vmv1r.v v0, v8
668 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
669 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
670 ; CHECK-NEXT:    snez a1, a1
671 ; CHECK-NEXT:    or a0, a1, a0
672 ; CHECK-NEXT:    ret
673   %r = call i1 @llvm.vp.reduce.smin.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
674   ret i1 %r
677 declare i1 @llvm.vp.reduce.smin.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
679 define zeroext i1 @vpreduce_smin_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
680 ; CHECK-LABEL: vpreduce_smin_nxv16i1:
681 ; CHECK:       # %bb.0:
682 ; CHECK-NEXT:    vmv1r.v v9, v0
683 ; CHECK-NEXT:    vmv1r.v v0, v8
684 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
685 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
686 ; CHECK-NEXT:    snez a1, a1
687 ; CHECK-NEXT:    or a0, a1, a0
688 ; CHECK-NEXT:    ret
689   %r = call i1 @llvm.vp.reduce.smin.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
690   ret i1 %r
693 declare i1 @llvm.vp.reduce.smin.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
695 define zeroext i1 @vpreduce_smin_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
696 ; CHECK-LABEL: vpreduce_smin_nxv32i1:
697 ; CHECK:       # %bb.0:
698 ; CHECK-NEXT:    vmv1r.v v9, v0
699 ; CHECK-NEXT:    vmv1r.v v0, v8
700 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
701 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
702 ; CHECK-NEXT:    snez a1, a1
703 ; CHECK-NEXT:    or a0, a1, a0
704 ; CHECK-NEXT:    ret
705   %r = call i1 @llvm.vp.reduce.smin.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
706   ret i1 %r
709 declare i1 @llvm.vp.reduce.smin.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
711 define zeroext i1 @vpreduce_smin_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
712 ; CHECK-LABEL: vpreduce_smin_nxv64i1:
713 ; CHECK:       # %bb.0:
714 ; CHECK-NEXT:    vmv1r.v v9, v0
715 ; CHECK-NEXT:    vmv1r.v v0, v8
716 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
717 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
718 ; CHECK-NEXT:    snez a1, a1
719 ; CHECK-NEXT:    or a0, a1, a0
720 ; CHECK-NEXT:    ret
721   %r = call i1 @llvm.vp.reduce.smin.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
722   ret i1 %r
725 declare i1 @llvm.vp.reduce.umax.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
727 define zeroext i1 @vpreduce_umax_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
728 ; CHECK-LABEL: vpreduce_umax_nxv1i1:
729 ; CHECK:       # %bb.0:
730 ; CHECK-NEXT:    vmv1r.v v9, v0
731 ; CHECK-NEXT:    vmv1r.v v0, v8
732 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
733 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
734 ; CHECK-NEXT:    snez a1, a1
735 ; CHECK-NEXT:    or a0, a1, a0
736 ; CHECK-NEXT:    ret
737   %r = call i1 @llvm.vp.reduce.umax.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
738   ret i1 %r
741 declare i1 @llvm.vp.reduce.umax.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
743 define zeroext i1 @vpreduce_umax_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
744 ; CHECK-LABEL: vpreduce_umax_nxv2i1:
745 ; CHECK:       # %bb.0:
746 ; CHECK-NEXT:    vmv1r.v v9, v0
747 ; CHECK-NEXT:    vmv1r.v v0, v8
748 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
749 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
750 ; CHECK-NEXT:    snez a1, a1
751 ; CHECK-NEXT:    or a0, a1, a0
752 ; CHECK-NEXT:    ret
753   %r = call i1 @llvm.vp.reduce.umax.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
754   ret i1 %r
757 declare i1 @llvm.vp.reduce.umax.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
759 define zeroext i1 @vpreduce_umax_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
760 ; CHECK-LABEL: vpreduce_umax_nxv4i1:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vmv1r.v v9, v0
763 ; CHECK-NEXT:    vmv1r.v v0, v8
764 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
765 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
766 ; CHECK-NEXT:    snez a1, a1
767 ; CHECK-NEXT:    or a0, a1, a0
768 ; CHECK-NEXT:    ret
769   %r = call i1 @llvm.vp.reduce.umax.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
770   ret i1 %r
773 declare i1 @llvm.vp.reduce.umax.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
775 define zeroext i1 @vpreduce_umax_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
776 ; CHECK-LABEL: vpreduce_umax_nxv8i1:
777 ; CHECK:       # %bb.0:
778 ; CHECK-NEXT:    vmv1r.v v9, v0
779 ; CHECK-NEXT:    vmv1r.v v0, v8
780 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
781 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
782 ; CHECK-NEXT:    snez a1, a1
783 ; CHECK-NEXT:    or a0, a1, a0
784 ; CHECK-NEXT:    ret
785   %r = call i1 @llvm.vp.reduce.umax.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
786   ret i1 %r
789 declare i1 @llvm.vp.reduce.umax.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
791 define zeroext i1 @vpreduce_umax_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
792 ; CHECK-LABEL: vpreduce_umax_nxv16i1:
793 ; CHECK:       # %bb.0:
794 ; CHECK-NEXT:    vmv1r.v v9, v0
795 ; CHECK-NEXT:    vmv1r.v v0, v8
796 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
797 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
798 ; CHECK-NEXT:    snez a1, a1
799 ; CHECK-NEXT:    or a0, a1, a0
800 ; CHECK-NEXT:    ret
801   %r = call i1 @llvm.vp.reduce.umax.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
802   ret i1 %r
805 declare i1 @llvm.vp.reduce.umax.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
807 define zeroext i1 @vpreduce_umax_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
808 ; CHECK-LABEL: vpreduce_umax_nxv32i1:
809 ; CHECK:       # %bb.0:
810 ; CHECK-NEXT:    vmv1r.v v9, v0
811 ; CHECK-NEXT:    vmv1r.v v0, v8
812 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
813 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
814 ; CHECK-NEXT:    snez a1, a1
815 ; CHECK-NEXT:    or a0, a1, a0
816 ; CHECK-NEXT:    ret
817   %r = call i1 @llvm.vp.reduce.umax.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
818   ret i1 %r
821 declare i1 @llvm.vp.reduce.umax.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
823 define zeroext i1 @vpreduce_umax_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
824 ; CHECK-LABEL: vpreduce_umax_nxv64i1:
825 ; CHECK:       # %bb.0:
826 ; CHECK-NEXT:    vmv1r.v v9, v0
827 ; CHECK-NEXT:    vmv1r.v v0, v8
828 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
829 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
830 ; CHECK-NEXT:    snez a1, a1
831 ; CHECK-NEXT:    or a0, a1, a0
832 ; CHECK-NEXT:    ret
833   %r = call i1 @llvm.vp.reduce.umax.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
834   ret i1 %r
837 declare i1 @llvm.vp.reduce.umin.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
839 define zeroext i1 @vpreduce_umin_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
840 ; CHECK-LABEL: vpreduce_umin_nxv1i1:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
843 ; CHECK-NEXT:    vmnot.m v9, v0
844 ; CHECK-NEXT:    vmv1r.v v0, v8
845 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
846 ; CHECK-NEXT:    seqz a1, a1
847 ; CHECK-NEXT:    and a0, a1, a0
848 ; CHECK-NEXT:    ret
849   %r = call i1 @llvm.vp.reduce.umin.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
850   ret i1 %r
853 declare i1 @llvm.vp.reduce.umin.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
855 define zeroext i1 @vpreduce_umin_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
856 ; CHECK-LABEL: vpreduce_umin_nxv2i1:
857 ; CHECK:       # %bb.0:
858 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
859 ; CHECK-NEXT:    vmnot.m v9, v0
860 ; CHECK-NEXT:    vmv1r.v v0, v8
861 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
862 ; CHECK-NEXT:    seqz a1, a1
863 ; CHECK-NEXT:    and a0, a1, a0
864 ; CHECK-NEXT:    ret
865   %r = call i1 @llvm.vp.reduce.umin.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
866   ret i1 %r
869 declare i1 @llvm.vp.reduce.umin.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
871 define zeroext i1 @vpreduce_umin_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
872 ; CHECK-LABEL: vpreduce_umin_nxv4i1:
873 ; CHECK:       # %bb.0:
874 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
875 ; CHECK-NEXT:    vmnot.m v9, v0
876 ; CHECK-NEXT:    vmv1r.v v0, v8
877 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
878 ; CHECK-NEXT:    seqz a1, a1
879 ; CHECK-NEXT:    and a0, a1, a0
880 ; CHECK-NEXT:    ret
881   %r = call i1 @llvm.vp.reduce.umin.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
882   ret i1 %r
885 declare i1 @llvm.vp.reduce.umin.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
887 define zeroext i1 @vpreduce_umin_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
888 ; CHECK-LABEL: vpreduce_umin_nxv8i1:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
891 ; CHECK-NEXT:    vmnot.m v9, v0
892 ; CHECK-NEXT:    vmv1r.v v0, v8
893 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
894 ; CHECK-NEXT:    seqz a1, a1
895 ; CHECK-NEXT:    and a0, a1, a0
896 ; CHECK-NEXT:    ret
897   %r = call i1 @llvm.vp.reduce.umin.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
898   ret i1 %r
901 declare i1 @llvm.vp.reduce.umin.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
903 define zeroext i1 @vpreduce_umin_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
904 ; CHECK-LABEL: vpreduce_umin_nxv16i1:
905 ; CHECK:       # %bb.0:
906 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
907 ; CHECK-NEXT:    vmnot.m v9, v0
908 ; CHECK-NEXT:    vmv1r.v v0, v8
909 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
910 ; CHECK-NEXT:    seqz a1, a1
911 ; CHECK-NEXT:    and a0, a1, a0
912 ; CHECK-NEXT:    ret
913   %r = call i1 @llvm.vp.reduce.umin.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
914   ret i1 %r
917 declare i1 @llvm.vp.reduce.umin.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
919 define zeroext i1 @vpreduce_umin_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
920 ; CHECK-LABEL: vpreduce_umin_nxv32i1:
921 ; CHECK:       # %bb.0:
922 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
923 ; CHECK-NEXT:    vmnot.m v9, v0
924 ; CHECK-NEXT:    vmv1r.v v0, v8
925 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
926 ; CHECK-NEXT:    seqz a1, a1
927 ; CHECK-NEXT:    and a0, a1, a0
928 ; CHECK-NEXT:    ret
929   %r = call i1 @llvm.vp.reduce.umin.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
930   ret i1 %r
933 declare i1 @llvm.vp.reduce.umin.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
935 define zeroext i1 @vpreduce_umin_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
936 ; CHECK-LABEL: vpreduce_umin_nxv64i1:
937 ; CHECK:       # %bb.0:
938 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
939 ; CHECK-NEXT:    vmnot.m v9, v0
940 ; CHECK-NEXT:    vmv1r.v v0, v8
941 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
942 ; CHECK-NEXT:    seqz a1, a1
943 ; CHECK-NEXT:    and a0, a1, a0
944 ; CHECK-NEXT:    ret
945   %r = call i1 @llvm.vp.reduce.umin.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
946   ret i1 %r
949 declare i1 @llvm.vp.reduce.mul.nxv1i1(i1, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
951 define zeroext i1 @vpreduce_mul_nxv1i1(i1 zeroext %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 zeroext %evl) {
952 ; CHECK-LABEL: vpreduce_mul_nxv1i1:
953 ; CHECK:       # %bb.0:
954 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
955 ; CHECK-NEXT:    vmnot.m v9, v0
956 ; CHECK-NEXT:    vmv1r.v v0, v8
957 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
958 ; CHECK-NEXT:    seqz a1, a1
959 ; CHECK-NEXT:    and a0, a1, a0
960 ; CHECK-NEXT:    ret
961   %r = call i1 @llvm.vp.reduce.mul.nxv1i1(i1 %s, <vscale x 1 x i1> %v, <vscale x 1 x i1> %m, i32 %evl)
962   ret i1 %r
965 declare i1 @llvm.vp.reduce.mul.nxv2i1(i1, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
967 define zeroext i1 @vpreduce_mul_nxv2i1(i1 zeroext %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 zeroext %evl) {
968 ; CHECK-LABEL: vpreduce_mul_nxv2i1:
969 ; CHECK:       # %bb.0:
970 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
971 ; CHECK-NEXT:    vmnot.m v9, v0
972 ; CHECK-NEXT:    vmv1r.v v0, v8
973 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
974 ; CHECK-NEXT:    seqz a1, a1
975 ; CHECK-NEXT:    and a0, a1, a0
976 ; CHECK-NEXT:    ret
977   %r = call i1 @llvm.vp.reduce.mul.nxv2i1(i1 %s, <vscale x 2 x i1> %v, <vscale x 2 x i1> %m, i32 %evl)
978   ret i1 %r
981 declare i1 @llvm.vp.reduce.mul.nxv4i1(i1, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
983 define zeroext i1 @vpreduce_mul_nxv4i1(i1 zeroext %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 zeroext %evl) {
984 ; CHECK-LABEL: vpreduce_mul_nxv4i1:
985 ; CHECK:       # %bb.0:
986 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
987 ; CHECK-NEXT:    vmnot.m v9, v0
988 ; CHECK-NEXT:    vmv1r.v v0, v8
989 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
990 ; CHECK-NEXT:    seqz a1, a1
991 ; CHECK-NEXT:    and a0, a1, a0
992 ; CHECK-NEXT:    ret
993   %r = call i1 @llvm.vp.reduce.mul.nxv4i1(i1 %s, <vscale x 4 x i1> %v, <vscale x 4 x i1> %m, i32 %evl)
994   ret i1 %r
997 declare i1 @llvm.vp.reduce.mul.nxv8i1(i1, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
999 define zeroext i1 @vpreduce_mul_nxv8i1(i1 zeroext %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1000 ; CHECK-LABEL: vpreduce_mul_nxv8i1:
1001 ; CHECK:       # %bb.0:
1002 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
1003 ; CHECK-NEXT:    vmnot.m v9, v0
1004 ; CHECK-NEXT:    vmv1r.v v0, v8
1005 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1006 ; CHECK-NEXT:    seqz a1, a1
1007 ; CHECK-NEXT:    and a0, a1, a0
1008 ; CHECK-NEXT:    ret
1009   %r = call i1 @llvm.vp.reduce.mul.nxv8i1(i1 %s, <vscale x 8 x i1> %v, <vscale x 8 x i1> %m, i32 %evl)
1010   ret i1 %r
1013 declare i1 @llvm.vp.reduce.mul.nxv16i1(i1, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
1015 define zeroext i1 @vpreduce_mul_nxv16i1(i1 zeroext %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1016 ; CHECK-LABEL: vpreduce_mul_nxv16i1:
1017 ; CHECK:       # %bb.0:
1018 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
1019 ; CHECK-NEXT:    vmnot.m v9, v0
1020 ; CHECK-NEXT:    vmv1r.v v0, v8
1021 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1022 ; CHECK-NEXT:    seqz a1, a1
1023 ; CHECK-NEXT:    and a0, a1, a0
1024 ; CHECK-NEXT:    ret
1025   %r = call i1 @llvm.vp.reduce.mul.nxv16i1(i1 %s, <vscale x 16 x i1> %v, <vscale x 16 x i1> %m, i32 %evl)
1026   ret i1 %r
1029 declare i1 @llvm.vp.reduce.mul.nxv32i1(i1, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
1031 define zeroext i1 @vpreduce_mul_nxv32i1(i1 zeroext %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 zeroext %evl) {
1032 ; CHECK-LABEL: vpreduce_mul_nxv32i1:
1033 ; CHECK:       # %bb.0:
1034 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
1035 ; CHECK-NEXT:    vmnot.m v9, v0
1036 ; CHECK-NEXT:    vmv1r.v v0, v8
1037 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1038 ; CHECK-NEXT:    seqz a1, a1
1039 ; CHECK-NEXT:    and a0, a1, a0
1040 ; CHECK-NEXT:    ret
1041   %r = call i1 @llvm.vp.reduce.mul.nxv32i1(i1 %s, <vscale x 32 x i1> %v, <vscale x 32 x i1> %m, i32 %evl)
1042   ret i1 %r
1045 declare i1 @llvm.vp.reduce.mul.nxv64i1(i1, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
1047 define zeroext i1 @vpreduce_mul_nxv64i1(i1 zeroext %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 zeroext %evl) {
1048 ; CHECK-LABEL: vpreduce_mul_nxv64i1:
1049 ; CHECK:       # %bb.0:
1050 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
1051 ; CHECK-NEXT:    vmnot.m v9, v0
1052 ; CHECK-NEXT:    vmv1r.v v0, v8
1053 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
1054 ; CHECK-NEXT:    seqz a1, a1
1055 ; CHECK-NEXT:    and a0, a1, a0
1056 ; CHECK-NEXT:    ret
1057   %r = call i1 @llvm.vp.reduce.mul.nxv64i1(i1 %s, <vscale x 64 x i1> %v, <vscale x 64 x i1> %m, i32 %evl)
1058   ret i1 %r