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) {
103
; CHECK-LABEL: @min4(
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) {
112
; CHECK-LABEL: @min5(
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) {
121
; CHECK-LABEL: @min6(
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) {
130
; CHECK-LABEL: @min7(
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) {
139
; CHECK-LABEL: @min8(
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) {
148
; CHECK-LABEL: @maxmin1(
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) {
159
; CHECK-LABEL: @maxmin2(
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) {
170
; CHECK-LABEL: @maxmin3(
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) {
181
; CHECK-LABEL: @maxmin4(
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) {
192
; CHECK-LABEL: @maxmin5(
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) {
203
; CHECK-LABEL: @maxmin6(
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) {
214
; CHECK-LABEL: @maxmin7(
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) {
225
; CHECK-LABEL: @maxmin8(
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) {
236
; CHECK-LABEL: @eqcmp1(
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) {
245
; CHECK-LABEL: @eqcmp2(
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) {
254
; CHECK-LABEL: @eqcmp3(
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) {
263
; CHECK-LABEL: @eqcmp4(
264
%c = icmp uge i32 %x, %y
265
%max = select i1 %c, i32 %x, i32 %y
266
%r = icmp eq i32 %x, %max