1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
3 define i1 @max1(i32 %x, i32 %y) {
5 %c = icmp sgt i32 %x, %y
6 %m = select i1 %c, i32 %x, i32 %y
7 %r = icmp slt i32 %m, %x
12 define i1 @max2(i32 %x, i32 %y) {
14 %c = icmp sge i32 %x, %y
15 %m = select i1 %c, i32 %x, i32 %y
16 %r = icmp sge i32 %m, %x
21 define i1 @max3(i32 %x, i32 %y) {
23 %c = icmp ugt i32 %x, %y
24 %m = select i1 %c, i32 %x, i32 %y
25 %r = icmp ult i32 %m, %x
30 define i1 @max4(i32 %x, i32 %y) {
32 %c = icmp uge i32 %x, %y
33 %m = select i1 %c, i32 %x, i32 %y
34 %r = icmp uge i32 %m, %x
39 define i1 @max5(i32 %x, i32 %y) {
41 %c = icmp sgt i32 %x, %y
42 %m = select i1 %c, i32 %x, i32 %y
43 %r = icmp sgt i32 %x, %m
48 define i1 @max6(i32 %x, i32 %y) {
50 %c = icmp sge i32 %x, %y
51 %m = select i1 %c, i32 %x, i32 %y
52 %r = icmp sle i32 %x, %m
57 define i1 @max7(i32 %x, i32 %y) {
59 %c = icmp ugt i32 %x, %y
60 %m = select i1 %c, i32 %x, i32 %y
61 %r = icmp ugt i32 %x, %m
66 define i1 @max8(i32 %x, i32 %y) {
68 %c = icmp uge i32 %x, %y
69 %m = select i1 %c, i32 %x, i32 %y
70 %r = icmp ule i32 %x, %m
75 define i1 @min1(i32 %x, i32 %y) {
77 %c = icmp sgt i32 %x, %y
78 %m = select i1 %c, i32 %y, i32 %x
79 %r = icmp sgt i32 %m, %x
84 define i1 @min2(i32 %x, i32 %y) {
86 %c = icmp sge i32 %x, %y
87 %m = select i1 %c, i32 %y, i32 %x
88 %r = icmp sle i32 %m, %x
93 define i1 @min3(i32 %x, i32 %y) {
95 %c = icmp ugt i32 %x, %y
96 %m = select i1 %c, i32 %y, i32 %x
97 %r = icmp ugt i32 %m, %x
102 define i1 @min4(i32 %x, i32 %y) {
104 %c = icmp uge i32 %x, %y
105 %m = select i1 %c, i32 %y, i32 %x
106 %r = icmp ule i32 %m, %x
111 define i1 @min5(i32 %x, i32 %y) {
113 %c = icmp sgt i32 %x, %y
114 %m = select i1 %c, i32 %y, i32 %x
115 %r = icmp slt i32 %x, %m
117 ; CHECK: ret i1 false
120 define i1 @min6(i32 %x, i32 %y) {
122 %c = icmp sge i32 %x, %y
123 %m = select i1 %c, i32 %y, i32 %x
124 %r = icmp sge i32 %x, %m
129 define i1 @min7(i32 %x, i32 %y) {
131 %c = icmp ugt i32 %x, %y
132 %m = select i1 %c, i32 %y, i32 %x
133 %r = icmp ult i32 %x, %m
135 ; CHECK: ret i1 false
138 define i1 @min8(i32 %x, i32 %y) {
140 %c = icmp uge i32 %x, %y
141 %m = select i1 %c, i32 %y, i32 %x
142 %r = icmp uge i32 %x, %m
147 define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
149 %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
158 define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
160 %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
166 ; CHECK: ret i1 false
169 define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
171 %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
180 define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
182 %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
188 ; CHECK: ret i1 false
191 define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
193 %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
202 define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
204 %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
210 ; CHECK: ret i1 false
213 define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
215 %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
224 define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
226 %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
232 ; CHECK: ret i1 false
235 define i1 @eqcmp1(i32 %x, i32 %y) {
237 %c = icmp sge i32 %x, %y
238 %max = select i1 %c, i32 %x, i32 %y
239 %r = icmp eq i32 %max, %x
244 define i1 @eqcmp2(i32 %x, i32 %y) {
246 %c = icmp sge i32 %x, %y
247 %max = select i1 %c, i32 %x, i32 %y
248 %r = icmp eq i32 %x, %max
253 define i1 @eqcmp3(i32 %x, i32 %y) {
255 %c = icmp uge i32 %x, %y
256 %max = select i1 %c, i32 %x, i32 %y
257 %r = icmp eq i32 %max, %x
262 define i1 @eqcmp4(i32 %x, i32 %y) {
264 %c = icmp uge i32 %x, %y
265 %max = select i1 %c, i32 %x, i32 %y
266 %r = icmp eq i32 %x, %max