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
82define i32 @add_poison1() {
83; CHECK-LABEL: @add_poison1(
84; CHECK-NEXT:    ret i32 poison
85;
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
88}
89
90define i32 @mul_0() {
91; CHECK-LABEL: @mul_0(
92; CHECK-NEXT:    ret i32 0
93;
94  %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> zeroinitializer)
95  ret i32 %x
96}
97
98define i32 @mul_1() {
99; CHECK-LABEL: @mul_1(
100; CHECK-NEXT:    ret i32 1
101;
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
104}
105
106define i32 @mul_inc() {
107; CHECK-LABEL: @mul_inc(
108; CHECK-NEXT:    ret i32 40320
109;
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
112}
113
114define i32 @mul_1v() {
115; CHECK-LABEL: @mul_1v(
116; CHECK-NEXT:    ret i32 10
117;
118  %x = call i32 @llvm.vector.reduce.mul.v1i32(<1 x i32> <i32 10>)
119  ret i32 %x
120}
121
122define 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]]
126;
127  %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> undef)
128  ret i32 %x
129}
130
131define 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]]
135;
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
138}
139
140define i32 @mul_poison() {
141; CHECK-LABEL: @mul_poison(
142; CHECK-NEXT:    ret i32 poison
143;
144  %x = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> poison)
145  ret i32 %x
146}
147
148define i32 @mul_poison1() {
149; CHECK-LABEL: @mul_poison1(
150; CHECK-NEXT:    ret i32 poison
151;
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
154}
155
156define i32 @and_0() {
157; CHECK-LABEL: @and_0(
158; CHECK-NEXT:    ret i32 0
159;
160  %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> zeroinitializer)
161  ret i32 %x
162}
163
164define i32 @and_1() {
165; CHECK-LABEL: @and_1(
166; CHECK-NEXT:    ret i32 1
167;
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
170}
171
172define i32 @and_inc() {
173; CHECK-LABEL: @and_inc(
174; CHECK-NEXT:    ret i32 0
175;
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
178}
179
180define i32 @and_1v() {
181; CHECK-LABEL: @and_1v(
182; CHECK-NEXT:    ret i32 10
183;
184  %x = call i32 @llvm.vector.reduce.and.v1i32(<1 x i32> <i32 10>)
185  ret i32 %x
186}
187
188define 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]]
192;
193  %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> undef)
194  ret i32 %x
195}
196
197define 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]]
201;
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
204}
205
206define i32 @and_poison() {
207; CHECK-LABEL: @and_poison(
208; CHECK-NEXT:    ret i32 poison
209;
210  %x = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> poison)
211  ret i32 %x
212}
213
214define i32 @and_poison1() {
215; CHECK-LABEL: @and_poison1(
216; CHECK-NEXT:    ret i32 poison
217;
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
220}
221
222define i32 @or_0() {
223; CHECK-LABEL: @or_0(
224; CHECK-NEXT:    ret i32 0
225;
226  %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> zeroinitializer)
227  ret i32 %x
228}
229
230define i32 @or_1() {
231; CHECK-LABEL: @or_1(
232; CHECK-NEXT:    ret i32 1
233;
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
236}
237
238define i32 @or_inc() {
239; CHECK-LABEL: @or_inc(
240; CHECK-NEXT:    ret i32 -1
241;
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
244}
245
246define i32 @or_1v() {
247; CHECK-LABEL: @or_1v(
248; CHECK-NEXT:    ret i32 10
249;
250  %x = call i32 @llvm.vector.reduce.or.v1i32(<1 x i32> <i32 10>)
251  ret i32 %x
252}
253
254define 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]]
258;
259  %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> undef)
260  ret i32 %x
261}
262
263define 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]]
267;
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
270}
271
272define i32 @or_poison() {
273; CHECK-LABEL: @or_poison(
274; CHECK-NEXT:    ret i32 poison
275;
276  %x = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> poison)
277  ret i32 %x
278}
279
280define i32 @or_poison1() {
281; CHECK-LABEL: @or_poison1(
282; CHECK-NEXT:    ret i32 poison
283;
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
286}
287
288define i32 @xor_0() {
289; CHECK-LABEL: @xor_0(
290; CHECK-NEXT:    ret i32 0
291;
292  %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> zeroinitializer)
293  ret i32 %x
294}
295
296define i32 @xor_1() {
297; CHECK-LABEL: @xor_1(
298; CHECK-NEXT:    ret i32 0
299;
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
302}
303
304define i32 @xor_inc() {
305; CHECK-LABEL: @xor_inc(
306; CHECK-NEXT:    ret i32 10
307;
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
310}
311
312define i32 @xor_1v() {
313; CHECK-LABEL: @xor_1v(
314; CHECK-NEXT:    ret i32 10
315;
316  %x = call i32 @llvm.vector.reduce.xor.v1i32(<1 x i32> <i32 10>)
317  ret i32 %x
318}
319
320define 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]]
324;
325  %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> undef)
326  ret i32 %x
327}
328
329define 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]]
333;
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
336}
337
338define i32 @xor_poison() {
339; CHECK-LABEL: @xor_poison(
340; CHECK-NEXT:    ret i32 poison
341;
342  %x = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> poison)
343  ret i32 %x
344}
345
346define i32 @xor_poison1() {
347; CHECK-LABEL: @xor_poison1(
348; CHECK-NEXT:    ret i32 poison
349;
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
352}
353
354define i32 @smin_0() {
355; CHECK-LABEL: @smin_0(
356; CHECK-NEXT:    ret i32 0
357;
358  %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> zeroinitializer)
359  ret i32 %x
360}
361
362define i32 @smin_1() {
363; CHECK-LABEL: @smin_1(
364; CHECK-NEXT:    ret i32 1
365;
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
368}
369
370define i32 @smin_inc() {
371; CHECK-LABEL: @smin_inc(
372; CHECK-NEXT:    ret i32 -6
373;
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
376}
377
378define i32 @smin_1v() {
379; CHECK-LABEL: @smin_1v(
380; CHECK-NEXT:    ret i32 10
381;
382  %x = call i32 @llvm.vector.reduce.smin.v1i32(<1 x i32> <i32 10>)
383  ret i32 %x
384}
385
386define 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]]
390;
391  %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> undef)
392  ret i32 %x
393}
394
395define 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]]
399;
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
402}
403
404define i32 @smin_poison() {
405; CHECK-LABEL: @smin_poison(
406; CHECK-NEXT:    ret i32 poison
407;
408  %x = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> poison)
409  ret i32 %x
410}
411
412define i32 @smin_poison1() {
413; CHECK-LABEL: @smin_poison1(
414; CHECK-NEXT:    ret i32 poison
415;
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
418}
419
420define i32 @smax_0() {
421; CHECK-LABEL: @smax_0(
422; CHECK-NEXT:    ret i32 0
423;
424  %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> zeroinitializer)
425  ret i32 %x
426}
427
428define i32 @smax_1() {
429; CHECK-LABEL: @smax_1(
430; CHECK-NEXT:    ret i32 1
431;
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
434}
435
436define i32 @smax_inc() {
437; CHECK-LABEL: @smax_inc(
438; CHECK-NEXT:    ret i32 8
439;
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
442}
443
444define i32 @smax_1v() {
445; CHECK-LABEL: @smax_1v(
446; CHECK-NEXT:    ret i32 10
447;
448  %x = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> <i32 10>)
449  ret i32 %x
450}
451
452define 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]]
456;
457  %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
458  ret i32 %x
459}
460
461define 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]]
465;
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
468}
469
470define i32 @smax_poison() {
471; CHECK-LABEL: @smax_poison(
472; CHECK-NEXT:    ret i32 poison
473;
474  %x = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> poison)
475  ret i32 %x
476}
477
478define i32 @smax_poison1() {
479; CHECK-LABEL: @smax_poison1(
480; CHECK-NEXT:    ret i32 poison
481;
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
484}
485
486define i32 @umin_0() {
487; CHECK-LABEL: @umin_0(
488; CHECK-NEXT:    ret i32 0
489;
490  %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> zeroinitializer)
491  ret i32 %x
492}
493
494define i32 @umin_1() {
495; CHECK-LABEL: @umin_1(
496; CHECK-NEXT:    ret i32 1
497;
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
500}
501
502define i32 @umin_inc() {
503; CHECK-LABEL: @umin_inc(
504; CHECK-NEXT:    ret i32 1
505;
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
508}
509
510define i32 @umin_1v() {
511; CHECK-LABEL: @umin_1v(
512; CHECK-NEXT:    ret i32 10
513;
514  %x = call i32 @llvm.vector.reduce.umin.v1i32(<1 x i32> <i32 10>)
515  ret i32 %x
516}
517
518define 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]]
522;
523  %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> undef)
524  ret i32 %x
525}
526
527define 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]]
531;
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
534}
535
536define i32 @umin_poison() {
537; CHECK-LABEL: @umin_poison(
538; CHECK-NEXT:    ret i32 poison
539;
540  %x = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> poison)
541  ret i32 %x
542}
543
544define i32 @umin_poison1() {
545; CHECK-LABEL: @umin_poison1(
546; CHECK-NEXT:    ret i32 poison
547;
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
550}
551
552define i32 @umax_0() {
553; CHECK-LABEL: @umax_0(
554; CHECK-NEXT:    ret i32 0
555;
556  %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> zeroinitializer)
557  ret i32 %x
558}
559
560define i32 @umax_1() {
561; CHECK-LABEL: @umax_1(
562; CHECK-NEXT:    ret i32 1
563;
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
566}
567
568define i32 @umax_inc() {
569; CHECK-LABEL: @umax_inc(
570; CHECK-NEXT:    ret i32 -3
571;
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
574}
575
576define i32 @umax_1v() {
577; CHECK-LABEL: @umax_1v(
578; CHECK-NEXT:    ret i32 10
579;
580  %x = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> <i32 10>)
581  ret i32 %x
582}
583
584define 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]]
588;
589  %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
590  ret i32 %x
591}
592
593define 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]]
597;
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
600}
601
602define i32 @umax_poison() {
603; CHECK-LABEL: @umax_poison(
604; CHECK-NEXT:    ret i32 poison
605;
606  %x = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> poison)
607  ret i32 %x
608}
609
610define i32 @umax_poison1() {
611; CHECK-LABEL: @umax_poison1(
612; CHECK-NEXT:    ret i32 poison
613;
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
616}
617