[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Transforms / InstSimplify / ConstProp / vecreduce.ll
blobe27180b1a8909dc8eb20ec8c59ce57ff44a9c30e
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -instsimplify -S | FileCheck %s
4 declare i32 @llvm.vector.reduce.add.v1i32(<1 x i32> %a)
5 declare i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %a)
6 declare i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> %a)
7 declare i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> %a)
8 declare i32 @llvm.vector.reduce.and.v1i32(<1 x i32> %a)
9 declare i32 @llvm.vector.reduce.and.v8i32(<8 x i32> %a)
10 declare i32 @llvm.vector.reduce.or.v1i32(<1 x i32> %a)
11 declare i32 @llvm.vector.reduce.or.v8i32(<8 x i32> %a)
12 declare i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> %a)
13 declare i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> %a)
14 declare i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> %a)
15 declare i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> %a)
16 declare i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> %a)
17 declare i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> %a)
18 declare i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> %a)
19 declare i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %a)
20 declare i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> %a)
21 declare i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> %a)
24 define i32 @add_0() {
25 ; CHECK-LABEL: @add_0(
26 ; CHECK-NEXT:    ret i32 0
28   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> zeroinitializer)
29   ret i32 %x
32 define i32 @add_1() {
33 ; CHECK-LABEL: @add_1(
34 ; CHECK-NEXT:    ret i32 8
36   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
37   ret i32 %x
40 define i32 @add_inc() {
41 ; CHECK-LABEL: @add_inc(
42 ; CHECK-NEXT:    ret i32 18
44   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
45   ret i32 %x
48 define i32 @add_1v() {
49 ; CHECK-LABEL: @add_1v(
50 ; CHECK-NEXT:    ret i32 10
52   %x = call i32 @llvm.vector.reduce.add.v1i32(<1 x i32> <i32 10>)
53   ret i32 %x
56 define i32 @add_undef() {
57 ; CHECK-LABEL: @add_undef(
58 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> undef)
59 ; CHECK-NEXT:    ret i32 [[X]]
61   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> undef)
62   ret i32 %x
65 define i32 @add_undef1() {
66 ; CHECK-LABEL: @add_undef1(
67 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
68 ; CHECK-NEXT:    ret i32 [[X]]
70   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
71   ret i32 %x
74 define i32 @add_poison() {
75 ; CHECK-LABEL: @add_poison(
76 ; CHECK-NEXT:    ret i32 poison
78   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> poison)
79   ret i32 %x
82 define i32 @add_poison1() {
83 ; CHECK-LABEL: @add_poison1(
84 ; CHECK-NEXT:    ret i32 poison
86   %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> <i32 1, i32 1, i32 poison, i32 1, i32 1, i32 42, i32 1, i32 1>)
87   ret i32 %x
90 define i32 @mul_0() {
91 ; CHECK-LABEL: @mul_0(
92 ; CHECK-NEXT:    ret i32 0
94   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> zeroinitializer)
95   ret i32 %x
98 define i32 @mul_1() {
99 ; CHECK-LABEL: @mul_1(
100 ; CHECK-NEXT:    ret i32 1
102   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
103   ret i32 %x
106 define i32 @mul_inc() {
107 ; CHECK-LABEL: @mul_inc(
108 ; CHECK-NEXT:    ret i32 40320
110   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
111   ret i32 %x
114 define i32 @mul_1v() {
115 ; CHECK-LABEL: @mul_1v(
116 ; CHECK-NEXT:    ret i32 10
118   %x = call i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> <i32 10>)
119   ret i32 %x
122 define i32 @mul_undef() {
123 ; CHECK-LABEL: @mul_undef(
124 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef)
125 ; CHECK-NEXT:    ret i32 [[X]]
127   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef)
128   ret i32 %x
131 define i32 @mul_undef1() {
132 ; CHECK-LABEL: @mul_undef1(
133 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
134 ; CHECK-NEXT:    ret i32 [[X]]
136   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
137   ret i32 %x
140 define i32 @mul_poison() {
141 ; CHECK-LABEL: @mul_poison(
142 ; CHECK-NEXT:    ret i32 poison
144   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> poison)
145   ret i32 %x
148 define i32 @mul_poison1() {
149 ; CHECK-LABEL: @mul_poison1(
150 ; CHECK-NEXT:    ret i32 poison
152   %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> <i32 0, i32 1, i32 poison, i32 1, i32 1, i32 1, i32 1, i32 1>)
153   ret i32 %x
156 define i32 @and_0() {
157 ; CHECK-LABEL: @and_0(
158 ; CHECK-NEXT:    ret i32 0
160   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> zeroinitializer)
161   ret i32 %x
164 define i32 @and_1() {
165 ; CHECK-LABEL: @and_1(
166 ; CHECK-NEXT:    ret i32 1
168   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
169   ret i32 %x
172 define i32 @and_inc() {
173 ; CHECK-LABEL: @and_inc(
174 ; CHECK-NEXT:    ret i32 0
176   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
177   ret i32 %x
180 define i32 @and_1v() {
181 ; CHECK-LABEL: @and_1v(
182 ; CHECK-NEXT:    ret i32 10
184   %x = call i32 @llvm.vector.reduce.and.v1i32(<1 x i32> <i32 10>)
185   ret i32 %x
188 define i32 @and_undef() {
189 ; CHECK-LABEL: @and_undef(
190 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef)
191 ; CHECK-NEXT:    ret i32 [[X]]
193   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef)
194   ret i32 %x
197 define i32 @and_undef1() {
198 ; CHECK-LABEL: @and_undef1(
199 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
200 ; CHECK-NEXT:    ret i32 [[X]]
202   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
203   ret i32 %x
206 define i32 @and_poison() {
207 ; CHECK-LABEL: @and_poison(
208 ; CHECK-NEXT:    ret i32 poison
210   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> poison)
211   ret i32 %x
214 define i32 @and_poison1() {
215 ; CHECK-LABEL: @and_poison1(
216 ; CHECK-NEXT:    ret i32 poison
218   %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> <i32 -1, i32 1, i32 poison, i32 1, i32 1, i32 1, i32 1, i32 1>)
219   ret i32 %x
222 define i32 @or_0() {
223 ; CHECK-LABEL: @or_0(
224 ; CHECK-NEXT:    ret i32 0
226   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> zeroinitializer)
227   ret i32 %x
230 define i32 @or_1() {
231 ; CHECK-LABEL: @or_1(
232 ; CHECK-NEXT:    ret i32 1
234   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
235   ret i32 %x
238 define i32 @or_inc() {
239 ; CHECK-LABEL: @or_inc(
240 ; CHECK-NEXT:    ret i32 -1
242   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
243   ret i32 %x
246 define i32 @or_1v() {
247 ; CHECK-LABEL: @or_1v(
248 ; CHECK-NEXT:    ret i32 10
250   %x = call i32 @llvm.vector.reduce.or.v1i32(<1 x i32> <i32 10>)
251   ret i32 %x
254 define i32 @or_undef() {
255 ; CHECK-LABEL: @or_undef(
256 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef)
257 ; CHECK-NEXT:    ret i32 [[X]]
259   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef)
260   ret i32 %x
263 define i32 @or_undef1() {
264 ; CHECK-LABEL: @or_undef1(
265 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
266 ; CHECK-NEXT:    ret i32 [[X]]
268   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
269   ret i32 %x
272 define i32 @or_poison() {
273 ; CHECK-LABEL: @or_poison(
274 ; CHECK-NEXT:    ret i32 poison
276   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> poison)
277   ret i32 %x
280 define i32 @or_poison1() {
281 ; CHECK-LABEL: @or_poison1(
282 ; CHECK-NEXT:    ret i32 poison
284   %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> <i32 1, i32 0, i32 poison, i32 1, i32 1, i32 1, i32 1, i32 1>)
285   ret i32 %x
288 define i32 @xor_0() {
289 ; CHECK-LABEL: @xor_0(
290 ; CHECK-NEXT:    ret i32 0
292   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> zeroinitializer)
293   ret i32 %x
296 define i32 @xor_1() {
297 ; CHECK-LABEL: @xor_1(
298 ; CHECK-NEXT:    ret i32 0
300   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
301   ret i32 %x
304 define i32 @xor_inc() {
305 ; CHECK-LABEL: @xor_inc(
306 ; CHECK-NEXT:    ret i32 10
308   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
309   ret i32 %x
312 define i32 @xor_1v() {
313 ; CHECK-LABEL: @xor_1v(
314 ; CHECK-NEXT:    ret i32 10
316   %x = call i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> <i32 10>)
317   ret i32 %x
320 define i32 @xor_undef() {
321 ; CHECK-LABEL: @xor_undef(
322 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef)
323 ; CHECK-NEXT:    ret i32 [[X]]
325   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef)
326   ret i32 %x
329 define i32 @xor_undef1() {
330 ; CHECK-LABEL: @xor_undef1(
331 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
332 ; CHECK-NEXT:    ret i32 [[X]]
334   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
335   ret i32 %x
338 define i32 @xor_poison() {
339 ; CHECK-LABEL: @xor_poison(
340 ; CHECK-NEXT:    ret i32 poison
342   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> poison)
343   ret i32 %x
346 define i32 @xor_poison1() {
347 ; CHECK-LABEL: @xor_poison1(
348 ; CHECK-NEXT:    ret i32 poison
350   %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> <i32 poison, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
351   ret i32 %x
354 define i32 @smin_0() {
355 ; CHECK-LABEL: @smin_0(
356 ; CHECK-NEXT:    ret i32 0
358   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> zeroinitializer)
359   ret i32 %x
362 define i32 @smin_1() {
363 ; CHECK-LABEL: @smin_1(
364 ; CHECK-NEXT:    ret i32 1
366   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
367   ret i32 %x
370 define i32 @smin_inc() {
371 ; CHECK-LABEL: @smin_inc(
372 ; CHECK-NEXT:    ret i32 -6
374   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
375   ret i32 %x
378 define i32 @smin_1v() {
379 ; CHECK-LABEL: @smin_1v(
380 ; CHECK-NEXT:    ret i32 10
382   %x = call i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> <i32 10>)
383   ret i32 %x
386 define i32 @smin_undef() {
387 ; CHECK-LABEL: @smin_undef(
388 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef)
389 ; CHECK-NEXT:    ret i32 [[X]]
391   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef)
392   ret i32 %x
395 define i32 @smin_undef1() {
396 ; CHECK-LABEL: @smin_undef1(
397 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
398 ; CHECK-NEXT:    ret i32 [[X]]
400   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
401   ret i32 %x
404 define i32 @smin_poison() {
405 ; CHECK-LABEL: @smin_poison(
406 ; CHECK-NEXT:    ret i32 poison
408   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> poison)
409   ret i32 %x
412 define i32 @smin_poison1() {
413 ; CHECK-LABEL: @smin_poison1(
414 ; CHECK-NEXT:    ret i32 poison
416   %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 poison, i32 1, i32 1, i32 1>)
417   ret i32 %x
420 define i32 @smax_0() {
421 ; CHECK-LABEL: @smax_0(
422 ; CHECK-NEXT:    ret i32 0
424   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> zeroinitializer)
425   ret i32 %x
428 define i32 @smax_1() {
429 ; CHECK-LABEL: @smax_1(
430 ; CHECK-NEXT:    ret i32 1
432   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
433   ret i32 %x
436 define i32 @smax_inc() {
437 ; CHECK-LABEL: @smax_inc(
438 ; CHECK-NEXT:    ret i32 8
440   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
441   ret i32 %x
444 define i32 @smax_1v() {
445 ; CHECK-LABEL: @smax_1v(
446 ; CHECK-NEXT:    ret i32 10
448   %x = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> <i32 10>)
449   ret i32 %x
452 define i32 @smax_undef() {
453 ; CHECK-LABEL: @smax_undef(
454 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
455 ; CHECK-NEXT:    ret i32 [[X]]
457   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
458   ret i32 %x
461 define i32 @smax_undef1() {
462 ; CHECK-LABEL: @smax_undef1(
463 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
464 ; CHECK-NEXT:    ret i32 [[X]]
466   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
467   ret i32 %x
470 define i32 @smax_poison() {
471 ; CHECK-LABEL: @smax_poison(
472 ; CHECK-NEXT:    ret i32 poison
474   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> poison)
475   ret i32 %x
478 define i32 @smax_poison1() {
479 ; CHECK-LABEL: @smax_poison1(
480 ; CHECK-NEXT:    ret i32 poison
482   %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> <i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 poison>)
483   ret i32 %x
486 define i32 @umin_0() {
487 ; CHECK-LABEL: @umin_0(
488 ; CHECK-NEXT:    ret i32 0
490   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> zeroinitializer)
491   ret i32 %x
494 define i32 @umin_1() {
495 ; CHECK-LABEL: @umin_1(
496 ; CHECK-NEXT:    ret i32 1
498   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
499   ret i32 %x
502 define i32 @umin_inc() {
503 ; CHECK-LABEL: @umin_inc(
504 ; CHECK-NEXT:    ret i32 1
506   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
507   ret i32 %x
510 define i32 @umin_1v() {
511 ; CHECK-LABEL: @umin_1v(
512 ; CHECK-NEXT:    ret i32 10
514   %x = call i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> <i32 10>)
515   ret i32 %x
518 define i32 @umin_undef() {
519 ; CHECK-LABEL: @umin_undef(
520 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef)
521 ; CHECK-NEXT:    ret i32 [[X]]
523   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef)
524   ret i32 %x
527 define i32 @umin_undef1() {
528 ; CHECK-LABEL: @umin_undef1(
529 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
530 ; CHECK-NEXT:    ret i32 [[X]]
532   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
533   ret i32 %x
536 define i32 @umin_poison() {
537 ; CHECK-LABEL: @umin_poison(
538 ; CHECK-NEXT:    ret i32 poison
540   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> poison)
541   ret i32 %x
544 define i32 @umin_poison1() {
545 ; CHECK-LABEL: @umin_poison1(
546 ; CHECK-NEXT:    ret i32 poison
548   %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> <i32 1, i32 1, i32 -1, i32 poison, i32 1, i32 1, i32 1, i32 1>)
549   ret i32 %x
552 define i32 @umax_0() {
553 ; CHECK-LABEL: @umax_0(
554 ; CHECK-NEXT:    ret i32 0
556   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> zeroinitializer)
557   ret i32 %x
560 define i32 @umax_1() {
561 ; CHECK-LABEL: @umax_1(
562 ; CHECK-NEXT:    ret i32 1
564   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>)
565   ret i32 %x
568 define i32 @umax_inc() {
569 ; CHECK-LABEL: @umax_inc(
570 ; CHECK-NEXT:    ret i32 -3
572   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 -3, i32 5, i32 7, i32 2, i32 4, i32 -6, i32 8>)
573   ret i32 %x
576 define i32 @umax_1v() {
577 ; CHECK-LABEL: @umax_1v(
578 ; CHECK-NEXT:    ret i32 10
580   %x = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> <i32 10>)
581   ret i32 %x
584 define i32 @umax_undef() {
585 ; CHECK-LABEL: @umax_undef(
586 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
587 ; CHECK-NEXT:    ret i32 [[X]]
589   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
590   ret i32 %x
593 define i32 @umax_undef1() {
594 ; CHECK-LABEL: @umax_undef1(
595 ; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
596 ; CHECK-NEXT:    ret i32 [[X]]
598   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 undef, i32 1, i32 1, i32 1, i32 1, i32 1>)
599   ret i32 %x
602 define i32 @umax_poison() {
603 ; CHECK-LABEL: @umax_poison(
604 ; CHECK-NEXT:    ret i32 poison
606   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> poison)
607   ret i32 %x
610 define i32 @umax_poison1() {
611 ; CHECK-LABEL: @umax_poison1(
612 ; CHECK-NEXT:    ret i32 poison
614   %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> <i32 1, i32 1, i32 poison, i32 1, i32 1, i32 poison, i32 1, i32 1>)
615   ret i32 %x