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)
25 ; CHECK-LABEL: @add_0(
26 ; CHECK-NEXT: ret i32 0
28 %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> zeroinitializer)
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>)
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>)
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>)
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)
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>)
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)
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>)
91 ; CHECK-LABEL: @mul_0(
92 ; CHECK-NEXT: ret i32 0
94 %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> zeroinitializer)
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>)
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>)
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>)
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)
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>)
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)
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>)
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)
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>)
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>)
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>)
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)
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>)
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)
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>)
223 ; CHECK-LABEL: @or_0(
224 ; CHECK-NEXT: ret i32 0
226 %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> zeroinitializer)
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>)
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>)
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>)
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)
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>)
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)
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>)
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)
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>)
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>)
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>)
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)
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>)
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)
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>)
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)
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>)
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>)
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>)
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)
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>)
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)
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>)
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)
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>)
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>)
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>)
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)
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>)
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)
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>)
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)
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>)
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>)
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>)
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)
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>)
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)
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>)
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)
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>)
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>)
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>)
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)
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>)
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)
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>)