1; NOTE: Assertions have been autogenerated by update_test_checks.py
2; RUN: opt < %s -instsimplify -S | FileCheck %s
3
4define i1 @max1(i32 %x, i32 %y) {
5; CHECK-LABEL: @max1(
6; CHECK:         ret i1 false
7;
8  %c = icmp sgt i32 %x, %y
9  %m = select i1 %c, i32 %x, i32 %y
10  %r = icmp slt i32 %m, %x
11  ret i1 %r
12}
13
14define i1 @max2(i32 %x, i32 %y) {
15; CHECK-LABEL: @max2(
16; CHECK:         ret i1 true
17;
18  %c = icmp sge i32 %x, %y
19  %m = select i1 %c, i32 %x, i32 %y
20  %r = icmp sge i32 %m, %x
21  ret i1 %r
22}
23
24define i1 @max3(i32 %x, i32 %y) {
25; CHECK-LABEL: @max3(
26; CHECK:         ret i1 false
27;
28  %c = icmp ugt i32 %x, %y
29  %m = select i1 %c, i32 %x, i32 %y
30  %r = icmp ult i32 %m, %x
31  ret i1 %r
32}
33
34define i1 @max4(i32 %x, i32 %y) {
35; CHECK-LABEL: @max4(
36; CHECK:         ret i1 true
37;
38  %c = icmp uge i32 %x, %y
39  %m = select i1 %c, i32 %x, i32 %y
40  %r = icmp uge i32 %m, %x
41  ret i1 %r
42}
43
44define i1 @max5(i32 %x, i32 %y) {
45; CHECK-LABEL: @max5(
46; CHECK:         ret i1 false
47;
48  %c = icmp sgt i32 %x, %y
49  %m = select i1 %c, i32 %x, i32 %y
50  %r = icmp sgt i32 %x, %m
51  ret i1 %r
52}
53
54define i1 @max6(i32 %x, i32 %y) {
55; CHECK-LABEL: @max6(
56; CHECK:         ret i1 true
57;
58  %c = icmp sge i32 %x, %y
59  %m = select i1 %c, i32 %x, i32 %y
60  %r = icmp sle i32 %x, %m
61  ret i1 %r
62}
63
64define i1 @max7(i32 %x, i32 %y) {
65; CHECK-LABEL: @max7(
66; CHECK:         ret i1 false
67;
68  %c = icmp ugt i32 %x, %y
69  %m = select i1 %c, i32 %x, i32 %y
70  %r = icmp ugt i32 %x, %m
71  ret i1 %r
72}
73
74define i1 @max8(i32 %x, i32 %y) {
75; CHECK-LABEL: @max8(
76; CHECK:         ret i1 true
77;
78  %c = icmp uge i32 %x, %y
79  %m = select i1 %c, i32 %x, i32 %y
80  %r = icmp ule i32 %x, %m
81  ret i1 %r
82}
83
84define i1 @min1(i32 %x, i32 %y) {
85; CHECK-LABEL: @min1(
86; CHECK:         ret i1 false
87;
88  %c = icmp sgt i32 %x, %y
89  %m = select i1 %c, i32 %y, i32 %x
90  %r = icmp sgt i32 %m, %x
91  ret i1 %r
92}
93
94define i1 @min2(i32 %x, i32 %y) {
95; CHECK-LABEL: @min2(
96; CHECK:         ret i1 true
97;
98  %c = icmp sge i32 %x, %y
99  %m = select i1 %c, i32 %y, i32 %x
100  %r = icmp sle i32 %m, %x
101  ret i1 %r
102}
103
104define i1 @min3(i32 %x, i32 %y) {
105; CHECK-LABEL: @min3(
106; CHECK:         ret i1 false
107;
108  %c = icmp ugt i32 %x, %y
109  %m = select i1 %c, i32 %y, i32 %x
110  %r = icmp ugt i32 %m, %x
111  ret i1 %r
112}
113
114define i1 @min4(i32 %x, i32 %y) {
115; CHECK-LABEL: @min4(
116; CHECK:         ret i1 true
117;
118  %c = icmp uge i32 %x, %y
119  %m = select i1 %c, i32 %y, i32 %x
120  %r = icmp ule i32 %m, %x
121  ret i1 %r
122}
123
124define i1 @min5(i32 %x, i32 %y) {
125; CHECK-LABEL: @min5(
126; CHECK:         ret i1 false
127;
128  %c = icmp sgt i32 %x, %y
129  %m = select i1 %c, i32 %y, i32 %x
130  %r = icmp slt i32 %x, %m
131  ret i1 %r
132}
133
134define i1 @min6(i32 %x, i32 %y) {
135; CHECK-LABEL: @min6(
136; CHECK:         ret i1 true
137;
138  %c = icmp sge i32 %x, %y
139  %m = select i1 %c, i32 %y, i32 %x
140  %r = icmp sge i32 %x, %m
141  ret i1 %r
142}
143
144define i1 @min7(i32 %x, i32 %y) {
145; CHECK-LABEL: @min7(
146; CHECK:         ret i1 false
147;
148  %c = icmp ugt i32 %x, %y
149  %m = select i1 %c, i32 %y, i32 %x
150  %r = icmp ult i32 %x, %m
151  ret i1 %r
152}
153
154define i1 @min8(i32 %x, i32 %y) {
155; CHECK-LABEL: @min8(
156; CHECK:         ret i1 true
157;
158  %c = icmp uge i32 %x, %y
159  %m = select i1 %c, i32 %y, i32 %x
160  %r = icmp uge i32 %x, %m
161  ret i1 %r
162}
163
164define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
165; CHECK-LABEL: @maxmin1(
166; CHECK:         ret i1 true
167;
168  %c1 = icmp sge i32 %x, %y
169  %max = select i1 %c1, i32 %x, i32 %y
170  %c2 = icmp sge i32 %x, %z
171  %min = select i1 %c2, i32 %z, i32 %x
172  %c = icmp sge i32 %max, %min
173  ret i1 %c
174}
175
176define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
177; CHECK-LABEL: @maxmin2(
178; CHECK:         ret i1 false
179;
180  %c1 = icmp sge i32 %x, %y
181  %max = select i1 %c1, i32 %x, i32 %y
182  %c2 = icmp sge i32 %x, %z
183  %min = select i1 %c2, i32 %z, i32 %x
184  %c = icmp sgt i32 %min, %max
185  ret i1 %c
186}
187
188define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
189; CHECK-LABEL: @maxmin3(
190; CHECK:         ret i1 true
191;
192  %c1 = icmp sge i32 %x, %y
193  %max = select i1 %c1, i32 %x, i32 %y
194  %c2 = icmp sge i32 %x, %z
195  %min = select i1 %c2, i32 %z, i32 %x
196  %c = icmp sle i32 %min, %max
197  ret i1 %c
198}
199
200define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
201; CHECK-LABEL: @maxmin4(
202; CHECK:         ret i1 false
203;
204  %c1 = icmp sge i32 %x, %y
205  %max = select i1 %c1, i32 %x, i32 %y
206  %c2 = icmp sge i32 %x, %z
207  %min = select i1 %c2, i32 %z, i32 %x
208  %c = icmp slt i32 %max, %min
209  ret i1 %c
210}
211
212define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
213; CHECK-LABEL: @maxmin5(
214; CHECK:         ret i1 true
215;
216  %c1 = icmp uge i32 %x, %y
217  %max = select i1 %c1, i32 %x, i32 %y
218  %c2 = icmp uge i32 %x, %z
219  %min = select i1 %c2, i32 %z, i32 %x
220  %c = icmp uge i32 %max, %min
221  ret i1 %c
222}
223
224define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
225; CHECK-LABEL: @maxmin6(
226; CHECK:         ret i1 false
227;
228  %c1 = icmp uge i32 %x, %y
229  %max = select i1 %c1, i32 %x, i32 %y
230  %c2 = icmp uge i32 %x, %z
231  %min = select i1 %c2, i32 %z, i32 %x
232  %c = icmp ugt i32 %min, %max
233  ret i1 %c
234}
235
236define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
237; CHECK-LABEL: @maxmin7(
238; CHECK:         ret i1 true
239;
240  %c1 = icmp uge i32 %x, %y
241  %max = select i1 %c1, i32 %x, i32 %y
242  %c2 = icmp uge i32 %x, %z
243  %min = select i1 %c2, i32 %z, i32 %x
244  %c = icmp ule i32 %min, %max
245  ret i1 %c
246}
247
248define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
249; CHECK-LABEL: @maxmin8(
250; CHECK:         ret i1 false
251;
252  %c1 = icmp uge i32 %x, %y
253  %max = select i1 %c1, i32 %x, i32 %y
254  %c2 = icmp uge i32 %x, %z
255  %min = select i1 %c2, i32 %z, i32 %x
256  %c = icmp ult i32 %max, %min
257  ret i1 %c
258}
259
260define i1 @eqcmp1(i32 %x, i32 %y) {
261; CHECK-LABEL: @eqcmp1(
262; CHECK:         [[C:%.*]] = icmp sge i32 %x, %y
263; CHECK-NEXT:    ret i1 [[C]]
264;
265  %c = icmp sge i32 %x, %y
266  %max = select i1 %c, i32 %x, i32 %y
267  %r = icmp eq i32 %max, %x
268  ret i1 %r
269}
270
271define i1 @eqcmp2(i32 %x, i32 %y) {
272; CHECK-LABEL: @eqcmp2(
273; CHECK:         [[C:%.*]] = icmp sge i32 %x, %y
274; CHECK-NEXT:    ret i1 [[C]]
275;
276  %c = icmp sge i32 %x, %y
277  %max = select i1 %c, i32 %x, i32 %y
278  %r = icmp eq i32 %x, %max
279  ret i1 %r
280}
281
282define i1 @eqcmp3(i32 %x, i32 %y) {
283; CHECK-LABEL: @eqcmp3(
284; CHECK:         [[C:%.*]] = icmp uge i32 %x, %y
285; CHECK-NEXT:    ret i1 [[C]]
286;
287  %c = icmp uge i32 %x, %y
288  %max = select i1 %c, i32 %x, i32 %y
289  %r = icmp eq i32 %max, %x
290  ret i1 %r
291}
292
293define i1 @eqcmp4(i32 %x, i32 %y) {
294; CHECK-LABEL: @eqcmp4(
295; CHECK:         [[C:%.*]] = icmp uge i32 %x, %y
296; CHECK-NEXT:    ret i1 [[C]]
297;
298  %c = icmp uge i32 %x, %y
299  %max = select i1 %c, i32 %x, i32 %y
300  %r = icmp eq i32 %x, %max
301  ret i1 %r
302}
303