blob: 3c643ed3e03eacfd5ab96077de640702820020be [file] [log] [blame]
Duncan Sands0a9c1242011-05-03 19:53:10 +00001; RUN: opt < %s -instsimplify -S | FileCheck %s
2
3define i1 @max1(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +00004; CHECK-LABEL: @max1(
Duncan Sands0a9c1242011-05-03 19:53:10 +00005 %c = icmp sgt i32 %x, %y
6 %m = select i1 %c, i32 %x, i32 %y
7 %r = icmp slt i32 %m, %x
8 ret i1 %r
9; CHECK: ret i1 false
10}
11
12define i1 @max2(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000013; CHECK-LABEL: @max2(
Duncan Sands0a9c1242011-05-03 19:53:10 +000014 %c = icmp sge i32 %x, %y
15 %m = select i1 %c, i32 %x, i32 %y
16 %r = icmp sge i32 %m, %x
17 ret i1 %r
18; CHECK: ret i1 true
19}
20
21define i1 @max3(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000022; CHECK-LABEL: @max3(
Duncan Sands0a9c1242011-05-03 19:53:10 +000023 %c = icmp ugt i32 %x, %y
24 %m = select i1 %c, i32 %x, i32 %y
25 %r = icmp ult i32 %m, %x
26 ret i1 %r
27; CHECK: ret i1 false
28}
29
30define i1 @max4(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000031; CHECK-LABEL: @max4(
Duncan Sands0a9c1242011-05-03 19:53:10 +000032 %c = icmp uge i32 %x, %y
33 %m = select i1 %c, i32 %x, i32 %y
34 %r = icmp uge i32 %m, %x
35 ret i1 %r
36; CHECK: ret i1 true
37}
38
39define i1 @max5(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000040; CHECK-LABEL: @max5(
Duncan Sands0a9c1242011-05-03 19:53:10 +000041 %c = icmp sgt i32 %x, %y
42 %m = select i1 %c, i32 %x, i32 %y
43 %r = icmp sgt i32 %x, %m
44 ret i1 %r
45; CHECK: ret i1 false
46}
47
48define i1 @max6(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000049; CHECK-LABEL: @max6(
Duncan Sands0a9c1242011-05-03 19:53:10 +000050 %c = icmp sge i32 %x, %y
51 %m = select i1 %c, i32 %x, i32 %y
52 %r = icmp sle i32 %x, %m
53 ret i1 %r
54; CHECK: ret i1 true
55}
56
57define i1 @max7(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000058; CHECK-LABEL: @max7(
Duncan Sands0a9c1242011-05-03 19:53:10 +000059 %c = icmp ugt i32 %x, %y
60 %m = select i1 %c, i32 %x, i32 %y
61 %r = icmp ugt i32 %x, %m
62 ret i1 %r
63; CHECK: ret i1 false
64}
65
66define i1 @max8(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000067; CHECK-LABEL: @max8(
Duncan Sands0a9c1242011-05-03 19:53:10 +000068 %c = icmp uge i32 %x, %y
69 %m = select i1 %c, i32 %x, i32 %y
70 %r = icmp ule i32 %x, %m
71 ret i1 %r
72; CHECK: ret i1 true
73}
74
75define i1 @min1(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000076; CHECK-LABEL: @min1(
Duncan Sands0a9c1242011-05-03 19:53:10 +000077 %c = icmp sgt i32 %x, %y
78 %m = select i1 %c, i32 %y, i32 %x
79 %r = icmp sgt i32 %m, %x
80 ret i1 %r
81; CHECK: ret i1 false
82}
83
84define i1 @min2(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000085; CHECK-LABEL: @min2(
Duncan Sands0a9c1242011-05-03 19:53:10 +000086 %c = icmp sge i32 %x, %y
87 %m = select i1 %c, i32 %y, i32 %x
88 %r = icmp sle i32 %m, %x
89 ret i1 %r
90; CHECK: ret i1 true
91}
92
93define i1 @min3(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +000094; CHECK-LABEL: @min3(
Duncan Sands0a9c1242011-05-03 19:53:10 +000095 %c = icmp ugt i32 %x, %y
96 %m = select i1 %c, i32 %y, i32 %x
97 %r = icmp ugt i32 %m, %x
98 ret i1 %r
99; CHECK: ret i1 false
100}
101
102define i1 @min4(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000103; CHECK-LABEL: @min4(
Duncan Sands0a9c1242011-05-03 19:53:10 +0000104 %c = icmp uge i32 %x, %y
105 %m = select i1 %c, i32 %y, i32 %x
106 %r = icmp ule i32 %m, %x
107 ret i1 %r
108; CHECK: ret i1 true
109}
110
111define i1 @min5(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000112; CHECK-LABEL: @min5(
Duncan Sands0a9c1242011-05-03 19:53:10 +0000113 %c = icmp sgt i32 %x, %y
114 %m = select i1 %c, i32 %y, i32 %x
115 %r = icmp slt i32 %x, %m
116 ret i1 %r
117; CHECK: ret i1 false
118}
119
120define i1 @min6(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000121; CHECK-LABEL: @min6(
Duncan Sands0a9c1242011-05-03 19:53:10 +0000122 %c = icmp sge i32 %x, %y
123 %m = select i1 %c, i32 %y, i32 %x
124 %r = icmp sge i32 %x, %m
125 ret i1 %r
126; CHECK: ret i1 true
127}
128
129define i1 @min7(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000130; CHECK-LABEL: @min7(
Duncan Sands0a9c1242011-05-03 19:53:10 +0000131 %c = icmp ugt i32 %x, %y
132 %m = select i1 %c, i32 %y, i32 %x
133 %r = icmp ult i32 %x, %m
134 ret i1 %r
135; CHECK: ret i1 false
136}
137
138define i1 @min8(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000139; CHECK-LABEL: @min8(
Duncan Sands0a9c1242011-05-03 19:53:10 +0000140 %c = icmp uge i32 %x, %y
141 %m = select i1 %c, i32 %y, i32 %x
142 %r = icmp uge i32 %x, %m
143 ret i1 %r
144; CHECK: ret i1 true
145}
Duncan Sandsa2287852011-05-04 16:05:05 +0000146
147define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000148; CHECK-LABEL: @maxmin1(
Duncan Sandsa2287852011-05-04 16:05:05 +0000149 %c1 = icmp sge i32 %x, %y
150 %max = select i1 %c1, i32 %x, i32 %y
151 %c2 = icmp sge i32 %x, %z
152 %min = select i1 %c2, i32 %z, i32 %x
153 %c = icmp sge i32 %max, %min
154 ret i1 %c
155; CHECK: ret i1 true
156}
157
158define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000159; CHECK-LABEL: @maxmin2(
Duncan Sandsa2287852011-05-04 16:05:05 +0000160 %c1 = icmp sge i32 %x, %y
161 %max = select i1 %c1, i32 %x, i32 %y
162 %c2 = icmp sge i32 %x, %z
163 %min = select i1 %c2, i32 %z, i32 %x
164 %c = icmp sgt i32 %min, %max
165 ret i1 %c
166; CHECK: ret i1 false
167}
168
169define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000170; CHECK-LABEL: @maxmin3(
Duncan Sandsa2287852011-05-04 16:05:05 +0000171 %c1 = icmp sge i32 %x, %y
172 %max = select i1 %c1, i32 %x, i32 %y
173 %c2 = icmp sge i32 %x, %z
174 %min = select i1 %c2, i32 %z, i32 %x
175 %c = icmp sle i32 %min, %max
176 ret i1 %c
177; CHECK: ret i1 true
178}
179
180define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000181; CHECK-LABEL: @maxmin4(
Duncan Sandsa2287852011-05-04 16:05:05 +0000182 %c1 = icmp sge i32 %x, %y
183 %max = select i1 %c1, i32 %x, i32 %y
184 %c2 = icmp sge i32 %x, %z
185 %min = select i1 %c2, i32 %z, i32 %x
186 %c = icmp slt i32 %max, %min
187 ret i1 %c
188; CHECK: ret i1 false
189}
190
191define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000192; CHECK-LABEL: @maxmin5(
Duncan Sandsa2287852011-05-04 16:05:05 +0000193 %c1 = icmp uge i32 %x, %y
194 %max = select i1 %c1, i32 %x, i32 %y
195 %c2 = icmp uge i32 %x, %z
196 %min = select i1 %c2, i32 %z, i32 %x
197 %c = icmp uge i32 %max, %min
198 ret i1 %c
199; CHECK: ret i1 true
200}
201
202define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000203; CHECK-LABEL: @maxmin6(
Duncan Sandsa2287852011-05-04 16:05:05 +0000204 %c1 = icmp uge i32 %x, %y
205 %max = select i1 %c1, i32 %x, i32 %y
206 %c2 = icmp uge i32 %x, %z
207 %min = select i1 %c2, i32 %z, i32 %x
208 %c = icmp ugt i32 %min, %max
209 ret i1 %c
210; CHECK: ret i1 false
211}
212
213define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000214; CHECK-LABEL: @maxmin7(
Duncan Sandsa2287852011-05-04 16:05:05 +0000215 %c1 = icmp uge i32 %x, %y
216 %max = select i1 %c1, i32 %x, i32 %y
217 %c2 = icmp uge i32 %x, %z
218 %min = select i1 %c2, i32 %z, i32 %x
219 %c = icmp ule i32 %min, %max
220 ret i1 %c
221; CHECK: ret i1 true
222}
223
224define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000225; CHECK-LABEL: @maxmin8(
Duncan Sandsa2287852011-05-04 16:05:05 +0000226 %c1 = icmp uge i32 %x, %y
227 %max = select i1 %c1, i32 %x, i32 %y
228 %c2 = icmp uge i32 %x, %z
229 %min = select i1 %c2, i32 %z, i32 %x
230 %c = icmp ult i32 %max, %min
231 ret i1 %c
232; CHECK: ret i1 false
233}
Duncan Sandsaf327282011-05-07 16:56:49 +0000234
235define i1 @eqcmp1(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000236; CHECK-LABEL: @eqcmp1(
Duncan Sandsaf327282011-05-07 16:56:49 +0000237 %c = icmp sge i32 %x, %y
238 %max = select i1 %c, i32 %x, i32 %y
239 %r = icmp eq i32 %max, %x
240 ret i1 %r
241; CHECK: ret i1 %c
242}
243
244define i1 @eqcmp2(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000245; CHECK-LABEL: @eqcmp2(
Duncan Sandsaf327282011-05-07 16:56:49 +0000246 %c = icmp sge i32 %x, %y
247 %max = select i1 %c, i32 %x, i32 %y
248 %r = icmp eq i32 %x, %max
249 ret i1 %r
250; CHECK: ret i1 %c
251}
252
253define i1 @eqcmp3(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000254; CHECK-LABEL: @eqcmp3(
Duncan Sandsaf327282011-05-07 16:56:49 +0000255 %c = icmp uge i32 %x, %y
256 %max = select i1 %c, i32 %x, i32 %y
257 %r = icmp eq i32 %max, %x
258 ret i1 %r
259; CHECK: ret i1 %c
260}
261
262define i1 @eqcmp4(i32 %x, i32 %y) {
Stephen Linc1c7a132013-07-14 01:42:54 +0000263; CHECK-LABEL: @eqcmp4(
Duncan Sandsaf327282011-05-07 16:56:49 +0000264 %c = icmp uge i32 %x, %y
265 %max = select i1 %c, i32 %x, i32 %y
266 %r = icmp eq i32 %x, %max
267 ret i1 %r
268; CHECK: ret i1 %c
269}