blob: 4da79388f723e8bd34e774a52f8345501b916e0b [file] [log] [blame]
Sanjay Patel82741482016-12-06 18:46:54 +00001; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instsimplify -S | FileCheck %s
3
4; There are 10 * 10 combinations of icmp predicates that can be AND'd together.
5; The majority of these can be simplified to always false or just one of the icmps.
6
7define i1 @eq_eq(i8 %a, i8 %b) {
8; CHECK-LABEL: @eq_eq(
9; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000010; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +000011;
12 %cmp1 = icmp eq i8 %a, %b
13 %cmp2 = icmp eq i8 %a, %b
14 %and = and i1 %cmp1, %cmp2
15 ret i1 %and
16}
17
18define i1 @eq_ne(i8 %a, i8 %b) {
19; CHECK-LABEL: @eq_ne(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000020; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +000021;
22 %cmp1 = icmp eq i8 %a, %b
23 %cmp2 = icmp ne i8 %a, %b
24 %and = and i1 %cmp1, %cmp2
25 ret i1 %and
26}
27
28define i1 @eq_sge(i8 %a, i8 %b) {
29; CHECK-LABEL: @eq_sge(
30; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000031; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +000032;
33 %cmp1 = icmp eq i8 %a, %b
34 %cmp2 = icmp sge i8 %a, %b
35 %and = and i1 %cmp1, %cmp2
36 ret i1 %and
37}
38
39define i1 @eq_sgt(i8 %a, i8 %b) {
40; CHECK-LABEL: @eq_sgt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000041; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +000042;
43 %cmp1 = icmp eq i8 %a, %b
44 %cmp2 = icmp sgt i8 %a, %b
45 %and = and i1 %cmp1, %cmp2
46 ret i1 %and
47}
48
49define i1 @eq_sle(i8 %a, i8 %b) {
50; CHECK-LABEL: @eq_sle(
51; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000052; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +000053;
54 %cmp1 = icmp eq i8 %a, %b
55 %cmp2 = icmp sle i8 %a, %b
56 %and = and i1 %cmp1, %cmp2
57 ret i1 %and
58}
59
60define i1 @eq_slt(i8 %a, i8 %b) {
61; CHECK-LABEL: @eq_slt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000062; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +000063;
64 %cmp1 = icmp eq i8 %a, %b
65 %cmp2 = icmp slt i8 %a, %b
66 %and = and i1 %cmp1, %cmp2
67 ret i1 %and
68}
69
70define i1 @eq_uge(i8 %a, i8 %b) {
71; CHECK-LABEL: @eq_uge(
72; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000073; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +000074;
75 %cmp1 = icmp eq i8 %a, %b
76 %cmp2 = icmp uge i8 %a, %b
77 %and = and i1 %cmp1, %cmp2
78 ret i1 %and
79}
80
81define i1 @eq_ugt(i8 %a, i8 %b) {
82; CHECK-LABEL: @eq_ugt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000083; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +000084;
85 %cmp1 = icmp eq i8 %a, %b
86 %cmp2 = icmp ugt i8 %a, %b
87 %and = and i1 %cmp1, %cmp2
88 ret i1 %and
89}
90
91define i1 @eq_ule(i8 %a, i8 %b) {
92; CHECK-LABEL: @eq_ule(
93; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +000094; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +000095;
96 %cmp1 = icmp eq i8 %a, %b
97 %cmp2 = icmp ule i8 %a, %b
98 %and = and i1 %cmp1, %cmp2
99 ret i1 %and
100}
101
102define i1 @eq_ult(i8 %a, i8 %b) {
103; CHECK-LABEL: @eq_ult(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000104; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000105;
106 %cmp1 = icmp eq i8 %a, %b
107 %cmp2 = icmp ult i8 %a, %b
108 %and = and i1 %cmp1, %cmp2
109 ret i1 %and
110}
111
112;
113
114define i1 @ne_eq(i8 %a, i8 %b) {
115; CHECK-LABEL: @ne_eq(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000116; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000117;
118 %cmp1 = icmp ne i8 %a, %b
119 %cmp2 = icmp eq i8 %a, %b
120 %and = and i1 %cmp1, %cmp2
121 ret i1 %and
122}
123
124define i1 @ne_ne(i8 %a, i8 %b) {
125; CHECK-LABEL: @ne_ne(
126; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000127; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000128;
129 %cmp1 = icmp ne i8 %a, %b
130 %cmp2 = icmp ne i8 %a, %b
131 %and = and i1 %cmp1, %cmp2
132 ret i1 %and
133}
134
135define i1 @ne_sge(i8 %a, i8 %b) {
136; CHECK-LABEL: @ne_sge(
137; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
138; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
139; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
140; CHECK-NEXT: ret i1 [[AND]]
141;
142 %cmp1 = icmp ne i8 %a, %b
143 %cmp2 = icmp sge i8 %a, %b
144 %and = and i1 %cmp1, %cmp2
145 ret i1 %and
146}
147
148define i1 @ne_sgt(i8 %a, i8 %b) {
149; CHECK-LABEL: @ne_sgt(
Sanjay Patel82741482016-12-06 18:46:54 +0000150; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000151; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000152;
153 %cmp1 = icmp ne i8 %a, %b
154 %cmp2 = icmp sgt i8 %a, %b
155 %and = and i1 %cmp1, %cmp2
156 ret i1 %and
157}
158
159define i1 @ne_sle(i8 %a, i8 %b) {
160; CHECK-LABEL: @ne_sle(
161; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
162; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
163; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
164; CHECK-NEXT: ret i1 [[AND]]
165;
166 %cmp1 = icmp ne i8 %a, %b
167 %cmp2 = icmp sle i8 %a, %b
168 %and = and i1 %cmp1, %cmp2
169 ret i1 %and
170}
171
172define i1 @ne_slt(i8 %a, i8 %b) {
173; CHECK-LABEL: @ne_slt(
Sanjay Patel82741482016-12-06 18:46:54 +0000174; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000175; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000176;
177 %cmp1 = icmp ne i8 %a, %b
178 %cmp2 = icmp slt i8 %a, %b
179 %and = and i1 %cmp1, %cmp2
180 ret i1 %and
181}
182
183define i1 @ne_uge(i8 %a, i8 %b) {
184; CHECK-LABEL: @ne_uge(
185; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
186; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
187; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
188; CHECK-NEXT: ret i1 [[AND]]
189;
190 %cmp1 = icmp ne i8 %a, %b
191 %cmp2 = icmp uge i8 %a, %b
192 %and = and i1 %cmp1, %cmp2
193 ret i1 %and
194}
195
196define i1 @ne_ugt(i8 %a, i8 %b) {
197; CHECK-LABEL: @ne_ugt(
Sanjay Patel82741482016-12-06 18:46:54 +0000198; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000199; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000200;
201 %cmp1 = icmp ne i8 %a, %b
202 %cmp2 = icmp ugt i8 %a, %b
203 %and = and i1 %cmp1, %cmp2
204 ret i1 %and
205}
206
207define i1 @ne_ule(i8 %a, i8 %b) {
208; CHECK-LABEL: @ne_ule(
209; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
210; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
211; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
212; CHECK-NEXT: ret i1 [[AND]]
213;
214 %cmp1 = icmp ne i8 %a, %b
215 %cmp2 = icmp ule i8 %a, %b
216 %and = and i1 %cmp1, %cmp2
217 ret i1 %and
218}
219
220define i1 @ne_ult(i8 %a, i8 %b) {
221; CHECK-LABEL: @ne_ult(
Sanjay Patel82741482016-12-06 18:46:54 +0000222; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000223; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000224;
225 %cmp1 = icmp ne i8 %a, %b
226 %cmp2 = icmp ult i8 %a, %b
227 %and = and i1 %cmp1, %cmp2
228 ret i1 %and
229}
230
231;
232
233define i1 @sge_eq(i8 %a, i8 %b) {
234; CHECK-LABEL: @sge_eq(
Sanjay Patel82741482016-12-06 18:46:54 +0000235; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000236; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000237;
238 %cmp1 = icmp sge i8 %a, %b
239 %cmp2 = icmp eq i8 %a, %b
240 %and = and i1 %cmp1, %cmp2
241 ret i1 %and
242}
243
244define i1 @sge_ne(i8 %a, i8 %b) {
245; CHECK-LABEL: @sge_ne(
246; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
247; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
248; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
249; CHECK-NEXT: ret i1 [[AND]]
250;
251 %cmp1 = icmp sge i8 %a, %b
252 %cmp2 = icmp ne i8 %a, %b
253 %and = and i1 %cmp1, %cmp2
254 ret i1 %and
255}
256
257define i1 @sge_sge(i8 %a, i8 %b) {
258; CHECK-LABEL: @sge_sge(
259; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000260; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000261;
262 %cmp1 = icmp sge i8 %a, %b
263 %cmp2 = icmp sge i8 %a, %b
264 %and = and i1 %cmp1, %cmp2
265 ret i1 %and
266}
267
268define i1 @sge_sgt(i8 %a, i8 %b) {
269; CHECK-LABEL: @sge_sgt(
Sanjay Patel82741482016-12-06 18:46:54 +0000270; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000271; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000272;
273 %cmp1 = icmp sge i8 %a, %b
274 %cmp2 = icmp sgt i8 %a, %b
275 %and = and i1 %cmp1, %cmp2
276 ret i1 %and
277}
278
279define i1 @sge_sle(i8 %a, i8 %b) {
280; CHECK-LABEL: @sge_sle(
281; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
282; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
283; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
284; CHECK-NEXT: ret i1 [[AND]]
285;
286 %cmp1 = icmp sge i8 %a, %b
287 %cmp2 = icmp sle i8 %a, %b
288 %and = and i1 %cmp1, %cmp2
289 ret i1 %and
290}
291
292define i1 @sge_slt(i8 %a, i8 %b) {
293; CHECK-LABEL: @sge_slt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000294; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000295;
296 %cmp1 = icmp sge i8 %a, %b
297 %cmp2 = icmp slt i8 %a, %b
298 %and = and i1 %cmp1, %cmp2
299 ret i1 %and
300}
301
302define i1 @sge_uge(i8 %a, i8 %b) {
303; CHECK-LABEL: @sge_uge(
304; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
305; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
306; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
307; CHECK-NEXT: ret i1 [[AND]]
308;
309 %cmp1 = icmp sge i8 %a, %b
310 %cmp2 = icmp uge i8 %a, %b
311 %and = and i1 %cmp1, %cmp2
312 ret i1 %and
313}
314
315define i1 @sge_ugt(i8 %a, i8 %b) {
316; CHECK-LABEL: @sge_ugt(
317; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
318; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
319; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
320; CHECK-NEXT: ret i1 [[AND]]
321;
322 %cmp1 = icmp sge i8 %a, %b
323 %cmp2 = icmp ugt i8 %a, %b
324 %and = and i1 %cmp1, %cmp2
325 ret i1 %and
326}
327
328define i1 @sge_ule(i8 %a, i8 %b) {
329; CHECK-LABEL: @sge_ule(
330; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
331; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
332; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
333; CHECK-NEXT: ret i1 [[AND]]
334;
335 %cmp1 = icmp sge i8 %a, %b
336 %cmp2 = icmp ule i8 %a, %b
337 %and = and i1 %cmp1, %cmp2
338 ret i1 %and
339}
340
341define i1 @sge_ult(i8 %a, i8 %b) {
342; CHECK-LABEL: @sge_ult(
343; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
344; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
345; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
346; CHECK-NEXT: ret i1 [[AND]]
347;
348 %cmp1 = icmp sge i8 %a, %b
349 %cmp2 = icmp ult i8 %a, %b
350 %and = and i1 %cmp1, %cmp2
351 ret i1 %and
352}
353
354;
355
356define i1 @sgt_eq(i8 %a, i8 %b) {
357; CHECK-LABEL: @sgt_eq(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000358; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000359;
360 %cmp1 = icmp sgt i8 %a, %b
361 %cmp2 = icmp eq i8 %a, %b
362 %and = and i1 %cmp1, %cmp2
363 ret i1 %and
364}
365
366define i1 @sgt_ne(i8 %a, i8 %b) {
367; CHECK-LABEL: @sgt_ne(
368; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000369; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000370;
371 %cmp1 = icmp sgt i8 %a, %b
372 %cmp2 = icmp ne i8 %a, %b
373 %and = and i1 %cmp1, %cmp2
374 ret i1 %and
375}
376
377define i1 @sgt_sge(i8 %a, i8 %b) {
378; CHECK-LABEL: @sgt_sge(
379; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000380; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000381;
382 %cmp1 = icmp sgt i8 %a, %b
383 %cmp2 = icmp sge i8 %a, %b
384 %and = and i1 %cmp1, %cmp2
385 ret i1 %and
386}
387
388define i1 @sgt_sgt(i8 %a, i8 %b) {
389; CHECK-LABEL: @sgt_sgt(
390; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000391; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000392;
393 %cmp1 = icmp sgt i8 %a, %b
394 %cmp2 = icmp sgt i8 %a, %b
395 %and = and i1 %cmp1, %cmp2
396 ret i1 %and
397}
398
399define i1 @sgt_sle(i8 %a, i8 %b) {
400; CHECK-LABEL: @sgt_sle(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000401; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000402;
403 %cmp1 = icmp sgt i8 %a, %b
404 %cmp2 = icmp sle i8 %a, %b
405 %and = and i1 %cmp1, %cmp2
406 ret i1 %and
407}
408
409define i1 @sgt_slt(i8 %a, i8 %b) {
410; CHECK-LABEL: @sgt_slt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000411; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000412;
413 %cmp1 = icmp sgt i8 %a, %b
414 %cmp2 = icmp slt i8 %a, %b
415 %and = and i1 %cmp1, %cmp2
416 ret i1 %and
417}
418
419define i1 @sgt_uge(i8 %a, i8 %b) {
420; CHECK-LABEL: @sgt_uge(
421; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
422; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
423; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
424; CHECK-NEXT: ret i1 [[AND]]
425;
426 %cmp1 = icmp sgt i8 %a, %b
427 %cmp2 = icmp uge i8 %a, %b
428 %and = and i1 %cmp1, %cmp2
429 ret i1 %and
430}
431
432define i1 @sgt_ugt(i8 %a, i8 %b) {
433; CHECK-LABEL: @sgt_ugt(
434; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
435; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
436; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
437; CHECK-NEXT: ret i1 [[AND]]
438;
439 %cmp1 = icmp sgt i8 %a, %b
440 %cmp2 = icmp ugt i8 %a, %b
441 %and = and i1 %cmp1, %cmp2
442 ret i1 %and
443}
444
445define i1 @sgt_ule(i8 %a, i8 %b) {
446; CHECK-LABEL: @sgt_ule(
447; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
448; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
449; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
450; CHECK-NEXT: ret i1 [[AND]]
451;
452 %cmp1 = icmp sgt i8 %a, %b
453 %cmp2 = icmp ule i8 %a, %b
454 %and = and i1 %cmp1, %cmp2
455 ret i1 %and
456}
457
458define i1 @sgt_ult(i8 %a, i8 %b) {
459; CHECK-LABEL: @sgt_ult(
460; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
461; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
462; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
463; CHECK-NEXT: ret i1 [[AND]]
464;
465 %cmp1 = icmp sgt i8 %a, %b
466 %cmp2 = icmp ult i8 %a, %b
467 %and = and i1 %cmp1, %cmp2
468 ret i1 %and
469}
470
471;
472
473define i1 @sle_eq(i8 %a, i8 %b) {
474; CHECK-LABEL: @sle_eq(
Sanjay Patel82741482016-12-06 18:46:54 +0000475; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000476; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000477;
478 %cmp1 = icmp sle i8 %a, %b
479 %cmp2 = icmp eq i8 %a, %b
480 %and = and i1 %cmp1, %cmp2
481 ret i1 %and
482}
483
484define i1 @sle_ne(i8 %a, i8 %b) {
485; CHECK-LABEL: @sle_ne(
486; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
487; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
488; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
489; CHECK-NEXT: ret i1 [[AND]]
490;
491 %cmp1 = icmp sle i8 %a, %b
492 %cmp2 = icmp ne i8 %a, %b
493 %and = and i1 %cmp1, %cmp2
494 ret i1 %and
495}
496
497define i1 @sle_sge(i8 %a, i8 %b) {
498; CHECK-LABEL: @sle_sge(
499; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
500; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
501; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
502; CHECK-NEXT: ret i1 [[AND]]
503;
504 %cmp1 = icmp sle i8 %a, %b
505 %cmp2 = icmp sge i8 %a, %b
506 %and = and i1 %cmp1, %cmp2
507 ret i1 %and
508}
509
510define i1 @sle_sgt(i8 %a, i8 %b) {
511; CHECK-LABEL: @sle_sgt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000512; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000513;
514 %cmp1 = icmp sle i8 %a, %b
515 %cmp2 = icmp sgt i8 %a, %b
516 %and = and i1 %cmp1, %cmp2
517 ret i1 %and
518}
519
520define i1 @sle_sle(i8 %a, i8 %b) {
521; CHECK-LABEL: @sle_sle(
522; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000523; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000524;
525 %cmp1 = icmp sle i8 %a, %b
526 %cmp2 = icmp sle i8 %a, %b
527 %and = and i1 %cmp1, %cmp2
528 ret i1 %and
529}
530
531define i1 @sle_slt(i8 %a, i8 %b) {
532; CHECK-LABEL: @sle_slt(
Sanjay Patel82741482016-12-06 18:46:54 +0000533; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000534; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000535;
536 %cmp1 = icmp sle i8 %a, %b
537 %cmp2 = icmp slt i8 %a, %b
538 %and = and i1 %cmp1, %cmp2
539 ret i1 %and
540}
541
542define i1 @sle_uge(i8 %a, i8 %b) {
543; CHECK-LABEL: @sle_uge(
544; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
545; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
546; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
547; CHECK-NEXT: ret i1 [[AND]]
548;
549 %cmp1 = icmp sle i8 %a, %b
550 %cmp2 = icmp uge i8 %a, %b
551 %and = and i1 %cmp1, %cmp2
552 ret i1 %and
553}
554
555define i1 @sle_ugt(i8 %a, i8 %b) {
556; CHECK-LABEL: @sle_ugt(
557; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
558; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
559; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
560; CHECK-NEXT: ret i1 [[AND]]
561;
562 %cmp1 = icmp sle i8 %a, %b
563 %cmp2 = icmp ugt i8 %a, %b
564 %and = and i1 %cmp1, %cmp2
565 ret i1 %and
566}
567
568define i1 @sle_ule(i8 %a, i8 %b) {
569; CHECK-LABEL: @sle_ule(
570; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
571; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
572; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
573; CHECK-NEXT: ret i1 [[AND]]
574;
575 %cmp1 = icmp sle i8 %a, %b
576 %cmp2 = icmp ule i8 %a, %b
577 %and = and i1 %cmp1, %cmp2
578 ret i1 %and
579}
580
581define i1 @sle_ult(i8 %a, i8 %b) {
582; CHECK-LABEL: @sle_ult(
583; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
584; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
585; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
586; CHECK-NEXT: ret i1 [[AND]]
587;
588 %cmp1 = icmp sle i8 %a, %b
589 %cmp2 = icmp ult i8 %a, %b
590 %and = and i1 %cmp1, %cmp2
591 ret i1 %and
592}
593
594;
595
596define i1 @slt_eq(i8 %a, i8 %b) {
597; CHECK-LABEL: @slt_eq(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000598; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000599;
600 %cmp1 = icmp slt i8 %a, %b
601 %cmp2 = icmp eq i8 %a, %b
602 %and = and i1 %cmp1, %cmp2
603 ret i1 %and
604}
605
606define i1 @slt_ne(i8 %a, i8 %b) {
607; CHECK-LABEL: @slt_ne(
608; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000609; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000610;
611 %cmp1 = icmp slt i8 %a, %b
612 %cmp2 = icmp ne i8 %a, %b
613 %and = and i1 %cmp1, %cmp2
614 ret i1 %and
615}
616
617define i1 @slt_sge(i8 %a, i8 %b) {
618; CHECK-LABEL: @slt_sge(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000619; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000620;
621 %cmp1 = icmp slt i8 %a, %b
622 %cmp2 = icmp sge i8 %a, %b
623 %and = and i1 %cmp1, %cmp2
624 ret i1 %and
625}
626
627define i1 @slt_sgt(i8 %a, i8 %b) {
628; CHECK-LABEL: @slt_sgt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000629; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000630;
631 %cmp1 = icmp slt i8 %a, %b
632 %cmp2 = icmp sgt i8 %a, %b
633 %and = and i1 %cmp1, %cmp2
634 ret i1 %and
635}
636
637define i1 @slt_sle(i8 %a, i8 %b) {
638; CHECK-LABEL: @slt_sle(
639; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000640; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000641;
642 %cmp1 = icmp slt i8 %a, %b
643 %cmp2 = icmp sle i8 %a, %b
644 %and = and i1 %cmp1, %cmp2
645 ret i1 %and
646}
647
648define i1 @slt_slt(i8 %a, i8 %b) {
649; CHECK-LABEL: @slt_slt(
650; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000651; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000652;
653 %cmp1 = icmp slt i8 %a, %b
654 %cmp2 = icmp slt i8 %a, %b
655 %and = and i1 %cmp1, %cmp2
656 ret i1 %and
657}
658
659define i1 @slt_uge(i8 %a, i8 %b) {
660; CHECK-LABEL: @slt_uge(
661; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
662; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
663; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
664; CHECK-NEXT: ret i1 [[AND]]
665;
666 %cmp1 = icmp slt i8 %a, %b
667 %cmp2 = icmp uge i8 %a, %b
668 %and = and i1 %cmp1, %cmp2
669 ret i1 %and
670}
671
672define i1 @slt_ugt(i8 %a, i8 %b) {
673; CHECK-LABEL: @slt_ugt(
674; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
675; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
676; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
677; CHECK-NEXT: ret i1 [[AND]]
678;
679 %cmp1 = icmp slt i8 %a, %b
680 %cmp2 = icmp ugt i8 %a, %b
681 %and = and i1 %cmp1, %cmp2
682 ret i1 %and
683}
684
685define i1 @slt_ule(i8 %a, i8 %b) {
686; CHECK-LABEL: @slt_ule(
687; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
688; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
689; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
690; CHECK-NEXT: ret i1 [[AND]]
691;
692 %cmp1 = icmp slt i8 %a, %b
693 %cmp2 = icmp ule i8 %a, %b
694 %and = and i1 %cmp1, %cmp2
695 ret i1 %and
696}
697
698define i1 @slt_ult(i8 %a, i8 %b) {
699; CHECK-LABEL: @slt_ult(
700; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
701; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
702; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
703; CHECK-NEXT: ret i1 [[AND]]
704;
705 %cmp1 = icmp slt i8 %a, %b
706 %cmp2 = icmp ult i8 %a, %b
707 %and = and i1 %cmp1, %cmp2
708 ret i1 %and
709}
710
711;
712
713define i1 @uge_eq(i8 %a, i8 %b) {
714; CHECK-LABEL: @uge_eq(
Sanjay Patel82741482016-12-06 18:46:54 +0000715; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000716; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000717;
718 %cmp1 = icmp uge i8 %a, %b
719 %cmp2 = icmp eq i8 %a, %b
720 %and = and i1 %cmp1, %cmp2
721 ret i1 %and
722}
723
724define i1 @uge_ne(i8 %a, i8 %b) {
725; CHECK-LABEL: @uge_ne(
726; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
727; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
728; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
729; CHECK-NEXT: ret i1 [[AND]]
730;
731 %cmp1 = icmp uge i8 %a, %b
732 %cmp2 = icmp ne i8 %a, %b
733 %and = and i1 %cmp1, %cmp2
734 ret i1 %and
735}
736
737define i1 @uge_sge(i8 %a, i8 %b) {
738; CHECK-LABEL: @uge_sge(
739; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
740; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
741; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
742; CHECK-NEXT: ret i1 [[AND]]
743;
744 %cmp1 = icmp uge i8 %a, %b
745 %cmp2 = icmp sge i8 %a, %b
746 %and = and i1 %cmp1, %cmp2
747 ret i1 %and
748}
749
750define i1 @uge_sgt(i8 %a, i8 %b) {
751; CHECK-LABEL: @uge_sgt(
752; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
753; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
754; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
755; CHECK-NEXT: ret i1 [[AND]]
756;
757 %cmp1 = icmp uge i8 %a, %b
758 %cmp2 = icmp sgt i8 %a, %b
759 %and = and i1 %cmp1, %cmp2
760 ret i1 %and
761}
762
763define i1 @uge_sle(i8 %a, i8 %b) {
764; CHECK-LABEL: @uge_sle(
765; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
766; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
767; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
768; CHECK-NEXT: ret i1 [[AND]]
769;
770 %cmp1 = icmp uge i8 %a, %b
771 %cmp2 = icmp sle i8 %a, %b
772 %and = and i1 %cmp1, %cmp2
773 ret i1 %and
774}
775
776define i1 @uge_slt(i8 %a, i8 %b) {
777; CHECK-LABEL: @uge_slt(
778; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
779; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
780; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
781; CHECK-NEXT: ret i1 [[AND]]
782;
783 %cmp1 = icmp uge i8 %a, %b
784 %cmp2 = icmp slt i8 %a, %b
785 %and = and i1 %cmp1, %cmp2
786 ret i1 %and
787}
788
789define i1 @uge_uge(i8 %a, i8 %b) {
790; CHECK-LABEL: @uge_uge(
791; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000792; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000793;
794 %cmp1 = icmp uge i8 %a, %b
795 %cmp2 = icmp uge i8 %a, %b
796 %and = and i1 %cmp1, %cmp2
797 ret i1 %and
798}
799
800define i1 @uge_ugt(i8 %a, i8 %b) {
801; CHECK-LABEL: @uge_ugt(
Sanjay Patel82741482016-12-06 18:46:54 +0000802; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000803; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000804;
805 %cmp1 = icmp uge i8 %a, %b
806 %cmp2 = icmp ugt i8 %a, %b
807 %and = and i1 %cmp1, %cmp2
808 ret i1 %and
809}
810
811define i1 @uge_ule(i8 %a, i8 %b) {
812; CHECK-LABEL: @uge_ule(
813; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
814; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
815; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
816; CHECK-NEXT: ret i1 [[AND]]
817;
818 %cmp1 = icmp uge i8 %a, %b
819 %cmp2 = icmp ule i8 %a, %b
820 %and = and i1 %cmp1, %cmp2
821 ret i1 %and
822}
823
824define i1 @uge_ult(i8 %a, i8 %b) {
825; CHECK-LABEL: @uge_ult(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000826; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000827;
828 %cmp1 = icmp uge i8 %a, %b
829 %cmp2 = icmp ult i8 %a, %b
830 %and = and i1 %cmp1, %cmp2
831 ret i1 %and
832}
833
834;
835
836define i1 @ugt_eq(i8 %a, i8 %b) {
837; CHECK-LABEL: @ugt_eq(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000838; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000839;
840 %cmp1 = icmp ugt i8 %a, %b
841 %cmp2 = icmp eq i8 %a, %b
842 %and = and i1 %cmp1, %cmp2
843 ret i1 %and
844}
845
846define i1 @ugt_ne(i8 %a, i8 %b) {
847; CHECK-LABEL: @ugt_ne(
848; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000849; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000850;
851 %cmp1 = icmp ugt i8 %a, %b
852 %cmp2 = icmp ne i8 %a, %b
853 %and = and i1 %cmp1, %cmp2
854 ret i1 %and
855}
856
857define i1 @ugt_sge(i8 %a, i8 %b) {
858; CHECK-LABEL: @ugt_sge(
859; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
860; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
861; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
862; CHECK-NEXT: ret i1 [[AND]]
863;
864 %cmp1 = icmp ugt i8 %a, %b
865 %cmp2 = icmp sge i8 %a, %b
866 %and = and i1 %cmp1, %cmp2
867 ret i1 %and
868}
869
870define i1 @ugt_sgt(i8 %a, i8 %b) {
871; CHECK-LABEL: @ugt_sgt(
872; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
873; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
874; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
875; CHECK-NEXT: ret i1 [[AND]]
876;
877 %cmp1 = icmp ugt i8 %a, %b
878 %cmp2 = icmp sgt i8 %a, %b
879 %and = and i1 %cmp1, %cmp2
880 ret i1 %and
881}
882
883define i1 @ugt_sle(i8 %a, i8 %b) {
884; CHECK-LABEL: @ugt_sle(
885; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
886; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
887; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
888; CHECK-NEXT: ret i1 [[AND]]
889;
890 %cmp1 = icmp ugt i8 %a, %b
891 %cmp2 = icmp sle i8 %a, %b
892 %and = and i1 %cmp1, %cmp2
893 ret i1 %and
894}
895
896define i1 @ugt_slt(i8 %a, i8 %b) {
897; CHECK-LABEL: @ugt_slt(
898; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
899; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
900; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
901; CHECK-NEXT: ret i1 [[AND]]
902;
903 %cmp1 = icmp ugt i8 %a, %b
904 %cmp2 = icmp slt i8 %a, %b
905 %and = and i1 %cmp1, %cmp2
906 ret i1 %and
907}
908
909define i1 @ugt_uge(i8 %a, i8 %b) {
910; CHECK-LABEL: @ugt_uge(
911; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000912; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000913;
914 %cmp1 = icmp ugt i8 %a, %b
915 %cmp2 = icmp uge i8 %a, %b
916 %and = and i1 %cmp1, %cmp2
917 ret i1 %and
918}
919
920define i1 @ugt_ugt(i8 %a, i8 %b) {
921; CHECK-LABEL: @ugt_ugt(
922; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000923; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +0000924;
925 %cmp1 = icmp ugt i8 %a, %b
926 %cmp2 = icmp ugt i8 %a, %b
927 %and = and i1 %cmp1, %cmp2
928 ret i1 %and
929}
930
931define i1 @ugt_ule(i8 %a, i8 %b) {
932; CHECK-LABEL: @ugt_ule(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000933; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000934;
935 %cmp1 = icmp ugt i8 %a, %b
936 %cmp2 = icmp ule i8 %a, %b
937 %and = and i1 %cmp1, %cmp2
938 ret i1 %and
939}
940
941define i1 @ugt_ult(i8 %a, i8 %b) {
942; CHECK-LABEL: @ugt_ult(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000943; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +0000944;
945 %cmp1 = icmp ugt i8 %a, %b
946 %cmp2 = icmp ult i8 %a, %b
947 %and = and i1 %cmp1, %cmp2
948 ret i1 %and
949}
950
951;
952
953define i1 @ule_eq(i8 %a, i8 %b) {
954; CHECK-LABEL: @ule_eq(
Sanjay Patel82741482016-12-06 18:46:54 +0000955; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +0000956; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +0000957;
958 %cmp1 = icmp ule i8 %a, %b
959 %cmp2 = icmp eq i8 %a, %b
960 %and = and i1 %cmp1, %cmp2
961 ret i1 %and
962}
963
964define i1 @ule_ne(i8 %a, i8 %b) {
965; CHECK-LABEL: @ule_ne(
966; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
967; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
968; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
969; CHECK-NEXT: ret i1 [[AND]]
970;
971 %cmp1 = icmp ule i8 %a, %b
972 %cmp2 = icmp ne i8 %a, %b
973 %and = and i1 %cmp1, %cmp2
974 ret i1 %and
975}
976
977define i1 @ule_sge(i8 %a, i8 %b) {
978; CHECK-LABEL: @ule_sge(
979; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
980; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
981; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
982; CHECK-NEXT: ret i1 [[AND]]
983;
984 %cmp1 = icmp ule i8 %a, %b
985 %cmp2 = icmp sge i8 %a, %b
986 %and = and i1 %cmp1, %cmp2
987 ret i1 %and
988}
989
990define i1 @ule_sgt(i8 %a, i8 %b) {
991; CHECK-LABEL: @ule_sgt(
992; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
993; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
994; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
995; CHECK-NEXT: ret i1 [[AND]]
996;
997 %cmp1 = icmp ule i8 %a, %b
998 %cmp2 = icmp sgt i8 %a, %b
999 %and = and i1 %cmp1, %cmp2
1000 ret i1 %and
1001}
1002
1003define i1 @ule_sle(i8 %a, i8 %b) {
1004; CHECK-LABEL: @ule_sle(
1005; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1006; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
1007; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1008; CHECK-NEXT: ret i1 [[AND]]
1009;
1010 %cmp1 = icmp ule i8 %a, %b
1011 %cmp2 = icmp sle i8 %a, %b
1012 %and = and i1 %cmp1, %cmp2
1013 ret i1 %and
1014}
1015
1016define i1 @ule_slt(i8 %a, i8 %b) {
1017; CHECK-LABEL: @ule_slt(
1018; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1019; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
1020; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1021; CHECK-NEXT: ret i1 [[AND]]
1022;
1023 %cmp1 = icmp ule i8 %a, %b
1024 %cmp2 = icmp slt i8 %a, %b
1025 %and = and i1 %cmp1, %cmp2
1026 ret i1 %and
1027}
1028
1029define i1 @ule_uge(i8 %a, i8 %b) {
1030; CHECK-LABEL: @ule_uge(
1031; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1032; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
1033; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1034; CHECK-NEXT: ret i1 [[AND]]
1035;
1036 %cmp1 = icmp ule i8 %a, %b
1037 %cmp2 = icmp uge i8 %a, %b
1038 %and = and i1 %cmp1, %cmp2
1039 ret i1 %and
1040}
1041
1042define i1 @ule_ugt(i8 %a, i8 %b) {
1043; CHECK-LABEL: @ule_ugt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001044; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +00001045;
1046 %cmp1 = icmp ule i8 %a, %b
1047 %cmp2 = icmp ugt i8 %a, %b
1048 %and = and i1 %cmp1, %cmp2
1049 ret i1 %and
1050}
1051
1052define i1 @ule_ule(i8 %a, i8 %b) {
1053; CHECK-LABEL: @ule_ule(
1054; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001055; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +00001056;
1057 %cmp1 = icmp ule i8 %a, %b
1058 %cmp2 = icmp ule i8 %a, %b
1059 %and = and i1 %cmp1, %cmp2
1060 ret i1 %and
1061}
1062
1063define i1 @ule_ult(i8 %a, i8 %b) {
1064; CHECK-LABEL: @ule_ult(
Sanjay Patel82741482016-12-06 18:46:54 +00001065; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001066; CHECK-NEXT: ret i1 [[CMP2]]
Sanjay Patel82741482016-12-06 18:46:54 +00001067;
1068 %cmp1 = icmp ule i8 %a, %b
1069 %cmp2 = icmp ult i8 %a, %b
1070 %and = and i1 %cmp1, %cmp2
1071 ret i1 %and
1072}
1073
1074;
1075
1076define i1 @ult_eq(i8 %a, i8 %b) {
1077; CHECK-LABEL: @ult_eq(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001078; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +00001079;
1080 %cmp1 = icmp ult i8 %a, %b
1081 %cmp2 = icmp eq i8 %a, %b
1082 %and = and i1 %cmp1, %cmp2
1083 ret i1 %and
1084}
1085
1086define i1 @ult_ne(i8 %a, i8 %b) {
1087; CHECK-LABEL: @ult_ne(
1088; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001089; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +00001090;
1091 %cmp1 = icmp ult i8 %a, %b
1092 %cmp2 = icmp ne i8 %a, %b
1093 %and = and i1 %cmp1, %cmp2
1094 ret i1 %and
1095}
1096
1097define i1 @ult_sge(i8 %a, i8 %b) {
1098; CHECK-LABEL: @ult_sge(
1099; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1100; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
1101; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1102; CHECK-NEXT: ret i1 [[AND]]
1103;
1104 %cmp1 = icmp ult i8 %a, %b
1105 %cmp2 = icmp sge i8 %a, %b
1106 %and = and i1 %cmp1, %cmp2
1107 ret i1 %and
1108}
1109
1110define i1 @ult_sgt(i8 %a, i8 %b) {
1111; CHECK-LABEL: @ult_sgt(
1112; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1113; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
1114; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1115; CHECK-NEXT: ret i1 [[AND]]
1116;
1117 %cmp1 = icmp ult i8 %a, %b
1118 %cmp2 = icmp sgt i8 %a, %b
1119 %and = and i1 %cmp1, %cmp2
1120 ret i1 %and
1121}
1122
1123define i1 @ult_sle(i8 %a, i8 %b) {
1124; CHECK-LABEL: @ult_sle(
1125; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1126; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
1127; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1128; CHECK-NEXT: ret i1 [[AND]]
1129;
1130 %cmp1 = icmp ult i8 %a, %b
1131 %cmp2 = icmp sle i8 %a, %b
1132 %and = and i1 %cmp1, %cmp2
1133 ret i1 %and
1134}
1135
1136define i1 @ult_slt(i8 %a, i8 %b) {
1137; CHECK-LABEL: @ult_slt(
1138; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1139; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
1140; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1141; CHECK-NEXT: ret i1 [[AND]]
1142;
1143 %cmp1 = icmp ult i8 %a, %b
1144 %cmp2 = icmp slt i8 %a, %b
1145 %and = and i1 %cmp1, %cmp2
1146 ret i1 %and
1147}
1148
1149define i1 @ult_uge(i8 %a, i8 %b) {
1150; CHECK-LABEL: @ult_uge(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001151; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +00001152;
1153 %cmp1 = icmp ult i8 %a, %b
1154 %cmp2 = icmp uge i8 %a, %b
1155 %and = and i1 %cmp1, %cmp2
1156 ret i1 %and
1157}
1158
1159define i1 @ult_ugt(i8 %a, i8 %b) {
1160; CHECK-LABEL: @ult_ugt(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001161; CHECK-NEXT: ret i1 false
Sanjay Patel82741482016-12-06 18:46:54 +00001162;
1163 %cmp1 = icmp ult i8 %a, %b
1164 %cmp2 = icmp ugt i8 %a, %b
1165 %and = and i1 %cmp1, %cmp2
1166 ret i1 %and
1167}
1168
1169define i1 @ult_ule(i8 %a, i8 %b) {
1170; CHECK-LABEL: @ult_ule(
1171; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001172; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +00001173;
1174 %cmp1 = icmp ult i8 %a, %b
1175 %cmp2 = icmp ule i8 %a, %b
1176 %and = and i1 %cmp1, %cmp2
1177 ret i1 %and
1178}
1179
1180define i1 @ult_ult(i8 %a, i8 %b) {
1181; CHECK-LABEL: @ult_ult(
1182; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001183; CHECK-NEXT: ret i1 [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +00001184;
1185 %cmp1 = icmp ult i8 %a, %b
1186 %cmp2 = icmp ult i8 %a, %b
1187 %and = and i1 %cmp1, %cmp2
1188 ret i1 %and
1189}
1190
1191; Check a couple of vector variants to make sure those work too.
1192
1193define <2 x i1> @ult_uge_vec(<2 x i8> %a, <2 x i8> %b) {
1194; CHECK-LABEL: @ult_uge_vec(
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001195; CHECK-NEXT: ret <2 x i1> zeroinitializer
Sanjay Patel82741482016-12-06 18:46:54 +00001196;
1197 %cmp1 = icmp ult <2 x i8> %a, %b
1198 %cmp2 = icmp uge <2 x i8> %a, %b
1199 %and = and <2 x i1> %cmp1, %cmp2
1200 ret <2 x i1> %and
1201}
1202
1203define <2 x i1> @ult_ule_vec(<2 x i8> %a, <2 x i8> %b) {
1204; CHECK-LABEL: @ult_ule_vec(
1205; CHECK-NEXT: [[CMP1:%.*]] = icmp ult <2 x i8> %a, %b
Sanjay Patel9b1b2de2016-12-06 19:05:46 +00001206; CHECK-NEXT: ret <2 x i1> [[CMP1]]
Sanjay Patel82741482016-12-06 18:46:54 +00001207;
1208 %cmp1 = icmp ult <2 x i8> %a, %b
1209 %cmp2 = icmp ule <2 x i8> %a, %b
1210 %and = and <2 x i1> %cmp1, %cmp2
1211 ret <2 x i1> %and
1212}
1213
Sanjay Patel53697752016-12-06 22:09:52 +00001214define i1 @ult_uge_swap(i8 %a, i8 %b) {
1215; CHECK-LABEL: @ult_uge_swap(
1216; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1217; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %b, %a
1218; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1219; CHECK-NEXT: ret i1 [[AND]]
1220;
1221 %cmp1 = icmp ult i8 %a, %b
1222 %cmp2 = icmp uge i8 %b, %a
1223 %and = and i1 %cmp1, %cmp2
1224 ret i1 %and
1225}
1226
1227define i1 @ult_ult_swap(i8 %a, i8 %b) {
1228; CHECK-LABEL: @ult_ult_swap(
1229; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1230; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %b, %a
1231; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1232; CHECK-NEXT: ret i1 [[AND]]
1233;
1234 %cmp1 = icmp ult i8 %a, %b
1235 %cmp2 = icmp ult i8 %b, %a
1236 %and = and i1 %cmp1, %cmp2
1237 ret i1 %and
1238}
1239