blob: 6e7da27bf58050f03ab87718cfa176486f9a4cb1 [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
10; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
11; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
12; CHECK-NEXT: ret i1 [[AND]]
13;
14 %cmp1 = icmp eq i8 %a, %b
15 %cmp2 = icmp eq i8 %a, %b
16 %and = and i1 %cmp1, %cmp2
17 ret i1 %and
18}
19
20define i1 @eq_ne(i8 %a, i8 %b) {
21; CHECK-LABEL: @eq_ne(
22; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
23; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
24; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
25; CHECK-NEXT: ret i1 [[AND]]
26;
27 %cmp1 = icmp eq i8 %a, %b
28 %cmp2 = icmp ne i8 %a, %b
29 %and = and i1 %cmp1, %cmp2
30 ret i1 %and
31}
32
33define i1 @eq_sge(i8 %a, i8 %b) {
34; CHECK-LABEL: @eq_sge(
35; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
36; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
37; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
38; CHECK-NEXT: ret i1 [[AND]]
39;
40 %cmp1 = icmp eq i8 %a, %b
41 %cmp2 = icmp sge i8 %a, %b
42 %and = and i1 %cmp1, %cmp2
43 ret i1 %and
44}
45
46define i1 @eq_sgt(i8 %a, i8 %b) {
47; CHECK-LABEL: @eq_sgt(
48; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
49; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
50; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
51; CHECK-NEXT: ret i1 [[AND]]
52;
53 %cmp1 = icmp eq i8 %a, %b
54 %cmp2 = icmp sgt i8 %a, %b
55 %and = and i1 %cmp1, %cmp2
56 ret i1 %and
57}
58
59define i1 @eq_sle(i8 %a, i8 %b) {
60; CHECK-LABEL: @eq_sle(
61; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
62; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
63; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
64; CHECK-NEXT: ret i1 [[AND]]
65;
66 %cmp1 = icmp eq i8 %a, %b
67 %cmp2 = icmp sle i8 %a, %b
68 %and = and i1 %cmp1, %cmp2
69 ret i1 %and
70}
71
72define i1 @eq_slt(i8 %a, i8 %b) {
73; CHECK-LABEL: @eq_slt(
74; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
75; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
76; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
77; CHECK-NEXT: ret i1 [[AND]]
78;
79 %cmp1 = icmp eq i8 %a, %b
80 %cmp2 = icmp slt i8 %a, %b
81 %and = and i1 %cmp1, %cmp2
82 ret i1 %and
83}
84
85define i1 @eq_uge(i8 %a, i8 %b) {
86; CHECK-LABEL: @eq_uge(
87; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
88; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
89; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
90; CHECK-NEXT: ret i1 [[AND]]
91;
92 %cmp1 = icmp eq i8 %a, %b
93 %cmp2 = icmp uge i8 %a, %b
94 %and = and i1 %cmp1, %cmp2
95 ret i1 %and
96}
97
98define i1 @eq_ugt(i8 %a, i8 %b) {
99; CHECK-LABEL: @eq_ugt(
100; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
101; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
102; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
103; CHECK-NEXT: ret i1 [[AND]]
104;
105 %cmp1 = icmp eq i8 %a, %b
106 %cmp2 = icmp ugt i8 %a, %b
107 %and = and i1 %cmp1, %cmp2
108 ret i1 %and
109}
110
111define i1 @eq_ule(i8 %a, i8 %b) {
112; CHECK-LABEL: @eq_ule(
113; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
114; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
115; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
116; CHECK-NEXT: ret i1 [[AND]]
117;
118 %cmp1 = icmp eq i8 %a, %b
119 %cmp2 = icmp ule i8 %a, %b
120 %and = and i1 %cmp1, %cmp2
121 ret i1 %and
122}
123
124define i1 @eq_ult(i8 %a, i8 %b) {
125; CHECK-LABEL: @eq_ult(
126; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 %a, %b
127; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
128; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
129; CHECK-NEXT: ret i1 [[AND]]
130;
131 %cmp1 = icmp eq i8 %a, %b
132 %cmp2 = icmp ult i8 %a, %b
133 %and = and i1 %cmp1, %cmp2
134 ret i1 %and
135}
136
137;
138
139define i1 @ne_eq(i8 %a, i8 %b) {
140; CHECK-LABEL: @ne_eq(
141; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
142; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
143; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
144; CHECK-NEXT: ret i1 [[AND]]
145;
146 %cmp1 = icmp ne i8 %a, %b
147 %cmp2 = icmp eq i8 %a, %b
148 %and = and i1 %cmp1, %cmp2
149 ret i1 %and
150}
151
152define i1 @ne_ne(i8 %a, i8 %b) {
153; CHECK-LABEL: @ne_ne(
154; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
155; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
156; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
157; CHECK-NEXT: ret i1 [[AND]]
158;
159 %cmp1 = icmp ne i8 %a, %b
160 %cmp2 = icmp ne i8 %a, %b
161 %and = and i1 %cmp1, %cmp2
162 ret i1 %and
163}
164
165define i1 @ne_sge(i8 %a, i8 %b) {
166; CHECK-LABEL: @ne_sge(
167; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
168; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
169; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
170; CHECK-NEXT: ret i1 [[AND]]
171;
172 %cmp1 = icmp ne i8 %a, %b
173 %cmp2 = icmp sge i8 %a, %b
174 %and = and i1 %cmp1, %cmp2
175 ret i1 %and
176}
177
178define i1 @ne_sgt(i8 %a, i8 %b) {
179; CHECK-LABEL: @ne_sgt(
180; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
181; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
182; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
183; CHECK-NEXT: ret i1 [[AND]]
184;
185 %cmp1 = icmp ne i8 %a, %b
186 %cmp2 = icmp sgt i8 %a, %b
187 %and = and i1 %cmp1, %cmp2
188 ret i1 %and
189}
190
191define i1 @ne_sle(i8 %a, i8 %b) {
192; CHECK-LABEL: @ne_sle(
193; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
194; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
195; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
196; CHECK-NEXT: ret i1 [[AND]]
197;
198 %cmp1 = icmp ne i8 %a, %b
199 %cmp2 = icmp sle i8 %a, %b
200 %and = and i1 %cmp1, %cmp2
201 ret i1 %and
202}
203
204define i1 @ne_slt(i8 %a, i8 %b) {
205; CHECK-LABEL: @ne_slt(
206; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
207; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
208; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
209; CHECK-NEXT: ret i1 [[AND]]
210;
211 %cmp1 = icmp ne i8 %a, %b
212 %cmp2 = icmp slt i8 %a, %b
213 %and = and i1 %cmp1, %cmp2
214 ret i1 %and
215}
216
217define i1 @ne_uge(i8 %a, i8 %b) {
218; CHECK-LABEL: @ne_uge(
219; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
220; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
221; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
222; CHECK-NEXT: ret i1 [[AND]]
223;
224 %cmp1 = icmp ne i8 %a, %b
225 %cmp2 = icmp uge i8 %a, %b
226 %and = and i1 %cmp1, %cmp2
227 ret i1 %and
228}
229
230define i1 @ne_ugt(i8 %a, i8 %b) {
231; CHECK-LABEL: @ne_ugt(
232; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
233; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
234; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
235; CHECK-NEXT: ret i1 [[AND]]
236;
237 %cmp1 = icmp ne i8 %a, %b
238 %cmp2 = icmp ugt i8 %a, %b
239 %and = and i1 %cmp1, %cmp2
240 ret i1 %and
241}
242
243define i1 @ne_ule(i8 %a, i8 %b) {
244; CHECK-LABEL: @ne_ule(
245; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
246; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
247; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
248; CHECK-NEXT: ret i1 [[AND]]
249;
250 %cmp1 = icmp ne i8 %a, %b
251 %cmp2 = icmp ule i8 %a, %b
252 %and = and i1 %cmp1, %cmp2
253 ret i1 %and
254}
255
256define i1 @ne_ult(i8 %a, i8 %b) {
257; CHECK-LABEL: @ne_ult(
258; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 %a, %b
259; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
260; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
261; CHECK-NEXT: ret i1 [[AND]]
262;
263 %cmp1 = icmp ne i8 %a, %b
264 %cmp2 = icmp ult i8 %a, %b
265 %and = and i1 %cmp1, %cmp2
266 ret i1 %and
267}
268
269;
270
271define i1 @sge_eq(i8 %a, i8 %b) {
272; CHECK-LABEL: @sge_eq(
273; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
274; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
275; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
276; CHECK-NEXT: ret i1 [[AND]]
277;
278 %cmp1 = icmp sge i8 %a, %b
279 %cmp2 = icmp eq i8 %a, %b
280 %and = and i1 %cmp1, %cmp2
281 ret i1 %and
282}
283
284define i1 @sge_ne(i8 %a, i8 %b) {
285; CHECK-LABEL: @sge_ne(
286; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
287; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
288; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
289; CHECK-NEXT: ret i1 [[AND]]
290;
291 %cmp1 = icmp sge i8 %a, %b
292 %cmp2 = icmp ne i8 %a, %b
293 %and = and i1 %cmp1, %cmp2
294 ret i1 %and
295}
296
297define i1 @sge_sge(i8 %a, i8 %b) {
298; CHECK-LABEL: @sge_sge(
299; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
300; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
301; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
302; CHECK-NEXT: ret i1 [[AND]]
303;
304 %cmp1 = icmp sge i8 %a, %b
305 %cmp2 = icmp sge i8 %a, %b
306 %and = and i1 %cmp1, %cmp2
307 ret i1 %and
308}
309
310define i1 @sge_sgt(i8 %a, i8 %b) {
311; CHECK-LABEL: @sge_sgt(
312; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
313; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
314; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
315; CHECK-NEXT: ret i1 [[AND]]
316;
317 %cmp1 = icmp sge i8 %a, %b
318 %cmp2 = icmp sgt i8 %a, %b
319 %and = and i1 %cmp1, %cmp2
320 ret i1 %and
321}
322
323define i1 @sge_sle(i8 %a, i8 %b) {
324; CHECK-LABEL: @sge_sle(
325; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
326; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
327; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
328; CHECK-NEXT: ret i1 [[AND]]
329;
330 %cmp1 = icmp sge i8 %a, %b
331 %cmp2 = icmp sle i8 %a, %b
332 %and = and i1 %cmp1, %cmp2
333 ret i1 %and
334}
335
336define i1 @sge_slt(i8 %a, i8 %b) {
337; CHECK-LABEL: @sge_slt(
338; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
339; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
340; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
341; CHECK-NEXT: ret i1 [[AND]]
342;
343 %cmp1 = icmp sge i8 %a, %b
344 %cmp2 = icmp slt i8 %a, %b
345 %and = and i1 %cmp1, %cmp2
346 ret i1 %and
347}
348
349define i1 @sge_uge(i8 %a, i8 %b) {
350; CHECK-LABEL: @sge_uge(
351; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
352; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
353; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
354; CHECK-NEXT: ret i1 [[AND]]
355;
356 %cmp1 = icmp sge i8 %a, %b
357 %cmp2 = icmp uge i8 %a, %b
358 %and = and i1 %cmp1, %cmp2
359 ret i1 %and
360}
361
362define i1 @sge_ugt(i8 %a, i8 %b) {
363; CHECK-LABEL: @sge_ugt(
364; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
365; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
366; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
367; CHECK-NEXT: ret i1 [[AND]]
368;
369 %cmp1 = icmp sge i8 %a, %b
370 %cmp2 = icmp ugt i8 %a, %b
371 %and = and i1 %cmp1, %cmp2
372 ret i1 %and
373}
374
375define i1 @sge_ule(i8 %a, i8 %b) {
376; CHECK-LABEL: @sge_ule(
377; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
378; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
379; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
380; CHECK-NEXT: ret i1 [[AND]]
381;
382 %cmp1 = icmp sge i8 %a, %b
383 %cmp2 = icmp ule i8 %a, %b
384 %and = and i1 %cmp1, %cmp2
385 ret i1 %and
386}
387
388define i1 @sge_ult(i8 %a, i8 %b) {
389; CHECK-LABEL: @sge_ult(
390; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i8 %a, %b
391; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
392; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
393; CHECK-NEXT: ret i1 [[AND]]
394;
395 %cmp1 = icmp sge i8 %a, %b
396 %cmp2 = icmp ult i8 %a, %b
397 %and = and i1 %cmp1, %cmp2
398 ret i1 %and
399}
400
401;
402
403define i1 @sgt_eq(i8 %a, i8 %b) {
404; CHECK-LABEL: @sgt_eq(
405; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
406; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
407; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
408; CHECK-NEXT: ret i1 [[AND]]
409;
410 %cmp1 = icmp sgt i8 %a, %b
411 %cmp2 = icmp eq i8 %a, %b
412 %and = and i1 %cmp1, %cmp2
413 ret i1 %and
414}
415
416define i1 @sgt_ne(i8 %a, i8 %b) {
417; CHECK-LABEL: @sgt_ne(
418; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
419; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
420; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
421; CHECK-NEXT: ret i1 [[AND]]
422;
423 %cmp1 = icmp sgt i8 %a, %b
424 %cmp2 = icmp ne i8 %a, %b
425 %and = and i1 %cmp1, %cmp2
426 ret i1 %and
427}
428
429define i1 @sgt_sge(i8 %a, i8 %b) {
430; CHECK-LABEL: @sgt_sge(
431; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
432; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
433; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
434; CHECK-NEXT: ret i1 [[AND]]
435;
436 %cmp1 = icmp sgt i8 %a, %b
437 %cmp2 = icmp sge i8 %a, %b
438 %and = and i1 %cmp1, %cmp2
439 ret i1 %and
440}
441
442define i1 @sgt_sgt(i8 %a, i8 %b) {
443; CHECK-LABEL: @sgt_sgt(
444; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
445; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
446; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
447; CHECK-NEXT: ret i1 [[AND]]
448;
449 %cmp1 = icmp sgt i8 %a, %b
450 %cmp2 = icmp sgt i8 %a, %b
451 %and = and i1 %cmp1, %cmp2
452 ret i1 %and
453}
454
455define i1 @sgt_sle(i8 %a, i8 %b) {
456; CHECK-LABEL: @sgt_sle(
457; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
458; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
459; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
460; CHECK-NEXT: ret i1 [[AND]]
461;
462 %cmp1 = icmp sgt i8 %a, %b
463 %cmp2 = icmp sle i8 %a, %b
464 %and = and i1 %cmp1, %cmp2
465 ret i1 %and
466}
467
468define i1 @sgt_slt(i8 %a, i8 %b) {
469; CHECK-LABEL: @sgt_slt(
470; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
471; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
472; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
473; CHECK-NEXT: ret i1 [[AND]]
474;
475 %cmp1 = icmp sgt i8 %a, %b
476 %cmp2 = icmp slt i8 %a, %b
477 %and = and i1 %cmp1, %cmp2
478 ret i1 %and
479}
480
481define i1 @sgt_uge(i8 %a, i8 %b) {
482; CHECK-LABEL: @sgt_uge(
483; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
484; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
485; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
486; CHECK-NEXT: ret i1 [[AND]]
487;
488 %cmp1 = icmp sgt i8 %a, %b
489 %cmp2 = icmp uge i8 %a, %b
490 %and = and i1 %cmp1, %cmp2
491 ret i1 %and
492}
493
494define i1 @sgt_ugt(i8 %a, i8 %b) {
495; CHECK-LABEL: @sgt_ugt(
496; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
497; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
498; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
499; CHECK-NEXT: ret i1 [[AND]]
500;
501 %cmp1 = icmp sgt i8 %a, %b
502 %cmp2 = icmp ugt i8 %a, %b
503 %and = and i1 %cmp1, %cmp2
504 ret i1 %and
505}
506
507define i1 @sgt_ule(i8 %a, i8 %b) {
508; CHECK-LABEL: @sgt_ule(
509; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
510; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
511; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
512; CHECK-NEXT: ret i1 [[AND]]
513;
514 %cmp1 = icmp sgt i8 %a, %b
515 %cmp2 = icmp ule i8 %a, %b
516 %and = and i1 %cmp1, %cmp2
517 ret i1 %and
518}
519
520define i1 @sgt_ult(i8 %a, i8 %b) {
521; CHECK-LABEL: @sgt_ult(
522; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i8 %a, %b
523; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
524; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
525; CHECK-NEXT: ret i1 [[AND]]
526;
527 %cmp1 = icmp sgt i8 %a, %b
528 %cmp2 = icmp ult i8 %a, %b
529 %and = and i1 %cmp1, %cmp2
530 ret i1 %and
531}
532
533;
534
535define i1 @sle_eq(i8 %a, i8 %b) {
536; CHECK-LABEL: @sle_eq(
537; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
538; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
539; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
540; CHECK-NEXT: ret i1 [[AND]]
541;
542 %cmp1 = icmp sle i8 %a, %b
543 %cmp2 = icmp eq i8 %a, %b
544 %and = and i1 %cmp1, %cmp2
545 ret i1 %and
546}
547
548define i1 @sle_ne(i8 %a, i8 %b) {
549; CHECK-LABEL: @sle_ne(
550; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
551; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
552; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
553; CHECK-NEXT: ret i1 [[AND]]
554;
555 %cmp1 = icmp sle i8 %a, %b
556 %cmp2 = icmp ne i8 %a, %b
557 %and = and i1 %cmp1, %cmp2
558 ret i1 %and
559}
560
561define i1 @sle_sge(i8 %a, i8 %b) {
562; CHECK-LABEL: @sle_sge(
563; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
564; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
565; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
566; CHECK-NEXT: ret i1 [[AND]]
567;
568 %cmp1 = icmp sle i8 %a, %b
569 %cmp2 = icmp sge i8 %a, %b
570 %and = and i1 %cmp1, %cmp2
571 ret i1 %and
572}
573
574define i1 @sle_sgt(i8 %a, i8 %b) {
575; CHECK-LABEL: @sle_sgt(
576; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
577; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
578; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
579; CHECK-NEXT: ret i1 [[AND]]
580;
581 %cmp1 = icmp sle i8 %a, %b
582 %cmp2 = icmp sgt i8 %a, %b
583 %and = and i1 %cmp1, %cmp2
584 ret i1 %and
585}
586
587define i1 @sle_sle(i8 %a, i8 %b) {
588; CHECK-LABEL: @sle_sle(
589; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
590; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
591; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
592; CHECK-NEXT: ret i1 [[AND]]
593;
594 %cmp1 = icmp sle i8 %a, %b
595 %cmp2 = icmp sle i8 %a, %b
596 %and = and i1 %cmp1, %cmp2
597 ret i1 %and
598}
599
600define i1 @sle_slt(i8 %a, i8 %b) {
601; CHECK-LABEL: @sle_slt(
602; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
603; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
604; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
605; CHECK-NEXT: ret i1 [[AND]]
606;
607 %cmp1 = icmp sle i8 %a, %b
608 %cmp2 = icmp slt i8 %a, %b
609 %and = and i1 %cmp1, %cmp2
610 ret i1 %and
611}
612
613define i1 @sle_uge(i8 %a, i8 %b) {
614; CHECK-LABEL: @sle_uge(
615; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
616; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
617; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
618; CHECK-NEXT: ret i1 [[AND]]
619;
620 %cmp1 = icmp sle i8 %a, %b
621 %cmp2 = icmp uge i8 %a, %b
622 %and = and i1 %cmp1, %cmp2
623 ret i1 %and
624}
625
626define i1 @sle_ugt(i8 %a, i8 %b) {
627; CHECK-LABEL: @sle_ugt(
628; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
629; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
630; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
631; CHECK-NEXT: ret i1 [[AND]]
632;
633 %cmp1 = icmp sle i8 %a, %b
634 %cmp2 = icmp ugt i8 %a, %b
635 %and = and i1 %cmp1, %cmp2
636 ret i1 %and
637}
638
639define i1 @sle_ule(i8 %a, i8 %b) {
640; CHECK-LABEL: @sle_ule(
641; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
642; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
643; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
644; CHECK-NEXT: ret i1 [[AND]]
645;
646 %cmp1 = icmp sle i8 %a, %b
647 %cmp2 = icmp ule i8 %a, %b
648 %and = and i1 %cmp1, %cmp2
649 ret i1 %and
650}
651
652define i1 @sle_ult(i8 %a, i8 %b) {
653; CHECK-LABEL: @sle_ult(
654; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i8 %a, %b
655; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
656; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
657; CHECK-NEXT: ret i1 [[AND]]
658;
659 %cmp1 = icmp sle i8 %a, %b
660 %cmp2 = icmp ult i8 %a, %b
661 %and = and i1 %cmp1, %cmp2
662 ret i1 %and
663}
664
665;
666
667define i1 @slt_eq(i8 %a, i8 %b) {
668; CHECK-LABEL: @slt_eq(
669; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
670; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
671; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
672; CHECK-NEXT: ret i1 [[AND]]
673;
674 %cmp1 = icmp slt i8 %a, %b
675 %cmp2 = icmp eq i8 %a, %b
676 %and = and i1 %cmp1, %cmp2
677 ret i1 %and
678}
679
680define i1 @slt_ne(i8 %a, i8 %b) {
681; CHECK-LABEL: @slt_ne(
682; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
683; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
684; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
685; CHECK-NEXT: ret i1 [[AND]]
686;
687 %cmp1 = icmp slt i8 %a, %b
688 %cmp2 = icmp ne i8 %a, %b
689 %and = and i1 %cmp1, %cmp2
690 ret i1 %and
691}
692
693define i1 @slt_sge(i8 %a, i8 %b) {
694; CHECK-LABEL: @slt_sge(
695; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
696; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
697; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
698; CHECK-NEXT: ret i1 [[AND]]
699;
700 %cmp1 = icmp slt i8 %a, %b
701 %cmp2 = icmp sge i8 %a, %b
702 %and = and i1 %cmp1, %cmp2
703 ret i1 %and
704}
705
706define i1 @slt_sgt(i8 %a, i8 %b) {
707; CHECK-LABEL: @slt_sgt(
708; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
709; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
710; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
711; CHECK-NEXT: ret i1 [[AND]]
712;
713 %cmp1 = icmp slt i8 %a, %b
714 %cmp2 = icmp sgt i8 %a, %b
715 %and = and i1 %cmp1, %cmp2
716 ret i1 %and
717}
718
719define i1 @slt_sle(i8 %a, i8 %b) {
720; CHECK-LABEL: @slt_sle(
721; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
722; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
723; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
724; CHECK-NEXT: ret i1 [[AND]]
725;
726 %cmp1 = icmp slt i8 %a, %b
727 %cmp2 = icmp sle i8 %a, %b
728 %and = and i1 %cmp1, %cmp2
729 ret i1 %and
730}
731
732define i1 @slt_slt(i8 %a, i8 %b) {
733; CHECK-LABEL: @slt_slt(
734; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
735; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
736; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
737; CHECK-NEXT: ret i1 [[AND]]
738;
739 %cmp1 = icmp slt i8 %a, %b
740 %cmp2 = icmp slt i8 %a, %b
741 %and = and i1 %cmp1, %cmp2
742 ret i1 %and
743}
744
745define i1 @slt_uge(i8 %a, i8 %b) {
746; CHECK-LABEL: @slt_uge(
747; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
748; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
749; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
750; CHECK-NEXT: ret i1 [[AND]]
751;
752 %cmp1 = icmp slt i8 %a, %b
753 %cmp2 = icmp uge i8 %a, %b
754 %and = and i1 %cmp1, %cmp2
755 ret i1 %and
756}
757
758define i1 @slt_ugt(i8 %a, i8 %b) {
759; CHECK-LABEL: @slt_ugt(
760; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
761; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
762; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
763; CHECK-NEXT: ret i1 [[AND]]
764;
765 %cmp1 = icmp slt i8 %a, %b
766 %cmp2 = icmp ugt i8 %a, %b
767 %and = and i1 %cmp1, %cmp2
768 ret i1 %and
769}
770
771define i1 @slt_ule(i8 %a, i8 %b) {
772; CHECK-LABEL: @slt_ule(
773; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
774; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
775; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
776; CHECK-NEXT: ret i1 [[AND]]
777;
778 %cmp1 = icmp slt i8 %a, %b
779 %cmp2 = icmp ule i8 %a, %b
780 %and = and i1 %cmp1, %cmp2
781 ret i1 %and
782}
783
784define i1 @slt_ult(i8 %a, i8 %b) {
785; CHECK-LABEL: @slt_ult(
786; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 %a, %b
787; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
788; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
789; CHECK-NEXT: ret i1 [[AND]]
790;
791 %cmp1 = icmp slt i8 %a, %b
792 %cmp2 = icmp ult i8 %a, %b
793 %and = and i1 %cmp1, %cmp2
794 ret i1 %and
795}
796
797;
798
799define i1 @uge_eq(i8 %a, i8 %b) {
800; CHECK-LABEL: @uge_eq(
801; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
802; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
803; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
804; CHECK-NEXT: ret i1 [[AND]]
805;
806 %cmp1 = icmp uge i8 %a, %b
807 %cmp2 = icmp eq i8 %a, %b
808 %and = and i1 %cmp1, %cmp2
809 ret i1 %and
810}
811
812define i1 @uge_ne(i8 %a, i8 %b) {
813; CHECK-LABEL: @uge_ne(
814; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
815; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
816; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
817; CHECK-NEXT: ret i1 [[AND]]
818;
819 %cmp1 = icmp uge i8 %a, %b
820 %cmp2 = icmp ne i8 %a, %b
821 %and = and i1 %cmp1, %cmp2
822 ret i1 %and
823}
824
825define i1 @uge_sge(i8 %a, i8 %b) {
826; CHECK-LABEL: @uge_sge(
827; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
828; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
829; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
830; CHECK-NEXT: ret i1 [[AND]]
831;
832 %cmp1 = icmp uge i8 %a, %b
833 %cmp2 = icmp sge i8 %a, %b
834 %and = and i1 %cmp1, %cmp2
835 ret i1 %and
836}
837
838define i1 @uge_sgt(i8 %a, i8 %b) {
839; CHECK-LABEL: @uge_sgt(
840; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
841; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
842; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
843; CHECK-NEXT: ret i1 [[AND]]
844;
845 %cmp1 = icmp uge i8 %a, %b
846 %cmp2 = icmp sgt i8 %a, %b
847 %and = and i1 %cmp1, %cmp2
848 ret i1 %and
849}
850
851define i1 @uge_sle(i8 %a, i8 %b) {
852; CHECK-LABEL: @uge_sle(
853; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
854; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
855; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
856; CHECK-NEXT: ret i1 [[AND]]
857;
858 %cmp1 = icmp uge i8 %a, %b
859 %cmp2 = icmp sle i8 %a, %b
860 %and = and i1 %cmp1, %cmp2
861 ret i1 %and
862}
863
864define i1 @uge_slt(i8 %a, i8 %b) {
865; CHECK-LABEL: @uge_slt(
866; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
867; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
868; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
869; CHECK-NEXT: ret i1 [[AND]]
870;
871 %cmp1 = icmp uge i8 %a, %b
872 %cmp2 = icmp slt i8 %a, %b
873 %and = and i1 %cmp1, %cmp2
874 ret i1 %and
875}
876
877define i1 @uge_uge(i8 %a, i8 %b) {
878; CHECK-LABEL: @uge_uge(
879; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
880; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
881; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
882; CHECK-NEXT: ret i1 [[AND]]
883;
884 %cmp1 = icmp uge i8 %a, %b
885 %cmp2 = icmp uge i8 %a, %b
886 %and = and i1 %cmp1, %cmp2
887 ret i1 %and
888}
889
890define i1 @uge_ugt(i8 %a, i8 %b) {
891; CHECK-LABEL: @uge_ugt(
892; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
893; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
894; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
895; CHECK-NEXT: ret i1 [[AND]]
896;
897 %cmp1 = icmp uge i8 %a, %b
898 %cmp2 = icmp ugt i8 %a, %b
899 %and = and i1 %cmp1, %cmp2
900 ret i1 %and
901}
902
903define i1 @uge_ule(i8 %a, i8 %b) {
904; CHECK-LABEL: @uge_ule(
905; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
906; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
907; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
908; CHECK-NEXT: ret i1 [[AND]]
909;
910 %cmp1 = icmp uge i8 %a, %b
911 %cmp2 = icmp ule i8 %a, %b
912 %and = and i1 %cmp1, %cmp2
913 ret i1 %and
914}
915
916define i1 @uge_ult(i8 %a, i8 %b) {
917; CHECK-LABEL: @uge_ult(
918; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 %a, %b
919; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
920; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
921; CHECK-NEXT: ret i1 [[AND]]
922;
923 %cmp1 = icmp uge i8 %a, %b
924 %cmp2 = icmp ult i8 %a, %b
925 %and = and i1 %cmp1, %cmp2
926 ret i1 %and
927}
928
929;
930
931define i1 @ugt_eq(i8 %a, i8 %b) {
932; CHECK-LABEL: @ugt_eq(
933; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
934; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
935; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
936; CHECK-NEXT: ret i1 [[AND]]
937;
938 %cmp1 = icmp ugt i8 %a, %b
939 %cmp2 = icmp eq i8 %a, %b
940 %and = and i1 %cmp1, %cmp2
941 ret i1 %and
942}
943
944define i1 @ugt_ne(i8 %a, i8 %b) {
945; CHECK-LABEL: @ugt_ne(
946; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
947; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
948; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
949; CHECK-NEXT: ret i1 [[AND]]
950;
951 %cmp1 = icmp ugt i8 %a, %b
952 %cmp2 = icmp ne i8 %a, %b
953 %and = and i1 %cmp1, %cmp2
954 ret i1 %and
955}
956
957define i1 @ugt_sge(i8 %a, i8 %b) {
958; CHECK-LABEL: @ugt_sge(
959; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
960; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
961; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
962; CHECK-NEXT: ret i1 [[AND]]
963;
964 %cmp1 = icmp ugt i8 %a, %b
965 %cmp2 = icmp sge i8 %a, %b
966 %and = and i1 %cmp1, %cmp2
967 ret i1 %and
968}
969
970define i1 @ugt_sgt(i8 %a, i8 %b) {
971; CHECK-LABEL: @ugt_sgt(
972; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
973; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
974; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
975; CHECK-NEXT: ret i1 [[AND]]
976;
977 %cmp1 = icmp ugt i8 %a, %b
978 %cmp2 = icmp sgt i8 %a, %b
979 %and = and i1 %cmp1, %cmp2
980 ret i1 %and
981}
982
983define i1 @ugt_sle(i8 %a, i8 %b) {
984; CHECK-LABEL: @ugt_sle(
985; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
986; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
987; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
988; CHECK-NEXT: ret i1 [[AND]]
989;
990 %cmp1 = icmp ugt i8 %a, %b
991 %cmp2 = icmp sle i8 %a, %b
992 %and = and i1 %cmp1, %cmp2
993 ret i1 %and
994}
995
996define i1 @ugt_slt(i8 %a, i8 %b) {
997; CHECK-LABEL: @ugt_slt(
998; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
999; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
1000; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1001; CHECK-NEXT: ret i1 [[AND]]
1002;
1003 %cmp1 = icmp ugt i8 %a, %b
1004 %cmp2 = icmp slt i8 %a, %b
1005 %and = and i1 %cmp1, %cmp2
1006 ret i1 %and
1007}
1008
1009define i1 @ugt_uge(i8 %a, i8 %b) {
1010; CHECK-LABEL: @ugt_uge(
1011; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
1012; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
1013; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1014; CHECK-NEXT: ret i1 [[AND]]
1015;
1016 %cmp1 = icmp ugt i8 %a, %b
1017 %cmp2 = icmp uge i8 %a, %b
1018 %and = and i1 %cmp1, %cmp2
1019 ret i1 %and
1020}
1021
1022define i1 @ugt_ugt(i8 %a, i8 %b) {
1023; CHECK-LABEL: @ugt_ugt(
1024; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
1025; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
1026; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1027; CHECK-NEXT: ret i1 [[AND]]
1028;
1029 %cmp1 = icmp ugt i8 %a, %b
1030 %cmp2 = icmp ugt i8 %a, %b
1031 %and = and i1 %cmp1, %cmp2
1032 ret i1 %and
1033}
1034
1035define i1 @ugt_ule(i8 %a, i8 %b) {
1036; CHECK-LABEL: @ugt_ule(
1037; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
1038; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
1039; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1040; CHECK-NEXT: ret i1 [[AND]]
1041;
1042 %cmp1 = icmp ugt i8 %a, %b
1043 %cmp2 = icmp ule i8 %a, %b
1044 %and = and i1 %cmp1, %cmp2
1045 ret i1 %and
1046}
1047
1048define i1 @ugt_ult(i8 %a, i8 %b) {
1049; CHECK-LABEL: @ugt_ult(
1050; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 %a, %b
1051; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
1052; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1053; CHECK-NEXT: ret i1 [[AND]]
1054;
1055 %cmp1 = icmp ugt i8 %a, %b
1056 %cmp2 = icmp ult i8 %a, %b
1057 %and = and i1 %cmp1, %cmp2
1058 ret i1 %and
1059}
1060
1061;
1062
1063define i1 @ule_eq(i8 %a, i8 %b) {
1064; CHECK-LABEL: @ule_eq(
1065; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1066; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
1067; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1068; CHECK-NEXT: ret i1 [[AND]]
1069;
1070 %cmp1 = icmp ule i8 %a, %b
1071 %cmp2 = icmp eq i8 %a, %b
1072 %and = and i1 %cmp1, %cmp2
1073 ret i1 %and
1074}
1075
1076define i1 @ule_ne(i8 %a, i8 %b) {
1077; CHECK-LABEL: @ule_ne(
1078; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1079; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
1080; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1081; CHECK-NEXT: ret i1 [[AND]]
1082;
1083 %cmp1 = icmp ule i8 %a, %b
1084 %cmp2 = icmp ne i8 %a, %b
1085 %and = and i1 %cmp1, %cmp2
1086 ret i1 %and
1087}
1088
1089define i1 @ule_sge(i8 %a, i8 %b) {
1090; CHECK-LABEL: @ule_sge(
1091; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1092; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
1093; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1094; CHECK-NEXT: ret i1 [[AND]]
1095;
1096 %cmp1 = icmp ule i8 %a, %b
1097 %cmp2 = icmp sge i8 %a, %b
1098 %and = and i1 %cmp1, %cmp2
1099 ret i1 %and
1100}
1101
1102define i1 @ule_sgt(i8 %a, i8 %b) {
1103; CHECK-LABEL: @ule_sgt(
1104; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1105; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
1106; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1107; CHECK-NEXT: ret i1 [[AND]]
1108;
1109 %cmp1 = icmp ule i8 %a, %b
1110 %cmp2 = icmp sgt i8 %a, %b
1111 %and = and i1 %cmp1, %cmp2
1112 ret i1 %and
1113}
1114
1115define i1 @ule_sle(i8 %a, i8 %b) {
1116; CHECK-LABEL: @ule_sle(
1117; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1118; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
1119; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1120; CHECK-NEXT: ret i1 [[AND]]
1121;
1122 %cmp1 = icmp ule i8 %a, %b
1123 %cmp2 = icmp sle i8 %a, %b
1124 %and = and i1 %cmp1, %cmp2
1125 ret i1 %and
1126}
1127
1128define i1 @ule_slt(i8 %a, i8 %b) {
1129; CHECK-LABEL: @ule_slt(
1130; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1131; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
1132; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1133; CHECK-NEXT: ret i1 [[AND]]
1134;
1135 %cmp1 = icmp ule i8 %a, %b
1136 %cmp2 = icmp slt i8 %a, %b
1137 %and = and i1 %cmp1, %cmp2
1138 ret i1 %and
1139}
1140
1141define i1 @ule_uge(i8 %a, i8 %b) {
1142; CHECK-LABEL: @ule_uge(
1143; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1144; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
1145; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1146; CHECK-NEXT: ret i1 [[AND]]
1147;
1148 %cmp1 = icmp ule i8 %a, %b
1149 %cmp2 = icmp uge i8 %a, %b
1150 %and = and i1 %cmp1, %cmp2
1151 ret i1 %and
1152}
1153
1154define i1 @ule_ugt(i8 %a, i8 %b) {
1155; CHECK-LABEL: @ule_ugt(
1156; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1157; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
1158; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1159; CHECK-NEXT: ret i1 [[AND]]
1160;
1161 %cmp1 = icmp ule i8 %a, %b
1162 %cmp2 = icmp ugt i8 %a, %b
1163 %and = and i1 %cmp1, %cmp2
1164 ret i1 %and
1165}
1166
1167define i1 @ule_ule(i8 %a, i8 %b) {
1168; CHECK-LABEL: @ule_ule(
1169; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1170; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
1171; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1172; CHECK-NEXT: ret i1 [[AND]]
1173;
1174 %cmp1 = icmp ule i8 %a, %b
1175 %cmp2 = icmp ule i8 %a, %b
1176 %and = and i1 %cmp1, %cmp2
1177 ret i1 %and
1178}
1179
1180define i1 @ule_ult(i8 %a, i8 %b) {
1181; CHECK-LABEL: @ule_ult(
1182; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i8 %a, %b
1183; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
1184; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1185; CHECK-NEXT: ret i1 [[AND]]
1186;
1187 %cmp1 = icmp ule i8 %a, %b
1188 %cmp2 = icmp ult i8 %a, %b
1189 %and = and i1 %cmp1, %cmp2
1190 ret i1 %and
1191}
1192
1193;
1194
1195define i1 @ult_eq(i8 %a, i8 %b) {
1196; CHECK-LABEL: @ult_eq(
1197; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1198; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 %a, %b
1199; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1200; CHECK-NEXT: ret i1 [[AND]]
1201;
1202 %cmp1 = icmp ult i8 %a, %b
1203 %cmp2 = icmp eq i8 %a, %b
1204 %and = and i1 %cmp1, %cmp2
1205 ret i1 %and
1206}
1207
1208define i1 @ult_ne(i8 %a, i8 %b) {
1209; CHECK-LABEL: @ult_ne(
1210; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1211; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 %a, %b
1212; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1213; CHECK-NEXT: ret i1 [[AND]]
1214;
1215 %cmp1 = icmp ult i8 %a, %b
1216 %cmp2 = icmp ne i8 %a, %b
1217 %and = and i1 %cmp1, %cmp2
1218 ret i1 %and
1219}
1220
1221define i1 @ult_sge(i8 %a, i8 %b) {
1222; CHECK-LABEL: @ult_sge(
1223; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1224; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i8 %a, %b
1225; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1226; CHECK-NEXT: ret i1 [[AND]]
1227;
1228 %cmp1 = icmp ult i8 %a, %b
1229 %cmp2 = icmp sge i8 %a, %b
1230 %and = and i1 %cmp1, %cmp2
1231 ret i1 %and
1232}
1233
1234define i1 @ult_sgt(i8 %a, i8 %b) {
1235; CHECK-LABEL: @ult_sgt(
1236; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1237; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i8 %a, %b
1238; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1239; CHECK-NEXT: ret i1 [[AND]]
1240;
1241 %cmp1 = icmp ult i8 %a, %b
1242 %cmp2 = icmp sgt i8 %a, %b
1243 %and = and i1 %cmp1, %cmp2
1244 ret i1 %and
1245}
1246
1247define i1 @ult_sle(i8 %a, i8 %b) {
1248; CHECK-LABEL: @ult_sle(
1249; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1250; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i8 %a, %b
1251; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1252; CHECK-NEXT: ret i1 [[AND]]
1253;
1254 %cmp1 = icmp ult i8 %a, %b
1255 %cmp2 = icmp sle i8 %a, %b
1256 %and = and i1 %cmp1, %cmp2
1257 ret i1 %and
1258}
1259
1260define i1 @ult_slt(i8 %a, i8 %b) {
1261; CHECK-LABEL: @ult_slt(
1262; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1263; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 %a, %b
1264; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1265; CHECK-NEXT: ret i1 [[AND]]
1266;
1267 %cmp1 = icmp ult i8 %a, %b
1268 %cmp2 = icmp slt i8 %a, %b
1269 %and = and i1 %cmp1, %cmp2
1270 ret i1 %and
1271}
1272
1273define i1 @ult_uge(i8 %a, i8 %b) {
1274; CHECK-LABEL: @ult_uge(
1275; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1276; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i8 %a, %b
1277; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1278; CHECK-NEXT: ret i1 [[AND]]
1279;
1280 %cmp1 = icmp ult i8 %a, %b
1281 %cmp2 = icmp uge i8 %a, %b
1282 %and = and i1 %cmp1, %cmp2
1283 ret i1 %and
1284}
1285
1286define i1 @ult_ugt(i8 %a, i8 %b) {
1287; CHECK-LABEL: @ult_ugt(
1288; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1289; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 %a, %b
1290; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1291; CHECK-NEXT: ret i1 [[AND]]
1292;
1293 %cmp1 = icmp ult i8 %a, %b
1294 %cmp2 = icmp ugt i8 %a, %b
1295 %and = and i1 %cmp1, %cmp2
1296 ret i1 %and
1297}
1298
1299define i1 @ult_ule(i8 %a, i8 %b) {
1300; CHECK-LABEL: @ult_ule(
1301; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1302; CHECK-NEXT: [[CMP2:%.*]] = icmp ule i8 %a, %b
1303; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1304; CHECK-NEXT: ret i1 [[AND]]
1305;
1306 %cmp1 = icmp ult i8 %a, %b
1307 %cmp2 = icmp ule i8 %a, %b
1308 %and = and i1 %cmp1, %cmp2
1309 ret i1 %and
1310}
1311
1312define i1 @ult_ult(i8 %a, i8 %b) {
1313; CHECK-LABEL: @ult_ult(
1314; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i8 %a, %b
1315; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 %a, %b
1316; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP1]], [[CMP2]]
1317; CHECK-NEXT: ret i1 [[AND]]
1318;
1319 %cmp1 = icmp ult i8 %a, %b
1320 %cmp2 = icmp ult i8 %a, %b
1321 %and = and i1 %cmp1, %cmp2
1322 ret i1 %and
1323}
1324
1325; Check a couple of vector variants to make sure those work too.
1326
1327define <2 x i1> @ult_uge_vec(<2 x i8> %a, <2 x i8> %b) {
1328; CHECK-LABEL: @ult_uge_vec(
1329; CHECK-NEXT: [[CMP1:%.*]] = icmp ult <2 x i8> %a, %b
1330; CHECK-NEXT: [[CMP2:%.*]] = icmp uge <2 x i8> %a, %b
1331; CHECK-NEXT: [[AND:%.*]] = and <2 x i1> [[CMP1]], [[CMP2]]
1332; CHECK-NEXT: ret <2 x i1> [[AND]]
1333;
1334 %cmp1 = icmp ult <2 x i8> %a, %b
1335 %cmp2 = icmp uge <2 x i8> %a, %b
1336 %and = and <2 x i1> %cmp1, %cmp2
1337 ret <2 x i1> %and
1338}
1339
1340define <2 x i1> @ult_ule_vec(<2 x i8> %a, <2 x i8> %b) {
1341; CHECK-LABEL: @ult_ule_vec(
1342; CHECK-NEXT: [[CMP1:%.*]] = icmp ult <2 x i8> %a, %b
1343; CHECK-NEXT: [[CMP2:%.*]] = icmp ule <2 x i8> %a, %b
1344; CHECK-NEXT: [[AND:%.*]] = and <2 x i1> [[CMP1]], [[CMP2]]
1345; CHECK-NEXT: ret <2 x i1> [[AND]]
1346;
1347 %cmp1 = icmp ult <2 x i8> %a, %b
1348 %cmp2 = icmp ule <2 x i8> %a, %b
1349 %and = and <2 x i1> %cmp1, %cmp2
1350 ret <2 x i1> %and
1351}
1352