[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-reduction-mask-vp.ll
blob276f6b077931bfa59b63749d91d18d8e424d6ee2
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.v1i1(i1, <1 x i1>, <1 x i1>, i32)
7 define zeroext i1 @vpreduce_and_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
8 ; CHECK-LABEL: vpreduce_and_v1i1:
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.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
18   ret i1 %r
21 declare i1 @llvm.vp.reduce.or.v1i1(i1, <1 x i1>, <1 x i1>, i32)
23 define zeroext i1 @vpreduce_or_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: vpreduce_or_v1i1:
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.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
34   ret i1 %r
37 declare i1 @llvm.vp.reduce.xor.v1i1(i1, <1 x i1>, <1 x i1>, i32)
39 define zeroext i1 @vpreduce_xor_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
40 ; CHECK-LABEL: vpreduce_xor_v1i1:
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.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
50   ret i1 %r
53 declare i1 @llvm.vp.reduce.and.v2i1(i1, <2 x i1>, <2 x i1>, i32)
55 define zeroext i1 @vpreduce_and_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
56 ; CHECK-LABEL: vpreduce_and_v2i1:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, 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.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
66   ret i1 %r
69 declare i1 @llvm.vp.reduce.or.v2i1(i1, <2 x i1>, <2 x i1>, i32)
71 define zeroext i1 @vpreduce_or_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
72 ; CHECK-LABEL: vpreduce_or_v2i1:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, 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.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
82   ret i1 %r
85 declare i1 @llvm.vp.reduce.xor.v2i1(i1, <2 x i1>, <2 x i1>, i32)
87 define zeroext i1 @vpreduce_xor_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
88 ; CHECK-LABEL: vpreduce_xor_v2i1:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, 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.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
98   ret i1 %r
101 declare i1 @llvm.vp.reduce.and.v4i1(i1, <4 x i1>, <4 x i1>, i32)
103 define zeroext i1 @vpreduce_and_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
104 ; CHECK-LABEL: vpreduce_and_v4i1:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, 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.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
114   ret i1 %r
117 declare i1 @llvm.vp.reduce.or.v4i1(i1, <4 x i1>, <4 x i1>, i32)
119 define zeroext i1 @vpreduce_or_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
120 ; CHECK-LABEL: vpreduce_or_v4i1:
121 ; CHECK:       # %bb.0:
122 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, 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.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
130   ret i1 %r
133 declare i1 @llvm.vp.reduce.xor.v4i1(i1, <4 x i1>, <4 x i1>, i32)
135 define zeroext i1 @vpreduce_xor_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
136 ; CHECK-LABEL: vpreduce_xor_v4i1:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, 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.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
146   ret i1 %r
149 declare i1 @llvm.vp.reduce.and.v8i1(i1, <8 x i1>, <8 x i1>, i32)
151 define zeroext i1 @vpreduce_and_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
152 ; CHECK-LABEL: vpreduce_and_v8i1:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, 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.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
162   ret i1 %r
165 declare i1 @llvm.vp.reduce.or.v8i1(i1, <8 x i1>, <8 x i1>, i32)
167 define zeroext i1 @vpreduce_or_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
168 ; CHECK-LABEL: vpreduce_or_v8i1:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, 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.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
178   ret i1 %r
181 declare i1 @llvm.vp.reduce.xor.v8i1(i1, <8 x i1>, <8 x i1>, i32)
183 define zeroext i1 @vpreduce_xor_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
184 ; CHECK-LABEL: vpreduce_xor_v8i1:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, 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.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
194   ret i1 %r
197 declare i1 @llvm.vp.reduce.and.v10i1(i1, <10 x i1>, <10 x i1>, i32)
199 define zeroext i1 @vpreduce_and_v10i1(i1 zeroext %s, <10 x i1> %v, <10 x i1> %m, i32 zeroext %evl) {
200 ; CHECK-LABEL: vpreduce_and_v10i1:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, 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.v10i1(i1 %s, <10 x i1> %v, <10 x i1> %m, i32 %evl)
210   ret i1 %r
213 declare i1 @llvm.vp.reduce.and.v16i1(i1, <16 x i1>, <16 x i1>, i32)
215 define zeroext i1 @vpreduce_and_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
216 ; CHECK-LABEL: vpreduce_and_v16i1:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
219 ; CHECK-NEXT:    vmnot.m v9, v0
220 ; CHECK-NEXT:    vmv1r.v v0, v8
221 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
222 ; CHECK-NEXT:    seqz a1, a1
223 ; CHECK-NEXT:    and a0, a1, a0
224 ; CHECK-NEXT:    ret
225   %r = call i1 @llvm.vp.reduce.and.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
226   ret i1 %r
229 declare i1 @llvm.vp.reduce.and.v256i1(i1, <256 x i1>, <256 x i1>, i32)
231 define zeroext i1 @vpreduce_and_v256i1(i1 zeroext %s, <256 x i1> %v, <256 x i1> %m, i32 zeroext %evl) {
232 ; CHECK-LABEL: vpreduce_and_v256i1:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
235 ; CHECK-NEXT:    vmv1r.v v11, v9
236 ; CHECK-NEXT:    vmv1r.v v9, v0
237 ; CHECK-NEXT:    li a3, 128
238 ; CHECK-NEXT:    mv a2, a1
239 ; CHECK-NEXT:    bltu a1, a3, .LBB14_2
240 ; CHECK-NEXT:  # %bb.1:
241 ; CHECK-NEXT:    li a2, 128
242 ; CHECK-NEXT:  .LBB14_2:
243 ; CHECK-NEXT:    vmv1r.v v0, v11
244 ; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
245 ; CHECK-NEXT:    vmnot.m v9, v9
246 ; CHECK-NEXT:    vcpop.m a2, v9, v0.t
247 ; CHECK-NEXT:    seqz a2, a2
248 ; CHECK-NEXT:    and a0, a2, a0
249 ; CHECK-NEXT:    addi a2, a1, -128
250 ; CHECK-NEXT:    sltu a1, a1, a2
251 ; CHECK-NEXT:    addi a1, a1, -1
252 ; CHECK-NEXT:    and a1, a1, a2
253 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
254 ; CHECK-NEXT:    vmnot.m v8, v8
255 ; CHECK-NEXT:    vmv1r.v v0, v10
256 ; CHECK-NEXT:    vcpop.m a1, v8, v0.t
257 ; CHECK-NEXT:    seqz a1, a1
258 ; CHECK-NEXT:    and a0, a1, a0
259 ; CHECK-NEXT:    ret
260   %r = call i1 @llvm.vp.reduce.and.v256i1(i1 %s, <256 x i1> %v, <256 x i1> %m, i32 %evl)
261   ret i1 %r
264 declare i1 @llvm.vp.reduce.or.v16i1(i1, <16 x i1>, <16 x i1>, i32)
266 define zeroext i1 @vpreduce_or_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
267 ; CHECK-LABEL: vpreduce_or_v16i1:
268 ; CHECK:       # %bb.0:
269 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
270 ; CHECK-NEXT:    vmv1r.v v9, v0
271 ; CHECK-NEXT:    vmv1r.v v0, v8
272 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
273 ; CHECK-NEXT:    snez a1, a1
274 ; CHECK-NEXT:    or a0, a1, a0
275 ; CHECK-NEXT:    ret
276   %r = call i1 @llvm.vp.reduce.or.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
277   ret i1 %r
280 declare i1 @llvm.vp.reduce.xor.v16i1(i1, <16 x i1>, <16 x i1>, i32)
282 define zeroext i1 @vpreduce_xor_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
283 ; CHECK-LABEL: vpreduce_xor_v16i1:
284 ; CHECK:       # %bb.0:
285 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
286 ; CHECK-NEXT:    vmv1r.v v9, v0
287 ; CHECK-NEXT:    vmv1r.v v0, v8
288 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
289 ; CHECK-NEXT:    andi a1, a1, 1
290 ; CHECK-NEXT:    xor a0, a1, a0
291 ; CHECK-NEXT:    ret
292   %r = call i1 @llvm.vp.reduce.xor.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
293   ret i1 %r
296 declare i1 @llvm.vp.reduce.add.v1i1(i1, <1 x i1>, <1 x i1>, i32)
298 define zeroext i1 @vpreduce_add_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
299 ; CHECK-LABEL: vpreduce_add_v1i1:
300 ; CHECK:       # %bb.0:
301 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
302 ; CHECK-NEXT:    vmv1r.v v9, v0
303 ; CHECK-NEXT:    vmv1r.v v0, v8
304 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
305 ; CHECK-NEXT:    andi a1, a1, 1
306 ; CHECK-NEXT:    xor a0, a1, a0
307 ; CHECK-NEXT:    ret
308   %r = call i1 @llvm.vp.reduce.add.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
309   ret i1 %r
312 declare i1 @llvm.vp.reduce.add.v2i1(i1, <2 x i1>, <2 x i1>, i32)
314 define zeroext i1 @vpreduce_add_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
315 ; CHECK-LABEL: vpreduce_add_v2i1:
316 ; CHECK:       # %bb.0:
317 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
318 ; CHECK-NEXT:    vmv1r.v v9, v0
319 ; CHECK-NEXT:    vmv1r.v v0, v8
320 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
321 ; CHECK-NEXT:    andi a1, a1, 1
322 ; CHECK-NEXT:    xor a0, a1, a0
323 ; CHECK-NEXT:    ret
324   %r = call i1 @llvm.vp.reduce.add.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
325   ret i1 %r
328 declare i1 @llvm.vp.reduce.add.v4i1(i1, <4 x i1>, <4 x i1>, i32)
330 define zeroext i1 @vpreduce_add_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
331 ; CHECK-LABEL: vpreduce_add_v4i1:
332 ; CHECK:       # %bb.0:
333 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
334 ; CHECK-NEXT:    vmv1r.v v9, v0
335 ; CHECK-NEXT:    vmv1r.v v0, v8
336 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
337 ; CHECK-NEXT:    andi a1, a1, 1
338 ; CHECK-NEXT:    xor a0, a1, a0
339 ; CHECK-NEXT:    ret
340   %r = call i1 @llvm.vp.reduce.add.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
341   ret i1 %r
344 declare i1 @llvm.vp.reduce.add.v8i1(i1, <8 x i1>, <8 x i1>, i32)
346 define zeroext i1 @vpreduce_add_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
347 ; CHECK-LABEL: vpreduce_add_v8i1:
348 ; CHECK:       # %bb.0:
349 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
350 ; CHECK-NEXT:    vmv1r.v v9, v0
351 ; CHECK-NEXT:    vmv1r.v v0, v8
352 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
353 ; CHECK-NEXT:    andi a1, a1, 1
354 ; CHECK-NEXT:    xor a0, a1, a0
355 ; CHECK-NEXT:    ret
356   %r = call i1 @llvm.vp.reduce.add.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
357   ret i1 %r
360 declare i1 @llvm.vp.reduce.add.v16i1(i1, <16 x i1>, <16 x i1>, i32)
362 define zeroext i1 @vpreduce_add_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
363 ; CHECK-LABEL: vpreduce_add_v16i1:
364 ; CHECK:       # %bb.0:
365 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
366 ; CHECK-NEXT:    vmv1r.v v9, v0
367 ; CHECK-NEXT:    vmv1r.v v0, v8
368 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
369 ; CHECK-NEXT:    andi a1, a1, 1
370 ; CHECK-NEXT:    xor a0, a1, a0
371 ; CHECK-NEXT:    ret
372   %r = call i1 @llvm.vp.reduce.add.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
373   ret i1 %r
376 declare i1 @llvm.vp.reduce.smax.v1i1(i1, <1 x i1>, <1 x i1>, i32)
378 define zeroext i1 @vpreduce_smax_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
379 ; CHECK-LABEL: vpreduce_smax_v1i1:
380 ; CHECK:       # %bb.0:
381 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
382 ; CHECK-NEXT:    vmnot.m v9, v0
383 ; CHECK-NEXT:    vmv1r.v v0, v8
384 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
385 ; CHECK-NEXT:    seqz a1, a1
386 ; CHECK-NEXT:    and a0, a1, a0
387 ; CHECK-NEXT:    ret
388   %r = call i1 @llvm.vp.reduce.smax.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
389   ret i1 %r
392 declare i1 @llvm.vp.reduce.smax.v2i1(i1, <2 x i1>, <2 x i1>, i32)
394 define zeroext i1 @vpreduce_smax_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
395 ; CHECK-LABEL: vpreduce_smax_v2i1:
396 ; CHECK:       # %bb.0:
397 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
398 ; CHECK-NEXT:    vmnot.m v9, v0
399 ; CHECK-NEXT:    vmv1r.v v0, v8
400 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
401 ; CHECK-NEXT:    seqz a1, a1
402 ; CHECK-NEXT:    and a0, a1, a0
403 ; CHECK-NEXT:    ret
404   %r = call i1 @llvm.vp.reduce.smax.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
405   ret i1 %r
408 declare i1 @llvm.vp.reduce.smax.v4i1(i1, <4 x i1>, <4 x i1>, i32)
410 define zeroext i1 @vpreduce_smax_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
411 ; CHECK-LABEL: vpreduce_smax_v4i1:
412 ; CHECK:       # %bb.0:
413 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
414 ; CHECK-NEXT:    vmnot.m v9, v0
415 ; CHECK-NEXT:    vmv1r.v v0, v8
416 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
417 ; CHECK-NEXT:    seqz a1, a1
418 ; CHECK-NEXT:    and a0, a1, a0
419 ; CHECK-NEXT:    ret
420   %r = call i1 @llvm.vp.reduce.smax.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
421   ret i1 %r
424 declare i1 @llvm.vp.reduce.smax.v8i1(i1, <8 x i1>, <8 x i1>, i32)
426 define zeroext i1 @vpreduce_smax_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
427 ; CHECK-LABEL: vpreduce_smax_v8i1:
428 ; CHECK:       # %bb.0:
429 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
430 ; CHECK-NEXT:    vmnot.m v9, v0
431 ; CHECK-NEXT:    vmv1r.v v0, v8
432 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
433 ; CHECK-NEXT:    seqz a1, a1
434 ; CHECK-NEXT:    and a0, a1, a0
435 ; CHECK-NEXT:    ret
436   %r = call i1 @llvm.vp.reduce.smax.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
437   ret i1 %r
440 declare i1 @llvm.vp.reduce.smax.v16i1(i1, <16 x i1>, <16 x i1>, i32)
442 define zeroext i1 @vpreduce_smax_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
443 ; CHECK-LABEL: vpreduce_smax_v16i1:
444 ; CHECK:       # %bb.0:
445 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
446 ; CHECK-NEXT:    vmnot.m v9, v0
447 ; CHECK-NEXT:    vmv1r.v v0, v8
448 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
449 ; CHECK-NEXT:    seqz a1, a1
450 ; CHECK-NEXT:    and a0, a1, a0
451 ; CHECK-NEXT:    ret
452   %r = call i1 @llvm.vp.reduce.smax.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
453   ret i1 %r
456 declare i1 @llvm.vp.reduce.smax.v32i1(i1, <32 x i1>, <32 x i1>, i32)
458 define zeroext i1 @vpreduce_smax_v32i1(i1 zeroext %s, <32 x i1> %v, <32 x i1> %m, i32 zeroext %evl) {
459 ; CHECK-LABEL: vpreduce_smax_v32i1:
460 ; CHECK:       # %bb.0:
461 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
462 ; CHECK-NEXT:    vmnot.m v9, v0
463 ; CHECK-NEXT:    vmv1r.v v0, v8
464 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
465 ; CHECK-NEXT:    seqz a1, a1
466 ; CHECK-NEXT:    and a0, a1, a0
467 ; CHECK-NEXT:    ret
468   %r = call i1 @llvm.vp.reduce.smax.v32i1(i1 %s, <32 x i1> %v, <32 x i1> %m, i32 %evl)
469   ret i1 %r
472 declare i1 @llvm.vp.reduce.smax.v64i1(i1, <64 x i1>, <64 x i1>, i32)
474 define zeroext i1 @vpreduce_smax_v64i1(i1 zeroext %s, <64 x i1> %v, <64 x i1> %m, i32 zeroext %evl) {
475 ; CHECK-LABEL: vpreduce_smax_v64i1:
476 ; CHECK:       # %bb.0:
477 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
478 ; CHECK-NEXT:    vmnot.m v9, v0
479 ; CHECK-NEXT:    vmv1r.v v0, v8
480 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
481 ; CHECK-NEXT:    seqz a1, a1
482 ; CHECK-NEXT:    and a0, a1, a0
483 ; CHECK-NEXT:    ret
484   %r = call i1 @llvm.vp.reduce.smax.v64i1(i1 %s, <64 x i1> %v, <64 x i1> %m, i32 %evl)
485   ret i1 %r
488 declare i1 @llvm.vp.reduce.smin.v1i1(i1, <1 x i1>, <1 x i1>, i32)
490 define zeroext i1 @vpreduce_smin_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
491 ; CHECK-LABEL: vpreduce_smin_v1i1:
492 ; CHECK:       # %bb.0:
493 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
494 ; CHECK-NEXT:    vmv1r.v v9, v0
495 ; CHECK-NEXT:    vmv1r.v v0, v8
496 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
497 ; CHECK-NEXT:    snez a1, a1
498 ; CHECK-NEXT:    or a0, a1, a0
499 ; CHECK-NEXT:    ret
500   %r = call i1 @llvm.vp.reduce.smin.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
501   ret i1 %r
504 declare i1 @llvm.vp.reduce.smin.v2i1(i1, <2 x i1>, <2 x i1>, i32)
506 define zeroext i1 @vpreduce_smin_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
507 ; CHECK-LABEL: vpreduce_smin_v2i1:
508 ; CHECK:       # %bb.0:
509 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
510 ; CHECK-NEXT:    vmv1r.v v9, v0
511 ; CHECK-NEXT:    vmv1r.v v0, v8
512 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
513 ; CHECK-NEXT:    snez a1, a1
514 ; CHECK-NEXT:    or a0, a1, a0
515 ; CHECK-NEXT:    ret
516   %r = call i1 @llvm.vp.reduce.smin.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
517   ret i1 %r
520 declare i1 @llvm.vp.reduce.smin.v4i1(i1, <4 x i1>, <4 x i1>, i32)
522 define zeroext i1 @vpreduce_smin_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
523 ; CHECK-LABEL: vpreduce_smin_v4i1:
524 ; CHECK:       # %bb.0:
525 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
526 ; CHECK-NEXT:    vmv1r.v v9, v0
527 ; CHECK-NEXT:    vmv1r.v v0, v8
528 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
529 ; CHECK-NEXT:    snez a1, a1
530 ; CHECK-NEXT:    or a0, a1, a0
531 ; CHECK-NEXT:    ret
532   %r = call i1 @llvm.vp.reduce.smin.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
533   ret i1 %r
536 declare i1 @llvm.vp.reduce.smin.v8i1(i1, <8 x i1>, <8 x i1>, i32)
538 define zeroext i1 @vpreduce_smin_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
539 ; CHECK-LABEL: vpreduce_smin_v8i1:
540 ; CHECK:       # %bb.0:
541 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
542 ; CHECK-NEXT:    vmv1r.v v9, v0
543 ; CHECK-NEXT:    vmv1r.v v0, v8
544 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
545 ; CHECK-NEXT:    snez a1, a1
546 ; CHECK-NEXT:    or a0, a1, a0
547 ; CHECK-NEXT:    ret
548   %r = call i1 @llvm.vp.reduce.smin.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
549   ret i1 %r
552 declare i1 @llvm.vp.reduce.smin.v16i1(i1, <16 x i1>, <16 x i1>, i32)
554 define zeroext i1 @vpreduce_smin_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
555 ; CHECK-LABEL: vpreduce_smin_v16i1:
556 ; CHECK:       # %bb.0:
557 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
558 ; CHECK-NEXT:    vmv1r.v v9, v0
559 ; CHECK-NEXT:    vmv1r.v v0, v8
560 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
561 ; CHECK-NEXT:    snez a1, a1
562 ; CHECK-NEXT:    or a0, a1, a0
563 ; CHECK-NEXT:    ret
564   %r = call i1 @llvm.vp.reduce.smin.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
565   ret i1 %r
568 declare i1 @llvm.vp.reduce.smin.v32i1(i1, <32 x i1>, <32 x i1>, i32)
570 define zeroext i1 @vpreduce_smin_v32i1(i1 zeroext %s, <32 x i1> %v, <32 x i1> %m, i32 zeroext %evl) {
571 ; CHECK-LABEL: vpreduce_smin_v32i1:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
574 ; CHECK-NEXT:    vmv1r.v v9, v0
575 ; CHECK-NEXT:    vmv1r.v v0, v8
576 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
577 ; CHECK-NEXT:    snez a1, a1
578 ; CHECK-NEXT:    or a0, a1, a0
579 ; CHECK-NEXT:    ret
580   %r = call i1 @llvm.vp.reduce.smin.v32i1(i1 %s, <32 x i1> %v, <32 x i1> %m, i32 %evl)
581   ret i1 %r
584 declare i1 @llvm.vp.reduce.smin.v64i1(i1, <64 x i1>, <64 x i1>, i32)
586 define zeroext i1 @vpreduce_smin_v64i1(i1 zeroext %s, <64 x i1> %v, <64 x i1> %m, i32 zeroext %evl) {
587 ; CHECK-LABEL: vpreduce_smin_v64i1:
588 ; CHECK:       # %bb.0:
589 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
590 ; CHECK-NEXT:    vmv1r.v v9, v0
591 ; CHECK-NEXT:    vmv1r.v v0, v8
592 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
593 ; CHECK-NEXT:    snez a1, a1
594 ; CHECK-NEXT:    or a0, a1, a0
595 ; CHECK-NEXT:    ret
596   %r = call i1 @llvm.vp.reduce.smin.v64i1(i1 %s, <64 x i1> %v, <64 x i1> %m, i32 %evl)
597   ret i1 %r
600 declare i1 @llvm.vp.reduce.umax.v1i1(i1, <1 x i1>, <1 x i1>, i32)
602 define zeroext i1 @vpreduce_umax_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
603 ; CHECK-LABEL: vpreduce_umax_v1i1:
604 ; CHECK:       # %bb.0:
605 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
606 ; CHECK-NEXT:    vmv1r.v v9, v0
607 ; CHECK-NEXT:    vmv1r.v v0, v8
608 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
609 ; CHECK-NEXT:    snez a1, a1
610 ; CHECK-NEXT:    or a0, a1, a0
611 ; CHECK-NEXT:    ret
612   %r = call i1 @llvm.vp.reduce.umax.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
613   ret i1 %r
616 declare i1 @llvm.vp.reduce.umax.v2i1(i1, <2 x i1>, <2 x i1>, i32)
618 define zeroext i1 @vpreduce_umax_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
619 ; CHECK-LABEL: vpreduce_umax_v2i1:
620 ; CHECK:       # %bb.0:
621 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
622 ; CHECK-NEXT:    vmv1r.v v9, v0
623 ; CHECK-NEXT:    vmv1r.v v0, v8
624 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
625 ; CHECK-NEXT:    snez a1, a1
626 ; CHECK-NEXT:    or a0, a1, a0
627 ; CHECK-NEXT:    ret
628   %r = call i1 @llvm.vp.reduce.umax.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
629   ret i1 %r
632 declare i1 @llvm.vp.reduce.umax.v4i1(i1, <4 x i1>, <4 x i1>, i32)
634 define zeroext i1 @vpreduce_umax_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
635 ; CHECK-LABEL: vpreduce_umax_v4i1:
636 ; CHECK:       # %bb.0:
637 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
638 ; CHECK-NEXT:    vmv1r.v v9, v0
639 ; CHECK-NEXT:    vmv1r.v v0, v8
640 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
641 ; CHECK-NEXT:    snez a1, a1
642 ; CHECK-NEXT:    or a0, a1, a0
643 ; CHECK-NEXT:    ret
644   %r = call i1 @llvm.vp.reduce.umax.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
645   ret i1 %r
648 declare i1 @llvm.vp.reduce.umax.v8i1(i1, <8 x i1>, <8 x i1>, i32)
650 define zeroext i1 @vpreduce_umax_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
651 ; CHECK-LABEL: vpreduce_umax_v8i1:
652 ; CHECK:       # %bb.0:
653 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
654 ; CHECK-NEXT:    vmv1r.v v9, v0
655 ; CHECK-NEXT:    vmv1r.v v0, v8
656 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
657 ; CHECK-NEXT:    snez a1, a1
658 ; CHECK-NEXT:    or a0, a1, a0
659 ; CHECK-NEXT:    ret
660   %r = call i1 @llvm.vp.reduce.umax.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
661   ret i1 %r
664 declare i1 @llvm.vp.reduce.umax.v16i1(i1, <16 x i1>, <16 x i1>, i32)
666 define zeroext i1 @vpreduce_umax_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
667 ; CHECK-LABEL: vpreduce_umax_v16i1:
668 ; CHECK:       # %bb.0:
669 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
670 ; CHECK-NEXT:    vmv1r.v v9, v0
671 ; CHECK-NEXT:    vmv1r.v v0, v8
672 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
673 ; CHECK-NEXT:    snez a1, a1
674 ; CHECK-NEXT:    or a0, a1, a0
675 ; CHECK-NEXT:    ret
676   %r = call i1 @llvm.vp.reduce.umax.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
677   ret i1 %r
680 declare i1 @llvm.vp.reduce.umax.v32i1(i1, <32 x i1>, <32 x i1>, i32)
682 define zeroext i1 @vpreduce_umax_v32i1(i1 zeroext %s, <32 x i1> %v, <32 x i1> %m, i32 zeroext %evl) {
683 ; CHECK-LABEL: vpreduce_umax_v32i1:
684 ; CHECK:       # %bb.0:
685 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
686 ; CHECK-NEXT:    vmv1r.v v9, v0
687 ; CHECK-NEXT:    vmv1r.v v0, v8
688 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
689 ; CHECK-NEXT:    snez a1, a1
690 ; CHECK-NEXT:    or a0, a1, a0
691 ; CHECK-NEXT:    ret
692   %r = call i1 @llvm.vp.reduce.umax.v32i1(i1 %s, <32 x i1> %v, <32 x i1> %m, i32 %evl)
693   ret i1 %r
696 declare i1 @llvm.vp.reduce.umax.v64i1(i1, <64 x i1>, <64 x i1>, i32)
698 define zeroext i1 @vpreduce_umax_v64i1(i1 zeroext %s, <64 x i1> %v, <64 x i1> %m, i32 zeroext %evl) {
699 ; CHECK-LABEL: vpreduce_umax_v64i1:
700 ; CHECK:       # %bb.0:
701 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
702 ; CHECK-NEXT:    vmv1r.v v9, v0
703 ; CHECK-NEXT:    vmv1r.v v0, v8
704 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
705 ; CHECK-NEXT:    snez a1, a1
706 ; CHECK-NEXT:    or a0, a1, a0
707 ; CHECK-NEXT:    ret
708   %r = call i1 @llvm.vp.reduce.umax.v64i1(i1 %s, <64 x i1> %v, <64 x i1> %m, i32 %evl)
709   ret i1 %r
712 declare i1 @llvm.vp.reduce.umin.v1i1(i1, <1 x i1>, <1 x i1>, i32)
714 define zeroext i1 @vpreduce_umin_v1i1(i1 zeroext %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
715 ; CHECK-LABEL: vpreduce_umin_v1i1:
716 ; CHECK:       # %bb.0:
717 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
718 ; CHECK-NEXT:    vmnot.m v9, v0
719 ; CHECK-NEXT:    vmv1r.v v0, v8
720 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
721 ; CHECK-NEXT:    seqz a1, a1
722 ; CHECK-NEXT:    and a0, a1, a0
723 ; CHECK-NEXT:    ret
724   %r = call i1 @llvm.vp.reduce.umin.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
725   ret i1 %r
728 declare i1 @llvm.vp.reduce.umin.v2i1(i1, <2 x i1>, <2 x i1>, i32)
730 define zeroext i1 @vpreduce_umin_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
731 ; CHECK-LABEL: vpreduce_umin_v2i1:
732 ; CHECK:       # %bb.0:
733 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
734 ; CHECK-NEXT:    vmnot.m v9, v0
735 ; CHECK-NEXT:    vmv1r.v v0, v8
736 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
737 ; CHECK-NEXT:    seqz a1, a1
738 ; CHECK-NEXT:    and a0, a1, a0
739 ; CHECK-NEXT:    ret
740   %r = call i1 @llvm.vp.reduce.umin.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
741   ret i1 %r
744 declare i1 @llvm.vp.reduce.umin.v4i1(i1, <4 x i1>, <4 x i1>, i32)
746 define zeroext i1 @vpreduce_umin_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
747 ; CHECK-LABEL: vpreduce_umin_v4i1:
748 ; CHECK:       # %bb.0:
749 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
750 ; CHECK-NEXT:    vmnot.m v9, v0
751 ; CHECK-NEXT:    vmv1r.v v0, v8
752 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
753 ; CHECK-NEXT:    seqz a1, a1
754 ; CHECK-NEXT:    and a0, a1, a0
755 ; CHECK-NEXT:    ret
756   %r = call i1 @llvm.vp.reduce.umin.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
757   ret i1 %r
760 declare i1 @llvm.vp.reduce.umin.v8i1(i1, <8 x i1>, <8 x i1>, i32)
762 define zeroext i1 @vpreduce_umin_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
763 ; CHECK-LABEL: vpreduce_umin_v8i1:
764 ; CHECK:       # %bb.0:
765 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
766 ; CHECK-NEXT:    vmnot.m v9, v0
767 ; CHECK-NEXT:    vmv1r.v v0, v8
768 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
769 ; CHECK-NEXT:    seqz a1, a1
770 ; CHECK-NEXT:    and a0, a1, a0
771 ; CHECK-NEXT:    ret
772   %r = call i1 @llvm.vp.reduce.umin.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
773   ret i1 %r
776 declare i1 @llvm.vp.reduce.umin.v16i1(i1, <16 x i1>, <16 x i1>, i32)
778 define zeroext i1 @vpreduce_umin_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
779 ; CHECK-LABEL: vpreduce_umin_v16i1:
780 ; CHECK:       # %bb.0:
781 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
782 ; CHECK-NEXT:    vmnot.m v9, v0
783 ; CHECK-NEXT:    vmv1r.v v0, v8
784 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
785 ; CHECK-NEXT:    seqz a1, a1
786 ; CHECK-NEXT:    and a0, a1, a0
787 ; CHECK-NEXT:    ret
788   %r = call i1 @llvm.vp.reduce.umin.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
789   ret i1 %r
792 declare i1 @llvm.vp.reduce.umin.v32i1(i1, <32 x i1>, <32 x i1>, i32)
794 define zeroext i1 @vpreduce_umin_v32i1(i1 zeroext %s, <32 x i1> %v, <32 x i1> %m, i32 zeroext %evl) {
795 ; CHECK-LABEL: vpreduce_umin_v32i1:
796 ; CHECK:       # %bb.0:
797 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
798 ; CHECK-NEXT:    vmnot.m v9, v0
799 ; CHECK-NEXT:    vmv1r.v v0, v8
800 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
801 ; CHECK-NEXT:    seqz a1, a1
802 ; CHECK-NEXT:    and a0, a1, a0
803 ; CHECK-NEXT:    ret
804   %r = call i1 @llvm.vp.reduce.umin.v32i1(i1 %s, <32 x i1> %v, <32 x i1> %m, i32 %evl)
805   ret i1 %r
808 declare i1 @llvm.vp.reduce.umin.v64i1(i1, <64 x i1>, <64 x i1>, i32)
810 define zeroext i1 @vpreduce_umin_v64i1(i1 zeroext %s, <64 x i1> %v, <64 x i1> %m, i32 zeroext %evl) {
811 ; CHECK-LABEL: vpreduce_umin_v64i1:
812 ; CHECK:       # %bb.0:
813 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
814 ; CHECK-NEXT:    vmnot.m v9, v0
815 ; CHECK-NEXT:    vmv1r.v v0, v8
816 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
817 ; CHECK-NEXT:    seqz a1, a1
818 ; CHECK-NEXT:    and a0, a1, a0
819 ; CHECK-NEXT:    ret
820   %r = call i1 @llvm.vp.reduce.umin.v64i1(i1 %s, <64 x i1> %v, <64 x i1> %m, i32 %evl)
821   ret i1 %r
824 declare i1 @llvm.vp.reduce.mul.v1i1(i1, <1 x i1>, <1 x i1>, i32)
826 define i1 @vpreduce_mul_v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 zeroext %evl) {
827 ; CHECK-LABEL: vpreduce_mul_v1i1:
828 ; CHECK:       # %bb.0:
829 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
830 ; CHECK-NEXT:    vmnot.m v9, v0
831 ; CHECK-NEXT:    vmv1r.v v0, v8
832 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
833 ; CHECK-NEXT:    seqz a1, a1
834 ; CHECK-NEXT:    and a0, a1, a0
835 ; CHECK-NEXT:    ret
836   %r = call i1 @llvm.vp.reduce.mul.v1i1(i1 %s, <1 x i1> %v, <1 x i1> %m, i32 %evl)
837   ret i1 %r
840 declare i1 @llvm.vp.reduce.mul.v2i1(i1, <2 x i1>, <2 x i1>, i32)
842 define zeroext i1 @vpreduce_mul_v2i1(i1 zeroext %s, <2 x i1> %v, <2 x i1> %m, i32 zeroext %evl) {
843 ; CHECK-LABEL: vpreduce_mul_v2i1:
844 ; CHECK:       # %bb.0:
845 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
846 ; CHECK-NEXT:    vmnot.m v9, v0
847 ; CHECK-NEXT:    vmv1r.v v0, v8
848 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
849 ; CHECK-NEXT:    seqz a1, a1
850 ; CHECK-NEXT:    and a0, a1, a0
851 ; CHECK-NEXT:    ret
852   %r = call i1 @llvm.vp.reduce.mul.v2i1(i1 %s, <2 x i1> %v, <2 x i1> %m, i32 %evl)
853   ret i1 %r
856 declare i1 @llvm.vp.reduce.mul.v4i1(i1, <4 x i1>, <4 x i1>, i32)
858 define zeroext i1 @vpreduce_mul_v4i1(i1 zeroext %s, <4 x i1> %v, <4 x i1> %m, i32 zeroext %evl) {
859 ; CHECK-LABEL: vpreduce_mul_v4i1:
860 ; CHECK:       # %bb.0:
861 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
862 ; CHECK-NEXT:    vmnot.m v9, v0
863 ; CHECK-NEXT:    vmv1r.v v0, v8
864 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
865 ; CHECK-NEXT:    seqz a1, a1
866 ; CHECK-NEXT:    and a0, a1, a0
867 ; CHECK-NEXT:    ret
868   %r = call i1 @llvm.vp.reduce.mul.v4i1(i1 %s, <4 x i1> %v, <4 x i1> %m, i32 %evl)
869   ret i1 %r
872 declare i1 @llvm.vp.reduce.mul.v8i1(i1, <8 x i1>, <8 x i1>, i32)
874 define zeroext i1 @vpreduce_mul_v8i1(i1 zeroext %s, <8 x i1> %v, <8 x i1> %m, i32 zeroext %evl) {
875 ; CHECK-LABEL: vpreduce_mul_v8i1:
876 ; CHECK:       # %bb.0:
877 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
878 ; CHECK-NEXT:    vmnot.m v9, v0
879 ; CHECK-NEXT:    vmv1r.v v0, v8
880 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
881 ; CHECK-NEXT:    seqz a1, a1
882 ; CHECK-NEXT:    and a0, a1, a0
883 ; CHECK-NEXT:    ret
884   %r = call i1 @llvm.vp.reduce.mul.v8i1(i1 %s, <8 x i1> %v, <8 x i1> %m, i32 %evl)
885   ret i1 %r
888 declare i1 @llvm.vp.reduce.mul.v16i1(i1, <16 x i1>, <16 x i1>, i32)
890 define zeroext i1 @vpreduce_mul_v16i1(i1 zeroext %s, <16 x i1> %v, <16 x i1> %m, i32 zeroext %evl) {
891 ; CHECK-LABEL: vpreduce_mul_v16i1:
892 ; CHECK:       # %bb.0:
893 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
894 ; CHECK-NEXT:    vmnot.m v9, v0
895 ; CHECK-NEXT:    vmv1r.v v0, v8
896 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
897 ; CHECK-NEXT:    seqz a1, a1
898 ; CHECK-NEXT:    and a0, a1, a0
899 ; CHECK-NEXT:    ret
900   %r = call i1 @llvm.vp.reduce.mul.v16i1(i1 %s, <16 x i1> %v, <16 x i1> %m, i32 %evl)
901   ret i1 %r
904 declare i1 @llvm.vp.reduce.mul.v32i1(i1, <32 x i1>, <32 x i1>, i32)
906 define zeroext i1 @vpreduce_mul_v32i1(i1 zeroext %s, <32 x i1> %v, <32 x i1> %m, i32 zeroext %evl) {
907 ; CHECK-LABEL: vpreduce_mul_v32i1:
908 ; CHECK:       # %bb.0:
909 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
910 ; CHECK-NEXT:    vmnot.m v9, v0
911 ; CHECK-NEXT:    vmv1r.v v0, v8
912 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
913 ; CHECK-NEXT:    seqz a1, a1
914 ; CHECK-NEXT:    and a0, a1, a0
915 ; CHECK-NEXT:    ret
916   %r = call i1 @llvm.vp.reduce.mul.v32i1(i1 %s, <32 x i1> %v, <32 x i1> %m, i32 %evl)
917   ret i1 %r
920 declare i1 @llvm.vp.reduce.mul.v64i1(i1, <64 x i1>, <64 x i1>, i32)
922 define zeroext i1 @vpreduce_mul_v64i1(i1 zeroext %s, <64 x i1> %v, <64 x i1> %m, i32 zeroext %evl) {
923 ; CHECK-LABEL: vpreduce_mul_v64i1:
924 ; CHECK:       # %bb.0:
925 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
926 ; CHECK-NEXT:    vmnot.m v9, v0
927 ; CHECK-NEXT:    vmv1r.v v0, v8
928 ; CHECK-NEXT:    vcpop.m a1, v9, v0.t
929 ; CHECK-NEXT:    seqz a1, a1
930 ; CHECK-NEXT:    and a0, a1, a0
931 ; CHECK-NEXT:    ret
932   %r = call i1 @llvm.vp.reduce.mul.v64i1(i1 %s, <64 x i1> %v, <64 x i1> %m, i32 %evl)
933   ret i1 %r