[memprof] Move YAML support to MemProfYAML.h (NFC) (#119515)
[llvm-project.git] / llvm / test / Transforms / InstSimplify / or-icmps-same-ops.ll
blob440bc7497e0963cb6d4c66eb46bebcea6d6a6885
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
4 ; There are 10 * 10 combinations of icmp predicates that can be OR'd together.
5 ; The majority of these can be simplified to always true or just one of the icmps.
7 define i1 @eq_eq(i8 %a, i8 %b) {
8 ; CHECK-LABEL: @eq_eq(
9 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]
10 ; CHECK-NEXT:    ret i1 [[CMP2]]
12   %cmp1 = icmp eq i8 %a, %b
13   %cmp2 = icmp eq i8 %a, %b
14   %or = or i1 %cmp1, %cmp2
15   ret i1 %or
18 define i1 @eq_ne(i8 %a, i8 %b) {
19 ; CHECK-LABEL: @eq_ne(
20 ; CHECK-NEXT:    ret i1 true
22   %cmp1 = icmp eq i8 %a, %b
23   %cmp2 = icmp ne i8 %a, %b
24   %or = or i1 %cmp1, %cmp2
25   ret i1 %or
28 define i1 @eq_sge(i8 %a, i8 %b) {
29 ; CHECK-LABEL: @eq_sge(
30 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
31 ; CHECK-NEXT:    ret i1 [[CMP2]]
33   %cmp1 = icmp eq i8 %a, %b
34   %cmp2 = icmp sge i8 %a, %b
35   %or = or i1 %cmp1, %cmp2
36   ret i1 %or
39 define i1 @eq_sgt(i8 %a, i8 %b) {
40 ; CHECK-LABEL: @eq_sgt(
41 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]
42 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], [[B]]
43 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
44 ; CHECK-NEXT:    ret i1 [[OR]]
46   %cmp1 = icmp eq i8 %a, %b
47   %cmp2 = icmp sgt i8 %a, %b
48   %or = or i1 %cmp1, %cmp2
49   ret i1 %or
52 define i1 @eq_sle(i8 %a, i8 %b) {
53 ; CHECK-LABEL: @eq_sle(
54 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
55 ; CHECK-NEXT:    ret i1 [[CMP2]]
57   %cmp1 = icmp eq i8 %a, %b
58   %cmp2 = icmp sle i8 %a, %b
59   %or = or i1 %cmp1, %cmp2
60   ret i1 %or
63 define i1 @eq_slt(i8 %a, i8 %b) {
64 ; CHECK-LABEL: @eq_slt(
65 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]
66 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A]], [[B]]
67 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
68 ; CHECK-NEXT:    ret i1 [[OR]]
70   %cmp1 = icmp eq i8 %a, %b
71   %cmp2 = icmp slt i8 %a, %b
72   %or = or i1 %cmp1, %cmp2
73   ret i1 %or
76 define i1 @eq_uge(i8 %a, i8 %b) {
77 ; CHECK-LABEL: @eq_uge(
78 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
79 ; CHECK-NEXT:    ret i1 [[CMP2]]
81   %cmp1 = icmp eq i8 %a, %b
82   %cmp2 = icmp uge i8 %a, %b
83   %or = or i1 %cmp1, %cmp2
84   ret i1 %or
87 define i1 @eq_ugt(i8 %a, i8 %b) {
88 ; CHECK-LABEL: @eq_ugt(
89 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]
90 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ugt i8 [[A]], [[B]]
91 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
92 ; CHECK-NEXT:    ret i1 [[OR]]
94   %cmp1 = icmp eq i8 %a, %b
95   %cmp2 = icmp ugt i8 %a, %b
96   %or = or i1 %cmp1, %cmp2
97   ret i1 %or
100 define i1 @eq_ule(i8 %a, i8 %b) {
101 ; CHECK-LABEL: @eq_ule(
102 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
103 ; CHECK-NEXT:    ret i1 [[CMP2]]
105   %cmp1 = icmp eq i8 %a, %b
106   %cmp2 = icmp ule i8 %a, %b
107   %or = or i1 %cmp1, %cmp2
108   ret i1 %or
111 define i1 @eq_ult(i8 %a, i8 %b) {
112 ; CHECK-LABEL: @eq_ult(
113 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], [[B:%.*]]
114 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i8 [[A]], [[B]]
115 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
116 ; CHECK-NEXT:    ret i1 [[OR]]
118   %cmp1 = icmp eq i8 %a, %b
119   %cmp2 = icmp ult i8 %a, %b
120   %or = or i1 %cmp1, %cmp2
121   ret i1 %or
126 define i1 @ne_eq(i8 %a, i8 %b) {
127 ; CHECK-LABEL: @ne_eq(
128 ; CHECK-NEXT:    ret i1 true
130   %cmp1 = icmp ne i8 %a, %b
131   %cmp2 = icmp eq i8 %a, %b
132   %or = or i1 %cmp1, %cmp2
133   ret i1 %or
136 define i1 @ne_ne(i8 %a, i8 %b) {
137 ; CHECK-LABEL: @ne_ne(
138 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
139 ; CHECK-NEXT:    ret i1 [[CMP2]]
141   %cmp1 = icmp ne i8 %a, %b
142   %cmp2 = icmp ne i8 %a, %b
143   %or = or i1 %cmp1, %cmp2
144   ret i1 %or
147 define i1 @ne_sge(i8 %a, i8 %b) {
148 ; CHECK-LABEL: @ne_sge(
149 ; CHECK-NEXT:    ret i1 true
151   %cmp1 = icmp ne i8 %a, %b
152   %cmp2 = icmp sge i8 %a, %b
153   %or = or i1 %cmp1, %cmp2
154   ret i1 %or
157 define i1 @ne_sgt(i8 %a, i8 %b) {
158 ; CHECK-LABEL: @ne_sgt(
159 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
160 ; CHECK-NEXT:    ret i1 [[CMP1]]
162   %cmp1 = icmp ne i8 %a, %b
163   %cmp2 = icmp sgt i8 %a, %b
164   %or = or i1 %cmp1, %cmp2
165   ret i1 %or
168 define i1 @ne_sle(i8 %a, i8 %b) {
169 ; CHECK-LABEL: @ne_sle(
170 ; CHECK-NEXT:    ret i1 true
172   %cmp1 = icmp ne i8 %a, %b
173   %cmp2 = icmp sle i8 %a, %b
174   %or = or i1 %cmp1, %cmp2
175   ret i1 %or
178 define i1 @ne_slt(i8 %a, i8 %b) {
179 ; CHECK-LABEL: @ne_slt(
180 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
181 ; CHECK-NEXT:    ret i1 [[CMP1]]
183   %cmp1 = icmp ne i8 %a, %b
184   %cmp2 = icmp slt i8 %a, %b
185   %or = or i1 %cmp1, %cmp2
186   ret i1 %or
189 define i1 @ne_uge(i8 %a, i8 %b) {
190 ; CHECK-LABEL: @ne_uge(
191 ; CHECK-NEXT:    ret i1 true
193   %cmp1 = icmp ne i8 %a, %b
194   %cmp2 = icmp uge i8 %a, %b
195   %or = or i1 %cmp1, %cmp2
196   ret i1 %or
199 define i1 @ne_ugt(i8 %a, i8 %b) {
200 ; CHECK-LABEL: @ne_ugt(
201 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
202 ; CHECK-NEXT:    ret i1 [[CMP1]]
204   %cmp1 = icmp ne i8 %a, %b
205   %cmp2 = icmp ugt i8 %a, %b
206   %or = or i1 %cmp1, %cmp2
207   ret i1 %or
210 define i1 @ne_ule(i8 %a, i8 %b) {
211 ; CHECK-LABEL: @ne_ule(
212 ; CHECK-NEXT:    ret i1 true
214   %cmp1 = icmp ne i8 %a, %b
215   %cmp2 = icmp ule i8 %a, %b
216   %or = or i1 %cmp1, %cmp2
217   ret i1 %or
220 define i1 @ne_ult(i8 %a, i8 %b) {
221 ; CHECK-LABEL: @ne_ult(
222 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
223 ; CHECK-NEXT:    ret i1 [[CMP1]]
225   %cmp1 = icmp ne i8 %a, %b
226   %cmp2 = icmp ult i8 %a, %b
227   %or = or i1 %cmp1, %cmp2
228   ret i1 %or
233 define i1 @sge_eq(i8 %a, i8 %b) {
234 ; CHECK-LABEL: @sge_eq(
235 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
236 ; CHECK-NEXT:    ret i1 [[CMP1]]
238   %cmp1 = icmp sge i8 %a, %b
239   %cmp2 = icmp eq i8 %a, %b
240   %or = or i1 %cmp1, %cmp2
241   ret i1 %or
244 define i1 @sge_ne(i8 %a, i8 %b) {
245 ; CHECK-LABEL: @sge_ne(
246 ; CHECK-NEXT:    ret i1 true
248   %cmp1 = icmp sge i8 %a, %b
249   %cmp2 = icmp ne i8 %a, %b
250   %or = or i1 %cmp1, %cmp2
251   ret i1 %or
254 define i1 @sge_sge(i8 %a, i8 %b) {
255 ; CHECK-LABEL: @sge_sge(
256 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
257 ; CHECK-NEXT:    ret i1 [[CMP2]]
259   %cmp1 = icmp sge i8 %a, %b
260   %cmp2 = icmp sge i8 %a, %b
261   %or = or i1 %cmp1, %cmp2
262   ret i1 %or
265 define i1 @sge_sgt(i8 %a, i8 %b) {
266 ; CHECK-LABEL: @sge_sgt(
267 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
268 ; CHECK-NEXT:    ret i1 [[CMP1]]
270   %cmp1 = icmp sge i8 %a, %b
271   %cmp2 = icmp sgt i8 %a, %b
272   %or = or i1 %cmp1, %cmp2
273   ret i1 %or
276 define i1 @sge_sle(i8 %a, i8 %b) {
277 ; CHECK-LABEL: @sge_sle(
278 ; CHECK-NEXT:    ret i1 true
280   %cmp1 = icmp sge i8 %a, %b
281   %cmp2 = icmp sle i8 %a, %b
282   %or = or i1 %cmp1, %cmp2
283   ret i1 %or
286 define i1 @sge_slt(i8 %a, i8 %b) {
287 ; CHECK-LABEL: @sge_slt(
288 ; CHECK-NEXT:    ret i1 true
290   %cmp1 = icmp sge i8 %a, %b
291   %cmp2 = icmp slt i8 %a, %b
292   %or = or i1 %cmp1, %cmp2
293   ret i1 %or
296 define i1 @sge_uge(i8 %a, i8 %b) {
297 ; CHECK-LABEL: @sge_uge(
298 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
299 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp uge i8 [[A]], [[B]]
300 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
301 ; CHECK-NEXT:    ret i1 [[OR]]
303   %cmp1 = icmp sge i8 %a, %b
304   %cmp2 = icmp uge i8 %a, %b
305   %or = or i1 %cmp1, %cmp2
306   ret i1 %or
309 define i1 @sge_ugt(i8 %a, i8 %b) {
310 ; CHECK-LABEL: @sge_ugt(
311 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
312 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ugt i8 [[A]], [[B]]
313 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
314 ; CHECK-NEXT:    ret i1 [[OR]]
316   %cmp1 = icmp sge i8 %a, %b
317   %cmp2 = icmp ugt i8 %a, %b
318   %or = or i1 %cmp1, %cmp2
319   ret i1 %or
322 define i1 @sge_ule(i8 %a, i8 %b) {
323 ; CHECK-LABEL: @sge_ule(
324 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
325 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8 [[A]], [[B]]
326 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
327 ; CHECK-NEXT:    ret i1 [[OR]]
329   %cmp1 = icmp sge i8 %a, %b
330   %cmp2 = icmp ule i8 %a, %b
331   %or = or i1 %cmp1, %cmp2
332   ret i1 %or
335 define i1 @sge_ult(i8 %a, i8 %b) {
336 ; CHECK-LABEL: @sge_ult(
337 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
338 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i8 [[A]], [[B]]
339 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
340 ; CHECK-NEXT:    ret i1 [[OR]]
342   %cmp1 = icmp sge i8 %a, %b
343   %cmp2 = icmp ult i8 %a, %b
344   %or = or i1 %cmp1, %cmp2
345   ret i1 %or
350 define i1 @sgt_eq(i8 %a, i8 %b) {
351 ; CHECK-LABEL: @sgt_eq(
352 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
353 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], [[B]]
354 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
355 ; CHECK-NEXT:    ret i1 [[OR]]
357   %cmp1 = icmp sgt i8 %a, %b
358   %cmp2 = icmp eq i8 %a, %b
359   %or = or i1 %cmp1, %cmp2
360   ret i1 %or
363 define i1 @sgt_ne(i8 %a, i8 %b) {
364 ; CHECK-LABEL: @sgt_ne(
365 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
366 ; CHECK-NEXT:    ret i1 [[CMP2]]
368   %cmp1 = icmp sgt i8 %a, %b
369   %cmp2 = icmp ne i8 %a, %b
370   %or = or i1 %cmp1, %cmp2
371   ret i1 %or
374 define i1 @sgt_sge(i8 %a, i8 %b) {
375 ; CHECK-LABEL: @sgt_sge(
376 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A:%.*]], [[B:%.*]]
377 ; CHECK-NEXT:    ret i1 [[CMP2]]
379   %cmp1 = icmp sgt i8 %a, %b
380   %cmp2 = icmp sge i8 %a, %b
381   %or = or i1 %cmp1, %cmp2
382   ret i1 %or
385 define i1 @sgt_sgt(i8 %a, i8 %b) {
386 ; CHECK-LABEL: @sgt_sgt(
387 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
388 ; CHECK-NEXT:    ret i1 [[CMP2]]
390   %cmp1 = icmp sgt i8 %a, %b
391   %cmp2 = icmp sgt i8 %a, %b
392   %or = or i1 %cmp1, %cmp2
393   ret i1 %or
396 define i1 @sgt_sle(i8 %a, i8 %b) {
397 ; CHECK-LABEL: @sgt_sle(
398 ; CHECK-NEXT:    ret i1 true
400   %cmp1 = icmp sgt i8 %a, %b
401   %cmp2 = icmp sle i8 %a, %b
402   %or = or i1 %cmp1, %cmp2
403   ret i1 %or
406 define i1 @sgt_slt(i8 %a, i8 %b) {
407 ; CHECK-LABEL: @sgt_slt(
408 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
409 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A]], [[B]]
410 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
411 ; CHECK-NEXT:    ret i1 [[OR]]
413   %cmp1 = icmp sgt i8 %a, %b
414   %cmp2 = icmp slt i8 %a, %b
415   %or = or i1 %cmp1, %cmp2
416   ret i1 %or
419 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
424 ; CHECK-NEXT:    ret i1 [[OR]]
426   %cmp1 = icmp sgt i8 %a, %b
427   %cmp2 = icmp uge i8 %a, %b
428   %or = or i1 %cmp1, %cmp2
429   ret i1 %or
432 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
437 ; CHECK-NEXT:    ret i1 [[OR]]
439   %cmp1 = icmp sgt i8 %a, %b
440   %cmp2 = icmp ugt i8 %a, %b
441   %or = or i1 %cmp1, %cmp2
442   ret i1 %or
445 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
450 ; CHECK-NEXT:    ret i1 [[OR]]
452   %cmp1 = icmp sgt i8 %a, %b
453   %cmp2 = icmp ule i8 %a, %b
454   %or = or i1 %cmp1, %cmp2
455   ret i1 %or
458 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
463 ; CHECK-NEXT:    ret i1 [[OR]]
465   %cmp1 = icmp sgt i8 %a, %b
466   %cmp2 = icmp ult i8 %a, %b
467   %or = or i1 %cmp1, %cmp2
468   ret i1 %or
473 define i1 @sle_eq(i8 %a, i8 %b) {
474 ; CHECK-LABEL: @sle_eq(
475 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
476 ; CHECK-NEXT:    ret i1 [[CMP1]]
478   %cmp1 = icmp sle i8 %a, %b
479   %cmp2 = icmp eq i8 %a, %b
480   %or = or i1 %cmp1, %cmp2
481   ret i1 %or
484 define i1 @sle_ne(i8 %a, i8 %b) {
485 ; CHECK-LABEL: @sle_ne(
486 ; CHECK-NEXT:    ret i1 true
488   %cmp1 = icmp sle i8 %a, %b
489   %cmp2 = icmp ne i8 %a, %b
490   %or = or i1 %cmp1, %cmp2
491   ret i1 %or
494 define i1 @sle_sge(i8 %a, i8 %b) {
495 ; CHECK-LABEL: @sle_sge(
496 ; CHECK-NEXT:    ret i1 true
498   %cmp1 = icmp sle i8 %a, %b
499   %cmp2 = icmp sge i8 %a, %b
500   %or = or i1 %cmp1, %cmp2
501   ret i1 %or
504 define i1 @sle_sgt(i8 %a, i8 %b) {
505 ; CHECK-LABEL: @sle_sgt(
506 ; CHECK-NEXT:    ret i1 true
508   %cmp1 = icmp sle i8 %a, %b
509   %cmp2 = icmp sgt i8 %a, %b
510   %or = or i1 %cmp1, %cmp2
511   ret i1 %or
514 define i1 @sle_sle(i8 %a, i8 %b) {
515 ; CHECK-LABEL: @sle_sle(
516 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
517 ; CHECK-NEXT:    ret i1 [[CMP2]]
519   %cmp1 = icmp sle i8 %a, %b
520   %cmp2 = icmp sle i8 %a, %b
521   %or = or i1 %cmp1, %cmp2
522   ret i1 %or
525 define i1 @sle_slt(i8 %a, i8 %b) {
526 ; CHECK-LABEL: @sle_slt(
527 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
528 ; CHECK-NEXT:    ret i1 [[CMP1]]
530   %cmp1 = icmp sle i8 %a, %b
531   %cmp2 = icmp slt i8 %a, %b
532   %or = or i1 %cmp1, %cmp2
533   ret i1 %or
536 define i1 @sle_uge(i8 %a, i8 %b) {
537 ; CHECK-LABEL: @sle_uge(
538 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
539 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp uge i8 [[A]], [[B]]
540 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
541 ; CHECK-NEXT:    ret i1 [[OR]]
543   %cmp1 = icmp sle i8 %a, %b
544   %cmp2 = icmp uge i8 %a, %b
545   %or = or i1 %cmp1, %cmp2
546   ret i1 %or
549 define i1 @sle_ugt(i8 %a, i8 %b) {
550 ; CHECK-LABEL: @sle_ugt(
551 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
552 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ugt i8 [[A]], [[B]]
553 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
554 ; CHECK-NEXT:    ret i1 [[OR]]
556   %cmp1 = icmp sle i8 %a, %b
557   %cmp2 = icmp ugt i8 %a, %b
558   %or = or i1 %cmp1, %cmp2
559   ret i1 %or
562 define i1 @sle_ule(i8 %a, i8 %b) {
563 ; CHECK-LABEL: @sle_ule(
564 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
565 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8 [[A]], [[B]]
566 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
567 ; CHECK-NEXT:    ret i1 [[OR]]
569   %cmp1 = icmp sle i8 %a, %b
570   %cmp2 = icmp ule i8 %a, %b
571   %or = or i1 %cmp1, %cmp2
572   ret i1 %or
575 define i1 @sle_ult(i8 %a, i8 %b) {
576 ; CHECK-LABEL: @sle_ult(
577 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
578 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i8 [[A]], [[B]]
579 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
580 ; CHECK-NEXT:    ret i1 [[OR]]
582   %cmp1 = icmp sle i8 %a, %b
583   %cmp2 = icmp ult i8 %a, %b
584   %or = or i1 %cmp1, %cmp2
585   ret i1 %or
590 define i1 @slt_eq(i8 %a, i8 %b) {
591 ; CHECK-LABEL: @slt_eq(
592 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i8 [[A:%.*]], [[B:%.*]]
593 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], [[B]]
594 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
595 ; CHECK-NEXT:    ret i1 [[OR]]
597   %cmp1 = icmp slt i8 %a, %b
598   %cmp2 = icmp eq i8 %a, %b
599   %or = or i1 %cmp1, %cmp2
600   ret i1 %or
603 define i1 @slt_ne(i8 %a, i8 %b) {
604 ; CHECK-LABEL: @slt_ne(
605 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
606 ; CHECK-NEXT:    ret i1 [[CMP2]]
608   %cmp1 = icmp slt i8 %a, %b
609   %cmp2 = icmp ne i8 %a, %b
610   %or = or i1 %cmp1, %cmp2
611   ret i1 %or
614 define i1 @slt_sge(i8 %a, i8 %b) {
615 ; CHECK-LABEL: @slt_sge(
616 ; CHECK-NEXT:    ret i1 true
618   %cmp1 = icmp slt i8 %a, %b
619   %cmp2 = icmp sge i8 %a, %b
620   %or = or i1 %cmp1, %cmp2
621   ret i1 %or
624 define i1 @slt_sgt(i8 %a, i8 %b) {
625 ; CHECK-LABEL: @slt_sgt(
626 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i8 [[A:%.*]], [[B:%.*]]
627 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], [[B]]
628 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
629 ; CHECK-NEXT:    ret i1 [[OR]]
631   %cmp1 = icmp slt i8 %a, %b
632   %cmp2 = icmp sgt i8 %a, %b
633   %or = or i1 %cmp1, %cmp2
634   ret i1 %or
637 define i1 @slt_sle(i8 %a, i8 %b) {
638 ; CHECK-LABEL: @slt_sle(
639 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A:%.*]], [[B:%.*]]
640 ; CHECK-NEXT:    ret i1 [[CMP2]]
642   %cmp1 = icmp slt i8 %a, %b
643   %cmp2 = icmp sle i8 %a, %b
644   %or = or i1 %cmp1, %cmp2
645   ret i1 %or
648 define i1 @slt_slt(i8 %a, i8 %b) {
649 ; CHECK-LABEL: @slt_slt(
650 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A:%.*]], [[B:%.*]]
651 ; CHECK-NEXT:    ret i1 [[CMP2]]
653   %cmp1 = icmp slt i8 %a, %b
654   %cmp2 = icmp slt i8 %a, %b
655   %or = or i1 %cmp1, %cmp2
656   ret i1 %or
659 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
664 ; CHECK-NEXT:    ret i1 [[OR]]
666   %cmp1 = icmp slt i8 %a, %b
667   %cmp2 = icmp uge i8 %a, %b
668   %or = or i1 %cmp1, %cmp2
669   ret i1 %or
672 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
677 ; CHECK-NEXT:    ret i1 [[OR]]
679   %cmp1 = icmp slt i8 %a, %b
680   %cmp2 = icmp ugt i8 %a, %b
681   %or = or i1 %cmp1, %cmp2
682   ret i1 %or
685 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
690 ; CHECK-NEXT:    ret i1 [[OR]]
692   %cmp1 = icmp slt i8 %a, %b
693   %cmp2 = icmp ule i8 %a, %b
694   %or = or i1 %cmp1, %cmp2
695   ret i1 %or
698 define 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:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
703 ; CHECK-NEXT:    ret i1 [[OR]]
705   %cmp1 = icmp slt i8 %a, %b
706   %cmp2 = icmp ult i8 %a, %b
707   %or = or i1 %cmp1, %cmp2
708   ret i1 %or
713 define i1 @uge_eq(i8 %a, i8 %b) {
714 ; CHECK-LABEL: @uge_eq(
715 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
716 ; CHECK-NEXT:    ret i1 [[CMP1]]
718   %cmp1 = icmp uge i8 %a, %b
719   %cmp2 = icmp eq i8 %a, %b
720   %or = or i1 %cmp1, %cmp2
721   ret i1 %or
724 define i1 @uge_ne(i8 %a, i8 %b) {
725 ; CHECK-LABEL: @uge_ne(
726 ; CHECK-NEXT:    ret i1 true
728   %cmp1 = icmp uge i8 %a, %b
729   %cmp2 = icmp ne i8 %a, %b
730   %or = or i1 %cmp1, %cmp2
731   ret i1 %or
734 define i1 @uge_sge(i8 %a, i8 %b) {
735 ; CHECK-LABEL: @uge_sge(
736 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
737 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A]], [[B]]
738 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
739 ; CHECK-NEXT:    ret i1 [[OR]]
741   %cmp1 = icmp uge i8 %a, %b
742   %cmp2 = icmp sge i8 %a, %b
743   %or = or i1 %cmp1, %cmp2
744   ret i1 %or
747 define i1 @uge_sgt(i8 %a, i8 %b) {
748 ; CHECK-LABEL: @uge_sgt(
749 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
750 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], [[B]]
751 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
752 ; CHECK-NEXT:    ret i1 [[OR]]
754   %cmp1 = icmp uge i8 %a, %b
755   %cmp2 = icmp sgt i8 %a, %b
756   %or = or i1 %cmp1, %cmp2
757   ret i1 %or
760 define i1 @uge_sle(i8 %a, i8 %b) {
761 ; CHECK-LABEL: @uge_sle(
762 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
763 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A]], [[B]]
764 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
765 ; CHECK-NEXT:    ret i1 [[OR]]
767   %cmp1 = icmp uge i8 %a, %b
768   %cmp2 = icmp sle i8 %a, %b
769   %or = or i1 %cmp1, %cmp2
770   ret i1 %or
773 define i1 @uge_slt(i8 %a, i8 %b) {
774 ; CHECK-LABEL: @uge_slt(
775 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
776 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A]], [[B]]
777 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
778 ; CHECK-NEXT:    ret i1 [[OR]]
780   %cmp1 = icmp uge i8 %a, %b
781   %cmp2 = icmp slt i8 %a, %b
782   %or = or i1 %cmp1, %cmp2
783   ret i1 %or
786 define i1 @uge_uge(i8 %a, i8 %b) {
787 ; CHECK-LABEL: @uge_uge(
788 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
789 ; CHECK-NEXT:    ret i1 [[CMP2]]
791   %cmp1 = icmp uge i8 %a, %b
792   %cmp2 = icmp uge i8 %a, %b
793   %or = or i1 %cmp1, %cmp2
794   ret i1 %or
797 define i1 @uge_ugt(i8 %a, i8 %b) {
798 ; CHECK-LABEL: @uge_ugt(
799 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
800 ; CHECK-NEXT:    ret i1 [[CMP1]]
802   %cmp1 = icmp uge i8 %a, %b
803   %cmp2 = icmp ugt i8 %a, %b
804   %or = or i1 %cmp1, %cmp2
805   ret i1 %or
808 define i1 @uge_ule(i8 %a, i8 %b) {
809 ; CHECK-LABEL: @uge_ule(
810 ; CHECK-NEXT:    ret i1 true
812   %cmp1 = icmp uge i8 %a, %b
813   %cmp2 = icmp ule i8 %a, %b
814   %or = or i1 %cmp1, %cmp2
815   ret i1 %or
818 define i1 @uge_ult(i8 %a, i8 %b) {
819 ; CHECK-LABEL: @uge_ult(
820 ; CHECK-NEXT:    ret i1 true
822   %cmp1 = icmp uge i8 %a, %b
823   %cmp2 = icmp ult i8 %a, %b
824   %or = or i1 %cmp1, %cmp2
825   ret i1 %or
830 define i1 @ugt_eq(i8 %a, i8 %b) {
831 ; CHECK-LABEL: @ugt_eq(
832 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
833 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], [[B]]
834 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
835 ; CHECK-NEXT:    ret i1 [[OR]]
837   %cmp1 = icmp ugt i8 %a, %b
838   %cmp2 = icmp eq i8 %a, %b
839   %or = or i1 %cmp1, %cmp2
840   ret i1 %or
843 define i1 @ugt_ne(i8 %a, i8 %b) {
844 ; CHECK-LABEL: @ugt_ne(
845 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
846 ; CHECK-NEXT:    ret i1 [[CMP2]]
848   %cmp1 = icmp ugt i8 %a, %b
849   %cmp2 = icmp ne i8 %a, %b
850   %or = or i1 %cmp1, %cmp2
851   ret i1 %or
854 define i1 @ugt_sge(i8 %a, i8 %b) {
855 ; CHECK-LABEL: @ugt_sge(
856 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
857 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A]], [[B]]
858 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
859 ; CHECK-NEXT:    ret i1 [[OR]]
861   %cmp1 = icmp ugt i8 %a, %b
862   %cmp2 = icmp sge i8 %a, %b
863   %or = or i1 %cmp1, %cmp2
864   ret i1 %or
867 define i1 @ugt_sgt(i8 %a, i8 %b) {
868 ; CHECK-LABEL: @ugt_sgt(
869 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
870 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], [[B]]
871 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
872 ; CHECK-NEXT:    ret i1 [[OR]]
874   %cmp1 = icmp ugt i8 %a, %b
875   %cmp2 = icmp sgt i8 %a, %b
876   %or = or i1 %cmp1, %cmp2
877   ret i1 %or
880 define i1 @ugt_sle(i8 %a, i8 %b) {
881 ; CHECK-LABEL: @ugt_sle(
882 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
883 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A]], [[B]]
884 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
885 ; CHECK-NEXT:    ret i1 [[OR]]
887   %cmp1 = icmp ugt i8 %a, %b
888   %cmp2 = icmp sle i8 %a, %b
889   %or = or i1 %cmp1, %cmp2
890   ret i1 %or
893 define i1 @ugt_slt(i8 %a, i8 %b) {
894 ; CHECK-LABEL: @ugt_slt(
895 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
896 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A]], [[B]]
897 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
898 ; CHECK-NEXT:    ret i1 [[OR]]
900   %cmp1 = icmp ugt i8 %a, %b
901   %cmp2 = icmp slt i8 %a, %b
902   %or = or i1 %cmp1, %cmp2
903   ret i1 %or
906 define i1 @ugt_uge(i8 %a, i8 %b) {
907 ; CHECK-LABEL: @ugt_uge(
908 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp uge i8 [[A:%.*]], [[B:%.*]]
909 ; CHECK-NEXT:    ret i1 [[CMP2]]
911   %cmp1 = icmp ugt i8 %a, %b
912   %cmp2 = icmp uge i8 %a, %b
913   %or = or i1 %cmp1, %cmp2
914   ret i1 %or
917 define i1 @ugt_ugt(i8 %a, i8 %b) {
918 ; CHECK-LABEL: @ugt_ugt(
919 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
920 ; CHECK-NEXT:    ret i1 [[CMP2]]
922   %cmp1 = icmp ugt i8 %a, %b
923   %cmp2 = icmp ugt i8 %a, %b
924   %or = or i1 %cmp1, %cmp2
925   ret i1 %or
928 define i1 @ugt_ule(i8 %a, i8 %b) {
929 ; CHECK-LABEL: @ugt_ule(
930 ; CHECK-NEXT:    ret i1 true
932   %cmp1 = icmp ugt i8 %a, %b
933   %cmp2 = icmp ule i8 %a, %b
934   %or = or i1 %cmp1, %cmp2
935   ret i1 %or
938 define i1 @ugt_ult(i8 %a, i8 %b) {
939 ; CHECK-LABEL: @ugt_ult(
940 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ugt i8 [[A:%.*]], [[B:%.*]]
941 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i8 [[A]], [[B]]
942 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
943 ; CHECK-NEXT:    ret i1 [[OR]]
945   %cmp1 = icmp ugt i8 %a, %b
946   %cmp2 = icmp ult i8 %a, %b
947   %or = or i1 %cmp1, %cmp2
948   ret i1 %or
953 define i1 @ule_eq(i8 %a, i8 %b) {
954 ; CHECK-LABEL: @ule_eq(
955 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
956 ; CHECK-NEXT:    ret i1 [[CMP1]]
958   %cmp1 = icmp ule i8 %a, %b
959   %cmp2 = icmp eq i8 %a, %b
960   %or = or i1 %cmp1, %cmp2
961   ret i1 %or
964 define i1 @ule_ne(i8 %a, i8 %b) {
965 ; CHECK-LABEL: @ule_ne(
966 ; CHECK-NEXT:    ret i1 true
968   %cmp1 = icmp ule i8 %a, %b
969   %cmp2 = icmp ne i8 %a, %b
970   %or = or i1 %cmp1, %cmp2
971   ret i1 %or
974 define i1 @ule_sge(i8 %a, i8 %b) {
975 ; CHECK-LABEL: @ule_sge(
976 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
977 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A]], [[B]]
978 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
979 ; CHECK-NEXT:    ret i1 [[OR]]
981   %cmp1 = icmp ule i8 %a, %b
982   %cmp2 = icmp sge i8 %a, %b
983   %or = or i1 %cmp1, %cmp2
984   ret i1 %or
987 define i1 @ule_sgt(i8 %a, i8 %b) {
988 ; CHECK-LABEL: @ule_sgt(
989 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
990 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], [[B]]
991 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
992 ; CHECK-NEXT:    ret i1 [[OR]]
994   %cmp1 = icmp ule i8 %a, %b
995   %cmp2 = icmp sgt i8 %a, %b
996   %or = or i1 %cmp1, %cmp2
997   ret i1 %or
1000 define i1 @ule_sle(i8 %a, i8 %b) {
1001 ; CHECK-LABEL: @ule_sle(
1002 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
1003 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A]], [[B]]
1004 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1005 ; CHECK-NEXT:    ret i1 [[OR]]
1007   %cmp1 = icmp ule i8 %a, %b
1008   %cmp2 = icmp sle i8 %a, %b
1009   %or = or i1 %cmp1, %cmp2
1010   ret i1 %or
1013 define i1 @ule_slt(i8 %a, i8 %b) {
1014 ; CHECK-LABEL: @ule_slt(
1015 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
1016 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A]], [[B]]
1017 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1018 ; CHECK-NEXT:    ret i1 [[OR]]
1020   %cmp1 = icmp ule i8 %a, %b
1021   %cmp2 = icmp slt i8 %a, %b
1022   %or = or i1 %cmp1, %cmp2
1023   ret i1 %or
1026 define i1 @ule_uge(i8 %a, i8 %b) {
1027 ; CHECK-LABEL: @ule_uge(
1028 ; CHECK-NEXT:    ret i1 true
1030   %cmp1 = icmp ule i8 %a, %b
1031   %cmp2 = icmp uge i8 %a, %b
1032   %or = or i1 %cmp1, %cmp2
1033   ret i1 %or
1036 define i1 @ule_ugt(i8 %a, i8 %b) {
1037 ; CHECK-LABEL: @ule_ugt(
1038 ; CHECK-NEXT:    ret i1 true
1040   %cmp1 = icmp ule i8 %a, %b
1041   %cmp2 = icmp ugt i8 %a, %b
1042   %or = or i1 %cmp1, %cmp2
1043   ret i1 %or
1046 define i1 @ule_ule(i8 %a, i8 %b) {
1047 ; CHECK-LABEL: @ule_ule(
1048 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
1049 ; CHECK-NEXT:    ret i1 [[CMP2]]
1051   %cmp1 = icmp ule i8 %a, %b
1052   %cmp2 = icmp ule i8 %a, %b
1053   %or = or i1 %cmp1, %cmp2
1054   ret i1 %or
1057 define i1 @ule_ult(i8 %a, i8 %b) {
1058 ; CHECK-LABEL: @ule_ult(
1059 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
1060 ; CHECK-NEXT:    ret i1 [[CMP1]]
1062   %cmp1 = icmp ule i8 %a, %b
1063   %cmp2 = icmp ult i8 %a, %b
1064   %or = or i1 %cmp1, %cmp2
1065   ret i1 %or
1070 define i1 @ult_eq(i8 %a, i8 %b) {
1071 ; CHECK-LABEL: @ult_eq(
1072 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1073 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], [[B]]
1074 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1075 ; CHECK-NEXT:    ret i1 [[OR]]
1077   %cmp1 = icmp ult i8 %a, %b
1078   %cmp2 = icmp eq i8 %a, %b
1079   %or = or i1 %cmp1, %cmp2
1080   ret i1 %or
1083 define i1 @ult_ne(i8 %a, i8 %b) {
1084 ; CHECK-LABEL: @ult_ne(
1085 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
1086 ; CHECK-NEXT:    ret i1 [[CMP2]]
1088   %cmp1 = icmp ult i8 %a, %b
1089   %cmp2 = icmp ne i8 %a, %b
1090   %or = or i1 %cmp1, %cmp2
1091   ret i1 %or
1094 define i1 @ult_sge(i8 %a, i8 %b) {
1095 ; CHECK-LABEL: @ult_sge(
1096 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1097 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sge i8 [[A]], [[B]]
1098 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1099 ; CHECK-NEXT:    ret i1 [[OR]]
1101   %cmp1 = icmp ult i8 %a, %b
1102   %cmp2 = icmp sge i8 %a, %b
1103   %or = or i1 %cmp1, %cmp2
1104   ret i1 %or
1107 define i1 @ult_sgt(i8 %a, i8 %b) {
1108 ; CHECK-LABEL: @ult_sgt(
1109 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1110 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i8 [[A]], [[B]]
1111 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1112 ; CHECK-NEXT:    ret i1 [[OR]]
1114   %cmp1 = icmp ult i8 %a, %b
1115   %cmp2 = icmp sgt i8 %a, %b
1116   %or = or i1 %cmp1, %cmp2
1117   ret i1 %or
1120 define i1 @ult_sle(i8 %a, i8 %b) {
1121 ; CHECK-LABEL: @ult_sle(
1122 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1123 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp sle i8 [[A]], [[B]]
1124 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1125 ; CHECK-NEXT:    ret i1 [[OR]]
1127   %cmp1 = icmp ult i8 %a, %b
1128   %cmp2 = icmp sle i8 %a, %b
1129   %or = or i1 %cmp1, %cmp2
1130   ret i1 %or
1133 define i1 @ult_slt(i8 %a, i8 %b) {
1134 ; CHECK-LABEL: @ult_slt(
1135 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1136 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp slt i8 [[A]], [[B]]
1137 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1138 ; CHECK-NEXT:    ret i1 [[OR]]
1140   %cmp1 = icmp ult i8 %a, %b
1141   %cmp2 = icmp slt i8 %a, %b
1142   %or = or i1 %cmp1, %cmp2
1143   ret i1 %or
1146 define i1 @ult_uge(i8 %a, i8 %b) {
1147 ; CHECK-LABEL: @ult_uge(
1148 ; CHECK-NEXT:    ret i1 true
1150   %cmp1 = icmp ult i8 %a, %b
1151   %cmp2 = icmp uge i8 %a, %b
1152   %or = or i1 %cmp1, %cmp2
1153   ret i1 %or
1156 define i1 @ult_ugt(i8 %a, i8 %b) {
1157 ; CHECK-LABEL: @ult_ugt(
1158 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1159 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ugt i8 [[A]], [[B]]
1160 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[CMP1]], [[CMP2]]
1161 ; CHECK-NEXT:    ret i1 [[OR]]
1163   %cmp1 = icmp ult i8 %a, %b
1164   %cmp2 = icmp ugt i8 %a, %b
1165   %or = or i1 %cmp1, %cmp2
1166   ret i1 %or
1169 define i1 @ult_ule(i8 %a, i8 %b) {
1170 ; CHECK-LABEL: @ult_ule(
1171 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8 [[A:%.*]], [[B:%.*]]
1172 ; CHECK-NEXT:    ret i1 [[CMP2]]
1174   %cmp1 = icmp ult i8 %a, %b
1175   %cmp2 = icmp ule i8 %a, %b
1176   %or = or i1 %cmp1, %cmp2
1177   ret i1 %or
1180 define i1 @ult_ult(i8 %a, i8 %b) {
1181 ; CHECK-LABEL: @ult_ult(
1182 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i8 [[A:%.*]], [[B:%.*]]
1183 ; CHECK-NEXT:    ret i1 [[CMP2]]
1185   %cmp1 = icmp ult i8 %a, %b
1186   %cmp2 = icmp ult i8 %a, %b
1187   %or = or i1 %cmp1, %cmp2
1188   ret i1 %or
1191 ; Check a couple of vector variants to make sure those work too.
1193 define <2 x i1> @ult_uge_vec(<2 x i8> %a, <2 x i8> %b) {
1194 ; CHECK-LABEL: @ult_uge_vec(
1195 ; CHECK-NEXT:    ret <2 x i1> splat (i1 true)
1197   %cmp1 = icmp ult <2 x i8> %a, %b
1198   %cmp2 = icmp uge <2 x i8> %a, %b
1199   %or = or <2 x i1> %cmp1, %cmp2
1200   ret <2 x i1> %or
1203 define <2 x i1> @ult_ule_vec(<2 x i8> %a, <2 x i8> %b) {
1204 ; CHECK-LABEL: @ult_ule_vec(
1205 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule <2 x i8> [[A:%.*]], [[B:%.*]]
1206 ; CHECK-NEXT:    ret <2 x i1> [[CMP2]]
1208   %cmp1 = icmp ult <2 x i8> %a, %b
1209   %cmp2 = icmp ule <2 x i8> %a, %b
1210   %or = or <2 x i1> %cmp1, %cmp2
1211   ret <2 x i1> %or
1214 define i1 @ult_ne_swap(i8 %a, i8 %b) {
1215 ; CHECK-LABEL: @ult_ne_swap(
1216 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i8 [[B:%.*]], [[A:%.*]]
1217 ; CHECK-NEXT:    ret i1 [[CMP2]]
1219   %cmp1 = icmp ult i8 %a, %b
1220   %cmp2 = icmp ne i8 %b, %a
1221   %or = or i1 %cmp1, %cmp2
1222   ret i1 %or
1225 define i1 @ult_ule_swap(i8 %a, i8 %b) {
1226 ; CHECK-LABEL: @ult_ule_swap(
1227 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp uge i8 [[B:%.*]], [[A:%.*]]
1228 ; CHECK-NEXT:    ret i1 [[CMP2]]
1230   %cmp1 = icmp ult i8 %a, %b
1231   %cmp2 = icmp uge i8 %b, %a
1232   %or = or i1 %cmp1, %cmp2
1233   ret i1 %or
1236 define i1 @ule_ule_swap(i8 %a, i8 %b) {
1237 ; CHECK-LABEL: @ule_ule_swap(
1238 ; CHECK-NEXT:    ret i1 true
1240   %cmp1 = icmp ule i8 %a, %b
1241   %cmp2 = icmp ule i8 %b, %a
1242   %or = or i1 %cmp1, %cmp2
1243   ret i1 %or