1 ; NOTE: Assertions have been autogenerated by update_test_checks.py
2 ; RUN: opt < %s -instsimplify -S | FileCheck %s
4 define i1 @max1(i32 %x, i32 %y) {
8 %c = icmp sgt i32 %x, %y
9 %m = select i1 %c, i32 %x, i32 %y
10 %r = icmp slt i32 %m, %x
14 define i1 @max2(i32 %x, i32 %y) {
18 %c = icmp sge i32 %x, %y
19 %m = select i1 %c, i32 %x, i32 %y
20 %r = icmp sge i32 %m, %x
24 define i1 @max3(i32 %x, i32 %y) {
28 %c = icmp ugt i32 %x, %y
29 %m = select i1 %c, i32 %x, i32 %y
30 %r = icmp ult i32 %m, %x
34 define i1 @max4(i32 %x, i32 %y) {
38 %c = icmp uge i32 %x, %y
39 %m = select i1 %c, i32 %x, i32 %y
40 %r = icmp uge i32 %m, %x
44 define i1 @max5(i32 %x, i32 %y) {
48 %c = icmp sgt i32 %x, %y
49 %m = select i1 %c, i32 %x, i32 %y
50 %r = icmp sgt i32 %x, %m
54 define i1 @max6(i32 %x, i32 %y) {
58 %c = icmp sge i32 %x, %y
59 %m = select i1 %c, i32 %x, i32 %y
60 %r = icmp sle i32 %x, %m
64 define i1 @max7(i32 %x, i32 %y) {
68 %c = icmp ugt i32 %x, %y
69 %m = select i1 %c, i32 %x, i32 %y
70 %r = icmp ugt i32 %x, %m
74 define i1 @max8(i32 %x, i32 %y) {
78 %c = icmp uge i32 %x, %y
79 %m = select i1 %c, i32 %x, i32 %y
80 %r = icmp ule i32 %x, %m
84 define i1 @min1(i32 %x, i32 %y) {
88 %c = icmp sgt i32 %x, %y
89 %m = select i1 %c, i32 %y, i32 %x
90 %r = icmp sgt i32 %m, %x
94 define i1 @min2(i32 %x, i32 %y) {
98 %c = icmp sge i32 %x, %y
99 %m = select i1 %c, i32 %y, i32 %x
100 %r = icmp sle i32 %m, %x
104 define i1 @min3(i32 %x, i32 %y) {
105 ; CHECK-LABEL: @min3(
106 ; CHECK: ret i1 false
108 %c = icmp ugt i32 %x, %y
109 %m = select i1 %c, i32 %y, i32 %x
110 %r = icmp ugt i32 %m, %x
114 define i1 @min4(i32 %x, i32 %y) {
115 ; CHECK-LABEL: @min4(
118 %c = icmp uge i32 %x, %y
119 %m = select i1 %c, i32 %y, i32 %x
120 %r = icmp ule i32 %m, %x
124 define i1 @min5(i32 %x, i32 %y) {
125 ; CHECK-LABEL: @min5(
126 ; CHECK: ret i1 false
128 %c = icmp sgt i32 %x, %y
129 %m = select i1 %c, i32 %y, i32 %x
130 %r = icmp slt i32 %x, %m
134 define i1 @min6(i32 %x, i32 %y) {
135 ; CHECK-LABEL: @min6(
138 %c = icmp sge i32 %x, %y
139 %m = select i1 %c, i32 %y, i32 %x
140 %r = icmp sge i32 %x, %m
144 define i1 @min7(i32 %x, i32 %y) {
145 ; CHECK-LABEL: @min7(
146 ; CHECK: ret i1 false
148 %c = icmp ugt i32 %x, %y
149 %m = select i1 %c, i32 %y, i32 %x
150 %r = icmp ult i32 %x, %m
154 define i1 @min8(i32 %x, i32 %y) {
155 ; CHECK-LABEL: @min8(
158 %c = icmp uge i32 %x, %y
159 %m = select i1 %c, i32 %y, i32 %x
160 %r = icmp uge i32 %x, %m
164 define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
165 ; CHECK-LABEL: @maxmin1(
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
176 define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
177 ; CHECK-LABEL: @maxmin2(
178 ; CHECK: ret i1 false
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
188 define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
189 ; CHECK-LABEL: @maxmin3(
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
200 define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
201 ; CHECK-LABEL: @maxmin4(
202 ; CHECK: ret i1 false
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
212 define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
213 ; CHECK-LABEL: @maxmin5(
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
224 define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
225 ; CHECK-LABEL: @maxmin6(
226 ; CHECK: ret i1 false
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
236 define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
237 ; CHECK-LABEL: @maxmin7(
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
248 define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
249 ; CHECK-LABEL: @maxmin8(
250 ; CHECK: ret i1 false
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
260 define i1 @eqcmp1(i32 %x, i32 %y) {
261 ; CHECK-LABEL: @eqcmp1(
262 ; CHECK: [[C:%.*]] = icmp sge i32 %x, %y
263 ; CHECK-NEXT: ret i1 [[C]]
265 %c = icmp sge i32 %x, %y
266 %max = select i1 %c, i32 %x, i32 %y
267 %r = icmp eq i32 %max, %x
271 define i1 @eqcmp2(i32 %x, i32 %y) {
272 ; CHECK-LABEL: @eqcmp2(
273 ; CHECK: [[C:%.*]] = icmp sge i32 %x, %y
274 ; CHECK-NEXT: ret i1 [[C]]
276 %c = icmp sge i32 %x, %y
277 %max = select i1 %c, i32 %x, i32 %y
278 %r = icmp eq i32 %x, %max
282 define i1 @eqcmp3(i32 %x, i32 %y) {
283 ; CHECK-LABEL: @eqcmp3(
284 ; CHECK: [[C:%.*]] = icmp uge i32 %x, %y
285 ; CHECK-NEXT: ret i1 [[C]]
287 %c = icmp uge i32 %x, %y
288 %max = select i1 %c, i32 %x, i32 %y
289 %r = icmp eq i32 %max, %x
293 define i1 @eqcmp4(i32 %x, i32 %y) {
294 ; CHECK-LABEL: @eqcmp4(
295 ; CHECK: [[C:%.*]] = icmp uge i32 %x, %y
296 ; CHECK-NEXT: ret i1 [[C]]
298 %c = icmp uge i32 %x, %y
299 %max = select i1 %c, i32 %x, i32 %y
300 %r = icmp eq i32 %x, %max