1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instsimplify -S | FileCheck %s
3
4declare i32 @llvm.vector.reduce.add.v1i32(<1 x i32> %a)
5declare i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %a)
6declare i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> %a)
7declare i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> %a)
8declare i32 @llvm.vector.reduce.and.v1i32(<1 x i32> %a)
9declare i32 @llvm.vector.reduce.and.v8i32(<8 x i32> %a)
10declare i32 @llvm.vector.reduce.or.v1i32(<1 x i32> %a)
11declare i32 @llvm.vector.reduce.or.v8i32(<8 x i32> %a)
12declare i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> %a)
13declare i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> %a)
14declare i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> %a)
15declare i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> %a)
16declare i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> %a)
17declare i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> %a)
18declare i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> %a)
19declare i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %a)
20declare i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> %a)
21declare i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> %a)
22
23
24define i32 @add_0() {
25; CHECK-LABEL: @add_0(
26; CHECK-NEXT:    ret i32 0
27;
28  %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> zeroinitializer)
29  ret i32 %x
30}
31
32define i32 @add_1() {
33; CHECK-LABEL: @add_1(
34; CHECK-NEXT:    ret i32 8
35;
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
38}
39
40define i32 @add_inc() {
41; CHECK-LABEL: @add_inc(
42; CHECK-NEXT:    ret i32 18
43;
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
46}
47
48define i32 @add_1v() {
49; CHECK-LABEL: @add_1v(
50; CHECK-NEXT:    ret i32 10
51;
52  %x = call i32 @llvm.vector.reduce.add.v1i32(<1 x i32> <i32 10>)
53  ret i32 %x
54}
55
56define 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]]
60;
61  %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> undef)
62  ret i32 %x
63}
64
65define 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]]
69;
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
72}
73
74define i32 @add_poison() {
75; CHECK-LABEL: @add_poison(
76; CHECK-NEXT:    ret i32 poison
77;
78  %x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> poison)
79  ret i32 %x
80}
81
82
83
84define i32 @mul_0() {
85; CHECK-LABEL: @mul_0(
86; CHECK-NEXT:    ret i32 0
87;
88  %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> zeroinitializer)
89  ret i32 %x
90}
91
92define i32 @mul_1() {
93; CHECK-LABEL: @mul_1(
94; CHECK-NEXT:    ret i32 1
95;
96  %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>)
97  ret i32 %x
98}
99
100define i32 @mul_inc() {
101; CHECK-LABEL: @mul_inc(
102; CHECK-NEXT:    ret i32 40320
103;
104  %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>)
105  ret i32 %x
106}
107
108define i32 @mul_1v() {
109; CHECK-LABEL: @mul_1v(
110; CHECK-NEXT:    ret i32 10
111;
112  %x = call i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> <i32 10>)
113  ret i32 %x
114}
115
116define i32 @mul_undef() {
117; CHECK-LABEL: @mul_undef(
118; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef)
119; CHECK-NEXT:    ret i32 [[X]]
120;
121  %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef)
122  ret i32 %x
123}
124
125define i32 @mul_undef1() {
126; CHECK-LABEL: @mul_undef1(
127; 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>)
128; CHECK-NEXT:    ret i32 [[X]]
129;
130  %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>)
131  ret i32 %x
132}
133
134define i32 @mul_poison() {
135; CHECK-LABEL: @mul_poison(
136; CHECK-NEXT:    ret i32 poison
137;
138  %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> poison)
139  ret i32 %x
140}
141
142
143define i32 @and_0() {
144; CHECK-LABEL: @and_0(
145; CHECK-NEXT:    ret i32 0
146;
147  %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> zeroinitializer)
148  ret i32 %x
149}
150
151define i32 @and_1() {
152; CHECK-LABEL: @and_1(
153; CHECK-NEXT:    ret i32 1
154;
155  %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>)
156  ret i32 %x
157}
158
159define i32 @and_inc() {
160; CHECK-LABEL: @and_inc(
161; CHECK-NEXT:    ret i32 0
162;
163  %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>)
164  ret i32 %x
165}
166
167define i32 @and_1v() {
168; CHECK-LABEL: @and_1v(
169; CHECK-NEXT:    ret i32 10
170;
171  %x = call i32 @llvm.vector.reduce.and.v1i32(<1 x i32> <i32 10>)
172  ret i32 %x
173}
174
175define i32 @and_undef() {
176; CHECK-LABEL: @and_undef(
177; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef)
178; CHECK-NEXT:    ret i32 [[X]]
179;
180  %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef)
181  ret i32 %x
182}
183
184define i32 @and_undef1() {
185; CHECK-LABEL: @and_undef1(
186; 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>)
187; CHECK-NEXT:    ret i32 [[X]]
188;
189  %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>)
190  ret i32 %x
191}
192
193define i32 @and_poison() {
194; CHECK-LABEL: @and_poison(
195; CHECK-NEXT:    ret i32 poison
196;
197  %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> poison)
198  ret i32 %x
199}
200
201
202define i32 @or_0() {
203; CHECK-LABEL: @or_0(
204; CHECK-NEXT:    ret i32 0
205;
206  %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> zeroinitializer)
207  ret i32 %x
208}
209
210define i32 @or_1() {
211; CHECK-LABEL: @or_1(
212; CHECK-NEXT:    ret i32 1
213;
214  %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>)
215  ret i32 %x
216}
217
218define i32 @or_inc() {
219; CHECK-LABEL: @or_inc(
220; CHECK-NEXT:    ret i32 -1
221;
222  %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>)
223  ret i32 %x
224}
225
226define i32 @or_1v() {
227; CHECK-LABEL: @or_1v(
228; CHECK-NEXT:    ret i32 10
229;
230  %x = call i32 @llvm.vector.reduce.or.v1i32(<1 x i32> <i32 10>)
231  ret i32 %x
232}
233
234define i32 @or_undef() {
235; CHECK-LABEL: @or_undef(
236; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef)
237; CHECK-NEXT:    ret i32 [[X]]
238;
239  %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef)
240  ret i32 %x
241}
242
243define i32 @or_undef1() {
244; CHECK-LABEL: @or_undef1(
245; 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>)
246; CHECK-NEXT:    ret i32 [[X]]
247;
248  %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>)
249  ret i32 %x
250}
251
252define i32 @or_poison() {
253; CHECK-LABEL: @or_poison(
254; CHECK-NEXT:    ret i32 poison
255;
256  %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> poison)
257  ret i32 %x
258}
259
260
261define i32 @xor_0() {
262; CHECK-LABEL: @xor_0(
263; CHECK-NEXT:    ret i32 0
264;
265  %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> zeroinitializer)
266  ret i32 %x
267}
268
269define i32 @xor_1() {
270; CHECK-LABEL: @xor_1(
271; CHECK-NEXT:    ret i32 0
272;
273  %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>)
274  ret i32 %x
275}
276
277define i32 @xor_inc() {
278; CHECK-LABEL: @xor_inc(
279; CHECK-NEXT:    ret i32 10
280;
281  %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>)
282  ret i32 %x
283}
284
285define i32 @xor_1v() {
286; CHECK-LABEL: @xor_1v(
287; CHECK-NEXT:    ret i32 10
288;
289  %x = call i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> <i32 10>)
290  ret i32 %x
291}
292
293define i32 @xor_undef() {
294; CHECK-LABEL: @xor_undef(
295; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef)
296; CHECK-NEXT:    ret i32 [[X]]
297;
298  %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef)
299  ret i32 %x
300}
301
302define i32 @xor_undef1() {
303; CHECK-LABEL: @xor_undef1(
304; 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>)
305; CHECK-NEXT:    ret i32 [[X]]
306;
307  %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>)
308  ret i32 %x
309}
310
311define i32 @xor_poison() {
312; CHECK-LABEL: @xor_poison(
313; CHECK-NEXT:    ret i32 poison
314;
315  %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> poison)
316  ret i32 %x
317}
318
319
320define i32 @smin_0() {
321; CHECK-LABEL: @smin_0(
322; CHECK-NEXT:    ret i32 0
323;
324  %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> zeroinitializer)
325  ret i32 %x
326}
327
328define i32 @smin_1() {
329; CHECK-LABEL: @smin_1(
330; CHECK-NEXT:    ret i32 1
331;
332  %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>)
333  ret i32 %x
334}
335
336define i32 @smin_inc() {
337; CHECK-LABEL: @smin_inc(
338; CHECK-NEXT:    ret i32 -6
339;
340  %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>)
341  ret i32 %x
342}
343
344define i32 @smin_1v() {
345; CHECK-LABEL: @smin_1v(
346; CHECK-NEXT:    ret i32 10
347;
348  %x = call i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> <i32 10>)
349  ret i32 %x
350}
351
352define i32 @smin_undef() {
353; CHECK-LABEL: @smin_undef(
354; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef)
355; CHECK-NEXT:    ret i32 [[X]]
356;
357  %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef)
358  ret i32 %x
359}
360
361define i32 @smin_undef1() {
362; CHECK-LABEL: @smin_undef1(
363; 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>)
364; CHECK-NEXT:    ret i32 [[X]]
365;
366  %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>)
367  ret i32 %x
368}
369
370define i32 @smin_poison() {
371; CHECK-LABEL: @smin_poison(
372; CHECK-NEXT:    ret i32 poison
373;
374  %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> poison)
375  ret i32 %x
376}
377
378
379define i32 @smax_0() {
380; CHECK-LABEL: @smax_0(
381; CHECK-NEXT:    ret i32 0
382;
383  %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> zeroinitializer)
384  ret i32 %x
385}
386
387define i32 @smax_1() {
388; CHECK-LABEL: @smax_1(
389; CHECK-NEXT:    ret i32 1
390;
391  %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>)
392  ret i32 %x
393}
394
395define i32 @smax_inc() {
396; CHECK-LABEL: @smax_inc(
397; CHECK-NEXT:    ret i32 8
398;
399  %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>)
400  ret i32 %x
401}
402
403define i32 @smax_1v() {
404; CHECK-LABEL: @smax_1v(
405; CHECK-NEXT:    ret i32 10
406;
407  %x = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> <i32 10>)
408  ret i32 %x
409}
410
411define i32 @smax_undef() {
412; CHECK-LABEL: @smax_undef(
413; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
414; CHECK-NEXT:    ret i32 [[X]]
415;
416  %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
417  ret i32 %x
418}
419
420define i32 @smax_undef1() {
421; CHECK-LABEL: @smax_undef1(
422; 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>)
423; CHECK-NEXT:    ret i32 [[X]]
424;
425  %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>)
426  ret i32 %x
427}
428
429define i32 @smax_poison() {
430; CHECK-LABEL: @smax_poison(
431; CHECK-NEXT:    ret i32 poison
432;
433  %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> poison)
434  ret i32 %x
435}
436
437
438define i32 @umin_0() {
439; CHECK-LABEL: @umin_0(
440; CHECK-NEXT:    ret i32 0
441;
442  %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> zeroinitializer)
443  ret i32 %x
444}
445
446define i32 @umin_1() {
447; CHECK-LABEL: @umin_1(
448; CHECK-NEXT:    ret i32 1
449;
450  %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>)
451  ret i32 %x
452}
453
454define i32 @umin_inc() {
455; CHECK-LABEL: @umin_inc(
456; CHECK-NEXT:    ret i32 1
457;
458  %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>)
459  ret i32 %x
460}
461
462define i32 @umin_1v() {
463; CHECK-LABEL: @umin_1v(
464; CHECK-NEXT:    ret i32 10
465;
466  %x = call i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> <i32 10>)
467  ret i32 %x
468}
469
470define i32 @umin_undef() {
471; CHECK-LABEL: @umin_undef(
472; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef)
473; CHECK-NEXT:    ret i32 [[X]]
474;
475  %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef)
476  ret i32 %x
477}
478
479define i32 @umin_undef1() {
480; CHECK-LABEL: @umin_undef1(
481; 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>)
482; CHECK-NEXT:    ret i32 [[X]]
483;
484  %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>)
485  ret i32 %x
486}
487
488define i32 @umin_poison() {
489; CHECK-LABEL: @umin_poison(
490; CHECK-NEXT:    ret i32 poison
491;
492  %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> poison)
493  ret i32 %x
494}
495
496
497define i32 @umax_0() {
498; CHECK-LABEL: @umax_0(
499; CHECK-NEXT:    ret i32 0
500;
501  %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> zeroinitializer)
502  ret i32 %x
503}
504
505define i32 @umax_1() {
506; CHECK-LABEL: @umax_1(
507; CHECK-NEXT:    ret i32 1
508;
509  %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>)
510  ret i32 %x
511}
512
513define i32 @umax_inc() {
514; CHECK-LABEL: @umax_inc(
515; CHECK-NEXT:    ret i32 -3
516;
517  %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>)
518  ret i32 %x
519}
520
521define i32 @umax_1v() {
522; CHECK-LABEL: @umax_1v(
523; CHECK-NEXT:    ret i32 10
524;
525  %x = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> <i32 10>)
526  ret i32 %x
527}
528
529define i32 @umax_undef() {
530; CHECK-LABEL: @umax_undef(
531; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
532; CHECK-NEXT:    ret i32 [[X]]
533;
534  %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
535  ret i32 %x
536}
537
538define i32 @umax_undef1d() {
539; CHECK-LABEL: @umax_undef1d(
540; 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>)
541; CHECK-NEXT:    ret i32 [[X]]
542;
543  %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>)
544  ret i32 %x
545}
546
547define i32 @umax_poison() {
548; CHECK-LABEL: @umax_poison(
549; CHECK-NEXT:    ret i32 poison
550;
551  %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> poison)
552  ret i32 %x
553}
554