blob: 3fcbfec2f63add321353d542084bfae86dc76bbc [file] [log] [blame]
Sanjay Patel69632442016-03-25 20:12:25 +00001; NOTE: Assertions have been autogenerated by update_test_checks.py
Duncan Sands0a9c1242011-05-03 19:53:10 +00002; RUN: opt < %s -instsimplify -S | FileCheck %s
3
4define i1 @max1(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +00005; CHECK-LABEL: @max1(
Sanjay Patel69632442016-03-25 20:12:25 +00006; CHECK: ret i1 false
7;
Duncan Sands0a9c1242011-05-03 19:53:10 +00008 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000012}
13
14define i1 @max2(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000015; CHECK-LABEL: @max2(
Sanjay Patel69632442016-03-25 20:12:25 +000016; CHECK: ret i1 true
17;
Duncan Sands0a9c1242011-05-03 19:53:10 +000018 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000022}
23
24define i1 @max3(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000025; CHECK-LABEL: @max3(
Sanjay Patel69632442016-03-25 20:12:25 +000026; CHECK: ret i1 false
27;
Duncan Sands0a9c1242011-05-03 19:53:10 +000028 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000032}
33
34define i1 @max4(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000035; CHECK-LABEL: @max4(
Sanjay Patel69632442016-03-25 20:12:25 +000036; CHECK: ret i1 true
37;
Duncan Sands0a9c1242011-05-03 19:53:10 +000038 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000042}
43
44define i1 @max5(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000045; CHECK-LABEL: @max5(
Sanjay Patel69632442016-03-25 20:12:25 +000046; CHECK: ret i1 false
47;
Duncan Sands0a9c1242011-05-03 19:53:10 +000048 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000052}
53
54define i1 @max6(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000055; CHECK-LABEL: @max6(
Sanjay Patel69632442016-03-25 20:12:25 +000056; CHECK: ret i1 true
57;
Duncan Sands0a9c1242011-05-03 19:53:10 +000058 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000062}
63
64define i1 @max7(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000065; CHECK-LABEL: @max7(
Sanjay Patel69632442016-03-25 20:12:25 +000066; CHECK: ret i1 false
67;
Duncan Sands0a9c1242011-05-03 19:53:10 +000068 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000072}
73
74define i1 @max8(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000075; CHECK-LABEL: @max8(
Sanjay Patel69632442016-03-25 20:12:25 +000076; CHECK: ret i1 true
77;
Duncan Sands0a9c1242011-05-03 19:53:10 +000078 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000082}
83
84define i1 @min1(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000085; CHECK-LABEL: @min1(
Sanjay Patel69632442016-03-25 20:12:25 +000086; CHECK: ret i1 false
87;
Duncan Sands0a9c1242011-05-03 19:53:10 +000088 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +000092}
93
94define i1 @min2(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000095; CHECK-LABEL: @min2(
Sanjay Patel69632442016-03-25 20:12:25 +000096; CHECK: ret i1 true
97;
Duncan Sands0a9c1242011-05-03 19:53:10 +000098 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000102}
103
104define i1 @min3(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000105; CHECK-LABEL: @min3(
Sanjay Patel69632442016-03-25 20:12:25 +0000106; CHECK: ret i1 false
107;
Duncan Sands0a9c1242011-05-03 19:53:10 +0000108 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000112}
113
114define i1 @min4(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000115; CHECK-LABEL: @min4(
Sanjay Patel69632442016-03-25 20:12:25 +0000116; CHECK: ret i1 true
117;
Duncan Sands0a9c1242011-05-03 19:53:10 +0000118 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000122}
123
124define i1 @min5(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000125; CHECK-LABEL: @min5(
Sanjay Patel69632442016-03-25 20:12:25 +0000126; CHECK: ret i1 false
127;
Duncan Sands0a9c1242011-05-03 19:53:10 +0000128 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000132}
133
134define i1 @min6(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000135; CHECK-LABEL: @min6(
Sanjay Patel69632442016-03-25 20:12:25 +0000136; CHECK: ret i1 true
137;
Duncan Sands0a9c1242011-05-03 19:53:10 +0000138 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000142}
143
144define i1 @min7(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000145; CHECK-LABEL: @min7(
Sanjay Patel69632442016-03-25 20:12:25 +0000146; CHECK: ret i1 false
147;
Duncan Sands0a9c1242011-05-03 19:53:10 +0000148 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000152}
153
154define i1 @min8(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000155; CHECK-LABEL: @min8(
Sanjay Patel69632442016-03-25 20:12:25 +0000156; CHECK: ret i1 true
157;
Duncan Sands0a9c1242011-05-03 19:53:10 +0000158 %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
Duncan Sands0a9c1242011-05-03 19:53:10 +0000162}
Duncan Sandsa2287852011-05-04 16:05:05 +0000163
164define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000165; CHECK-LABEL: @maxmin1(
Sanjay Patel69632442016-03-25 20:12:25 +0000166; CHECK: ret i1 true
167;
Duncan Sandsa2287852011-05-04 16:05:05 +0000168 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000174}
175
176define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000177; CHECK-LABEL: @maxmin2(
Sanjay Patel69632442016-03-25 20:12:25 +0000178; CHECK: ret i1 false
179;
Duncan Sandsa2287852011-05-04 16:05:05 +0000180 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000186}
187
188define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000189; CHECK-LABEL: @maxmin3(
Sanjay Patel69632442016-03-25 20:12:25 +0000190; CHECK: ret i1 true
191;
Duncan Sandsa2287852011-05-04 16:05:05 +0000192 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000198}
199
200define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000201; CHECK-LABEL: @maxmin4(
Sanjay Patel69632442016-03-25 20:12:25 +0000202; CHECK: ret i1 false
203;
Duncan Sandsa2287852011-05-04 16:05:05 +0000204 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000210}
211
212define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000213; CHECK-LABEL: @maxmin5(
Sanjay Patel69632442016-03-25 20:12:25 +0000214; CHECK: ret i1 true
215;
Duncan Sandsa2287852011-05-04 16:05:05 +0000216 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000222}
223
224define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000225; CHECK-LABEL: @maxmin6(
Sanjay Patel69632442016-03-25 20:12:25 +0000226; CHECK: ret i1 false
227;
Duncan Sandsa2287852011-05-04 16:05:05 +0000228 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000234}
235
236define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000237; CHECK-LABEL: @maxmin7(
Sanjay Patel69632442016-03-25 20:12:25 +0000238; CHECK: ret i1 true
239;
Duncan Sandsa2287852011-05-04 16:05:05 +0000240 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000246}
247
248define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000249; CHECK-LABEL: @maxmin8(
Sanjay Patel69632442016-03-25 20:12:25 +0000250; CHECK: ret i1 false
251;
Duncan Sandsa2287852011-05-04 16:05:05 +0000252 %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
Duncan Sandsa2287852011-05-04 16:05:05 +0000258}
Duncan Sandsaf327282011-05-07 16:56:49 +0000259
260define i1 @eqcmp1(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000261; CHECK-LABEL: @eqcmp1(
Sanjay Patel69632442016-03-25 20:12:25 +0000262; CHECK: [[C:%.*]] = icmp sge i32 %x, %y
263; CHECK-NEXT: ret i1 [[C]]
264;
Duncan Sandsaf327282011-05-07 16:56:49 +0000265 %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
Duncan Sandsaf327282011-05-07 16:56:49 +0000269}
270
271define i1 @eqcmp2(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000272; CHECK-LABEL: @eqcmp2(
Sanjay Patel69632442016-03-25 20:12:25 +0000273; CHECK: [[C:%.*]] = icmp sge i32 %x, %y
274; CHECK-NEXT: ret i1 [[C]]
275;
Duncan Sandsaf327282011-05-07 16:56:49 +0000276 %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
Duncan Sandsaf327282011-05-07 16:56:49 +0000280}
281
282define i1 @eqcmp3(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000283; CHECK-LABEL: @eqcmp3(
Sanjay Patel69632442016-03-25 20:12:25 +0000284; CHECK: [[C:%.*]] = icmp uge i32 %x, %y
285; CHECK-NEXT: ret i1 [[C]]
286;
Duncan Sandsaf327282011-05-07 16:56:49 +0000287 %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
Duncan Sandsaf327282011-05-07 16:56:49 +0000291}
292
293define i1 @eqcmp4(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000294; CHECK-LABEL: @eqcmp4(
Sanjay Patel69632442016-03-25 20:12:25 +0000295; CHECK: [[C:%.*]] = icmp uge i32 %x, %y
296; CHECK-NEXT: ret i1 [[C]]
297;
Duncan Sandsaf327282011-05-07 16:56:49 +0000298 %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
Duncan Sandsaf327282011-05-07 16:56:49 +0000302}