Lines Matching +full:- +full:y
2 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
12 ; (X == MAX) && (X < Y) --> false
16 define i1 @slt_and_max(i8 %x, i8 %y) {
17 ; CHECK-LABEL: @slt_and_max(
18 ; CHECK-NEXT: ret i1 false
20 %cmp = icmp slt i8 %x, %y
26 define i1 @slt_and_max_logical(i8 %x, i8 %y) {
27 ; CHECK-LABEL: @slt_and_max_logical(
28 ; CHECK-NEXT: ret i1 false
30 %cmp = icmp slt i8 %x, %y
36 define <2 x i1> @slt_and_max_commute(<2 x i8> %x, <2 x i8> %y) {
37 ; CHECK-LABEL: @slt_and_max_commute(
38 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
40 %cmp = icmp slt <2 x i8> %x, %y
46 define i1 @slt_swap_and_max(i8 %x, i8 %y) {
47 ; CHECK-LABEL: @slt_swap_and_max(
48 ; CHECK-NEXT: ret i1 false
50 %cmp = icmp sgt i8 %y, %x
56 define i1 @slt_swap_and_max_logical(i8 %x, i8 %y) {
57 ; CHECK-LABEL: @slt_swap_and_max_logical(
58 ; CHECK-NEXT: ret i1 false
60 %cmp = icmp sgt i8 %y, %x
66 define i1 @slt_swap_and_max_commute(i8 %x, i8 %y) {
67 ; CHECK-LABEL: @slt_swap_and_max_commute(
68 ; CHECK-NEXT: ret i1 false
70 %cmp = icmp sgt i8 %y, %x
76 define i1 @slt_swap_and_max_commute_logical(i8 %x, i8 %y) {
77 ; CHECK-LABEL: @slt_swap_and_max_commute_logical(
78 ; CHECK-NEXT: ret i1 false
80 %cmp = icmp sgt i8 %y, %x
86 define i1 @ult_and_max(i8 %x, i8 %y) {
87 ; CHECK-LABEL: @ult_and_max(
88 ; CHECK-NEXT: ret i1 false
90 %cmp = icmp ult i8 %x, %y
96 define i1 @ult_and_max_logical(i8 %x, i8 %y) {
97 ; CHECK-LABEL: @ult_and_max_logical(
98 ; CHECK-NEXT: ret i1 false
100 %cmp = icmp ult i8 %x, %y
106 define i1 @ult_and_max_commute(i8 %x, i8 %y) {
107 ; CHECK-LABEL: @ult_and_max_commute(
108 ; CHECK-NEXT: ret i1 false
110 %cmp = icmp ult i8 %x, %y
116 define i1 @ult_and_max_commute_logical(i8 %x, i8 %y) {
117 ; CHECK-LABEL: @ult_and_max_commute_logical(
118 ; CHECK-NEXT: ret i1 false
120 %cmp = icmp ult i8 %x, %y
126 define i1 @ult_swap_and_max(i8 %x, i8 %y) {
127 ; CHECK-LABEL: @ult_swap_and_max(
128 ; CHECK-NEXT: ret i1 false
130 %cmp = icmp ugt i8 %y, %x
136 define i1 @ult_swap_and_max_logical(i8 %x, i8 %y) {
137 ; CHECK-LABEL: @ult_swap_and_max_logical(
138 ; CHECK-NEXT: ret i1 false
140 %cmp = icmp ugt i8 %y, %x
146 define i1 @ult_swap_and_max_commute(i8 %x, i8 %y) {
147 ; CHECK-LABEL: @ult_swap_and_max_commute(
148 ; CHECK-NEXT: ret i1 false
150 %cmp = icmp ugt i8 %y, %x
156 define i1 @ult_swap_and_max_commute_logical(i8 %x, i8 %y) {
157 ; CHECK-LABEL: @ult_swap_and_max_commute_logical(
158 ; CHECK-NEXT: ret i1 false
160 %cmp = icmp ugt i8 %y, %x
168 ; (X == MIN) && (X > Y) --> false
172 define i1 @sgt_and_min(i9 %x, i9 %y) {
173 ; CHECK-LABEL: @sgt_and_min(
174 ; CHECK-NEXT: ret i1 false
176 %cmp = icmp sgt i9 %x, %y
182 define i1 @sgt_and_min_logical(i9 %x, i9 %y) {
183 ; CHECK-LABEL: @sgt_and_min_logical(
184 ; CHECK-NEXT: ret i1 false
186 %cmp = icmp sgt i9 %x, %y
192 define i1 @sgt_and_min_commute(i8 %x, i8 %y) {
193 ; CHECK-LABEL: @sgt_and_min_commute(
194 ; CHECK-NEXT: ret i1 false
196 %cmp = icmp sgt i8 %x, %y
202 define i1 @sgt_and_min_commute_logical(i8 %x, i8 %y) {
203 ; CHECK-LABEL: @sgt_and_min_commute_logical(
204 ; CHECK-NEXT: ret i1 false
206 %cmp = icmp sgt i8 %x, %y
212 define i1 @sgt_swap_and_min(i8 %x, i8 %y) {
213 ; CHECK-LABEL: @sgt_swap_and_min(
214 ; CHECK-NEXT: ret i1 false
216 %cmp = icmp slt i8 %y, %x
222 define i1 @sgt_swap_and_min_logical(i8 %x, i8 %y) {
223 ; CHECK-LABEL: @sgt_swap_and_min_logical(
224 ; CHECK-NEXT: ret i1 false
226 %cmp = icmp slt i8 %y, %x
232 define i1 @sgt_swap_and_min_commute(i8 %x, i8 %y) {
233 ; CHECK-LABEL: @sgt_swap_and_min_commute(
234 ; CHECK-NEXT: ret i1 false
236 %cmp = icmp slt i8 %y, %x
242 define i1 @sgt_swap_and_min_commute_logical(i8 %x, i8 %y) {
243 ; CHECK-LABEL: @sgt_swap_and_min_commute_logical(
244 ; CHECK-NEXT: ret i1 false
246 %cmp = icmp slt i8 %y, %x
252 define i1 @ugt_and_min(i8 %x, i8 %y) {
253 ; CHECK-LABEL: @ugt_and_min(
254 ; CHECK-NEXT: ret i1 false
256 %cmp = icmp ugt i8 %x, %y
262 define i1 @ugt_and_min_logical(i8 %x, i8 %y) {
263 ; CHECK-LABEL: @ugt_and_min_logical(
264 ; CHECK-NEXT: ret i1 false
266 %cmp = icmp ugt i8 %x, %y
272 define i1 @ugt_and_min_commute(i8 %x, i8 %y) {
273 ; CHECK-LABEL: @ugt_and_min_commute(
274 ; CHECK-NEXT: ret i1 false
276 %cmp = icmp ugt i8 %x, %y
282 define i1 @ugt_and_min_commute_logical(i8 %x, i8 %y) {
283 ; CHECK-LABEL: @ugt_and_min_commute_logical(
284 ; CHECK-NEXT: ret i1 false
286 %cmp = icmp ugt i8 %x, %y
292 define i1 @ugt_swap_and_min(i8 %x, i8 %y) {
293 ; CHECK-LABEL: @ugt_swap_and_min(
294 ; CHECK-NEXT: ret i1 false
296 %cmp = icmp ult i8 %y, %x
302 define i1 @ugt_swap_and_min_logical(i8 %x, i8 %y) {
303 ; CHECK-LABEL: @ugt_swap_and_min_logical(
304 ; CHECK-NEXT: ret i1 false
306 %cmp = icmp ult i8 %y, %x
312 define i1 @ugt_swap_and_min_commute(i8 %x, i8 %y) {
313 ; CHECK-LABEL: @ugt_swap_and_min_commute(
314 ; CHECK-NEXT: ret i1 false
316 %cmp = icmp ult i8 %y, %x
322 define i1 @ugt_swap_and_min_commute_logical(i8 %x, i8 %y) {
323 ; CHECK-LABEL: @ugt_swap_and_min_commute_logical(
324 ; CHECK-NEXT: ret i1 false
326 %cmp = icmp ult i8 %y, %x
334 ; (X != MAX) || (X >= Y) --> true
338 define i1 @sge_or_not_max(i8 %x, i8 %y) {
339 ; CHECK-LABEL: @sge_or_not_max(
340 ; CHECK-NEXT: ret i1 true
342 %cmp = icmp sge i8 %x, %y
348 define i1 @sge_or_not_max_logical(i8 %x, i8 %y) {
349 ; CHECK-LABEL: @sge_or_not_max_logical(
350 ; CHECK-NEXT: ret i1 true
352 %cmp = icmp sge i8 %x, %y
358 define i1 @sge_or_not_max_commute(i8 %x, i8 %y) {
359 ; CHECK-LABEL: @sge_or_not_max_commute(
360 ; CHECK-NEXT: ret i1 true
362 %cmp = icmp sge i8 %x, %y
368 define i1 @sge_or_not_max_commute_logical(i8 %x, i8 %y) {
369 ; CHECK-LABEL: @sge_or_not_max_commute_logical(
370 ; CHECK-NEXT: ret i1 true
372 %cmp = icmp sge i8 %x, %y
378 define i1 @sge_swap_or_not_max(i8 %x, i8 %y) {
379 ; CHECK-LABEL: @sge_swap_or_not_max(
380 ; CHECK-NEXT: ret i1 true
382 %cmp = icmp sle i8 %y, %x
388 define i1 @sge_swap_or_not_max_logical(i8 %x, i8 %y) {
389 ; CHECK-LABEL: @sge_swap_or_not_max_logical(
390 ; CHECK-NEXT: ret i1 true
392 %cmp = icmp sle i8 %y, %x
398 define i1 @sge_swap_or_not_max_commute(i8 %x, i8 %y) {
399 ; CHECK-LABEL: @sge_swap_or_not_max_commute(
400 ; CHECK-NEXT: ret i1 true
402 %cmp = icmp sle i8 %y, %x
408 define i1 @sge_swap_or_not_max_commute_logical(i8 %x, i8 %y) {
409 ; CHECK-LABEL: @sge_swap_or_not_max_commute_logical(
410 ; CHECK-NEXT: ret i1 true
412 %cmp = icmp sle i8 %y, %x
418 define i1 @uge_or_not_max(i8 %x, i8 %y) {
419 ; CHECK-LABEL: @uge_or_not_max(
420 ; CHECK-NEXT: ret i1 true
422 %cmp = icmp uge i8 %x, %y
428 define i1 @uge_or_not_max_logical(i8 %x, i8 %y) {
429 ; CHECK-LABEL: @uge_or_not_max_logical(
430 ; CHECK-NEXT: ret i1 true
432 %cmp = icmp uge i8 %x, %y
438 define i1 @uge_or_not_max_commute(i8 %x, i8 %y) {
439 ; CHECK-LABEL: @uge_or_not_max_commute(
440 ; CHECK-NEXT: ret i1 true
442 %cmp = icmp uge i8 %x, %y
448 define i1 @uge_or_not_max_commute_logical(i8 %x, i8 %y) {
449 ; CHECK-LABEL: @uge_or_not_max_commute_logical(
450 ; CHECK-NEXT: ret i1 true
452 %cmp = icmp uge i8 %x, %y
458 define i1 @uge_swap_or_not_max(i8 %x, i8 %y) {
459 ; CHECK-LABEL: @uge_swap_or_not_max(
460 ; CHECK-NEXT: ret i1 true
462 %cmp = icmp ule i8 %y, %x
468 define i1 @uge_swap_or_not_max_logical(i8 %x, i8 %y) {
469 ; CHECK-LABEL: @uge_swap_or_not_max_logical(
470 ; CHECK-NEXT: ret i1 true
472 %cmp = icmp ule i8 %y, %x
478 define i1 @uge_swap_or_not_max_commute(i8 %x, i8 %y) {
479 ; CHECK-LABEL: @uge_swap_or_not_max_commute(
480 ; CHECK-NEXT: ret i1 true
482 %cmp = icmp ule i8 %y, %x
488 define i1 @uge_swap_or_not_max_commute_logical(i8 %x, i8 %y) {
489 ; CHECK-LABEL: @uge_swap_or_not_max_commute_logical(
490 ; CHECK-NEXT: ret i1 true
492 %cmp = icmp ule i8 %y, %x
500 ; (X != MIN) || (X <= Y) --> true
504 define i1 @sle_or_not_min(i8 %x, i8 %y) {
505 ; CHECK-LABEL: @sle_or_not_min(
506 ; CHECK-NEXT: ret i1 true
508 %cmp = icmp sle i8 %x, %y
514 define i1 @sle_or_not_min_logical(i8 %x, i8 %y) {
515 ; CHECK-LABEL: @sle_or_not_min_logical(
516 ; CHECK-NEXT: ret i1 true
518 %cmp = icmp sle i8 %x, %y
524 define i1 @sle_or_not_min_commute(i8 %x, i8 %y) {
525 ; CHECK-LABEL: @sle_or_not_min_commute(
526 ; CHECK-NEXT: ret i1 true
528 %cmp = icmp sle i8 %x, %y
534 define i1 @sle_or_not_min_commute_logical(i8 %x, i8 %y) {
535 ; CHECK-LABEL: @sle_or_not_min_commute_logical(
536 ; CHECK-NEXT: ret i1 true
538 %cmp = icmp sle i8 %x, %y
544 define i1 @sle_swap_or_not_min(i8 %x, i8 %y) {
545 ; CHECK-LABEL: @sle_swap_or_not_min(
546 ; CHECK-NEXT: ret i1 true
548 %cmp = icmp sge i8 %y, %x
554 define i1 @sle_swap_or_not_min_logical(i8 %x, i8 %y) {
555 ; CHECK-LABEL: @sle_swap_or_not_min_logical(
556 ; CHECK-NEXT: ret i1 true
558 %cmp = icmp sge i8 %y, %x
564 define i1 @sle_swap_or_not_min_commute(i8 %x, i8 %y) {
565 ; CHECK-LABEL: @sle_swap_or_not_min_commute(
566 ; CHECK-NEXT: ret i1 true
568 %cmp = icmp sge i8 %y, %x
574 define i1 @sle_swap_or_not_min_commute_logical(i8 %x, i8 %y) {
575 ; CHECK-LABEL: @sle_swap_or_not_min_commute_logical(
576 ; CHECK-NEXT: ret i1 true
578 %cmp = icmp sge i8 %y, %x
584 define i1 @ule_or_not_min(i427 %x, i427 %y) {
585 ; CHECK-LABEL: @ule_or_not_min(
586 ; CHECK-NEXT: ret i1 true
588 %cmp = icmp ule i427 %x, %y
594 define i1 @ule_or_not_min_logical(i427 %x, i427 %y) {
595 ; CHECK-LABEL: @ule_or_not_min_logical(
596 ; CHECK-NEXT: ret i1 true
598 %cmp = icmp ule i427 %x, %y
604 define i1 @ule_or_not_min_commute(i8 %x, i8 %y) {
605 ; CHECK-LABEL: @ule_or_not_min_commute(
606 ; CHECK-NEXT: ret i1 true
608 %cmp = icmp ule i8 %x, %y
614 define i1 @ule_or_not_min_commute_logical(i8 %x, i8 %y) {
615 ; CHECK-LABEL: @ule_or_not_min_commute_logical(
616 ; CHECK-NEXT: ret i1 true
618 %cmp = icmp ule i8 %x, %y
624 define i1 @ule_swap_or_not_min(i8 %x, i8 %y) {
625 ; CHECK-LABEL: @ule_swap_or_not_min(
626 ; CHECK-NEXT: ret i1 true
628 %cmp = icmp uge i8 %y, %x
634 define i1 @ule_swap_or_not_min_logical(i8 %x, i8 %y) {
635 ; CHECK-LABEL: @ule_swap_or_not_min_logical(
636 ; CHECK-NEXT: ret i1 true
638 %cmp = icmp uge i8 %y, %x
644 define i1 @ule_swap_or_not_min_commute(i8 %x, i8 %y) {
645 ; CHECK-LABEL: @ule_swap_or_not_min_commute(
646 ; CHECK-NEXT: ret i1 true
648 %cmp = icmp uge i8 %y, %x
654 define i1 @ule_swap_or_not_min_commute_logical(i8 %x, i8 %y) {
655 ; CHECK-LABEL: @ule_swap_or_not_min_commute_logical(
656 ; CHECK-NEXT: ret i1 true
658 %cmp = icmp uge i8 %y, %x
666 ; (X == MAX) && (X >= Y) --> X == MAX
670 define i1 @sge_and_max(i8 %x, i8 %y) {
671 ; CHECK-LABEL: @sge_and_max(
672 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
673 ; CHECK-NEXT: ret i1 [[CMPEQ]]
675 %cmp = icmp sge i8 %x, %y
681 define i1 @sge_and_max_logical(i8 %x, i8 %y) {
682 ; CHECK-LABEL: @sge_and_max_logical(
683 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
684 ; CHECK-NEXT: ret i1 [[CMPEQ]]
686 %cmp = icmp sge i8 %x, %y
692 define i1 @sge_and_max_logical_samesign(i8 %x, i8 %y) {
693 ; CHECK-LABEL: @sge_and_max_logical_samesign(
694 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
695 ; CHECK-NEXT: ret i1 [[CMPEQ]]
697 %cmp = icmp sge i8 %x, %y
703 define i1 @sge_and_max_commute(i8 %x, i8 %y) {
704 ; CHECK-LABEL: @sge_and_max_commute(
705 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
706 ; CHECK-NEXT: ret i1 [[CMPEQ]]
708 %cmp = icmp sge i8 %x, %y
714 define i1 @sge_and_max_commute_logical(i8 %x, i8 %y) {
715 ; CHECK-LABEL: @sge_and_max_commute_logical(
716 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
717 ; CHECK-NEXT: ret i1 [[CMPEQ]]
719 %cmp = icmp sge i8 %x, %y
725 define i1 @sge_swap_and_max(i8 %x, i8 %y) {
726 ; CHECK-LABEL: @sge_swap_and_max(
727 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
728 ; CHECK-NEXT: ret i1 [[CMPEQ]]
730 %cmp = icmp sle i8 %y, %x
736 define i1 @sge_swap_and_max_logical(i8 %x, i8 %y) {
737 ; CHECK-LABEL: @sge_swap_and_max_logical(
738 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
739 ; CHECK-NEXT: ret i1 [[CMPEQ]]
741 %cmp = icmp sle i8 %y, %x
747 define i1 @sge_swap_and_max_commute(i8 %x, i8 %y) {
748 ; CHECK-LABEL: @sge_swap_and_max_commute(
749 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
750 ; CHECK-NEXT: ret i1 [[CMPEQ]]
752 %cmp = icmp sle i8 %y, %x
758 define i1 @sge_swap_and_max_commute_logical(i8 %x, i8 %y) {
759 ; CHECK-LABEL: @sge_swap_and_max_commute_logical(
760 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
761 ; CHECK-NEXT: ret i1 [[CMPEQ]]
763 %cmp = icmp sle i8 %y, %x
769 define i1 @uge_and_max(i8 %x, i8 %y) {
770 ; CHECK-LABEL: @uge_and_max(
771 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
772 ; CHECK-NEXT: ret i1 [[CMPEQ]]
774 %cmp = icmp uge i8 %x, %y
780 define i1 @uge_and_max_logical(i8 %x, i8 %y) {
781 ; CHECK-LABEL: @uge_and_max_logical(
782 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
783 ; CHECK-NEXT: ret i1 [[CMPEQ]]
785 %cmp = icmp uge i8 %x, %y
791 define i1 @uge_and_max_commute(i8 %x, i8 %y) {
792 ; CHECK-LABEL: @uge_and_max_commute(
793 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
794 ; CHECK-NEXT: ret i1 [[CMPEQ]]
796 %cmp = icmp uge i8 %x, %y
802 define i1 @uge_and_max_commute_logical(i8 %x, i8 %y) {
803 ; CHECK-LABEL: @uge_and_max_commute_logical(
804 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
805 ; CHECK-NEXT: ret i1 [[CMPEQ]]
807 %cmp = icmp uge i8 %x, %y
813 define i1 @uge_swap_and_max(i8 %x, i8 %y) {
814 ; CHECK-LABEL: @uge_swap_and_max(
815 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
816 ; CHECK-NEXT: ret i1 [[CMPEQ]]
818 %cmp = icmp ule i8 %y, %x
824 define i1 @uge_swap_and_max_logical(i8 %x, i8 %y) {
825 ; CHECK-LABEL: @uge_swap_and_max_logical(
826 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
827 ; CHECK-NEXT: ret i1 [[CMPEQ]]
829 %cmp = icmp ule i8 %y, %x
835 define i1 @uge_swap_and_max_commute(i8 %x, i8 %y) {
836 ; CHECK-LABEL: @uge_swap_and_max_commute(
837 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
838 ; CHECK-NEXT: ret i1 [[CMPEQ]]
840 %cmp = icmp ule i8 %y, %x
846 define i1 @uge_swap_and_max_commute_logical(i8 %x, i8 %y) {
847 ; CHECK-LABEL: @uge_swap_and_max_commute_logical(
848 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
849 ; CHECK-NEXT: ret i1 [[CMPEQ]]
851 %cmp = icmp ule i8 %y, %x
859 ; (X == MIN) && (X <= Y) --> X == MIN
863 define i1 @sle_and_min(i8 %x, i8 %y) {
864 ; CHECK-LABEL: @sle_and_min(
865 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
866 ; CHECK-NEXT: ret i1 [[CMPEQ]]
868 %cmp = icmp sle i8 %x, %y
874 define i1 @sle_and_min_logical(i8 %x, i8 %y) {
875 ; CHECK-LABEL: @sle_and_min_logical(
876 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
877 ; CHECK-NEXT: ret i1 [[CMPEQ]]
879 %cmp = icmp sle i8 %x, %y
885 define i1 @sle_and_min_commute(i8 %x, i8 %y) {
886 ; CHECK-LABEL: @sle_and_min_commute(
887 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
888 ; CHECK-NEXT: ret i1 [[CMPEQ]]
890 %cmp = icmp sle i8 %x, %y
896 define i1 @sle_and_min_commute_logical(i8 %x, i8 %y) {
897 ; CHECK-LABEL: @sle_and_min_commute_logical(
898 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
899 ; CHECK-NEXT: ret i1 [[CMPEQ]]
901 %cmp = icmp sle i8 %x, %y
907 define i1 @sle_swap_and_min(i8 %x, i8 %y) {
908 ; CHECK-LABEL: @sle_swap_and_min(
909 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
910 ; CHECK-NEXT: ret i1 [[CMPEQ]]
912 %cmp = icmp sge i8 %y, %x
918 define i1 @sle_swap_and_min_logical(i8 %x, i8 %y) {
919 ; CHECK-LABEL: @sle_swap_and_min_logical(
920 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
921 ; CHECK-NEXT: ret i1 [[CMPEQ]]
923 %cmp = icmp sge i8 %y, %x
929 define i1 @sle_swap_and_min_commute(i8 %x, i8 %y) {
930 ; CHECK-LABEL: @sle_swap_and_min_commute(
931 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
932 ; CHECK-NEXT: ret i1 [[CMPEQ]]
934 %cmp = icmp sge i8 %y, %x
940 define i1 @sle_swap_and_min_commute_logical(i8 %x, i8 %y) {
941 ; CHECK-LABEL: @sle_swap_and_min_commute_logical(
942 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
943 ; CHECK-NEXT: ret i1 [[CMPEQ]]
945 %cmp = icmp sge i8 %y, %x
951 define i1 @ule_and_min(i8 %x, i8 %y) {
952 ; CHECK-LABEL: @ule_and_min(
953 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
954 ; CHECK-NEXT: ret i1 [[CMPEQ]]
956 %cmp = icmp ule i8 %x, %y
962 define i1 @ule_and_min_logical(i8 %x, i8 %y) {
963 ; CHECK-LABEL: @ule_and_min_logical(
964 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
965 ; CHECK-NEXT: ret i1 [[CMPEQ]]
967 %cmp = icmp ule i8 %x, %y
973 define i1 @ule_and_min_commute(i8 %x, i8 %y) {
974 ; CHECK-LABEL: @ule_and_min_commute(
975 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
976 ; CHECK-NEXT: ret i1 [[CMPEQ]]
978 %cmp = icmp ule i8 %x, %y
984 define i1 @ule_and_min_commute_logical(i8 %x, i8 %y) {
985 ; CHECK-LABEL: @ule_and_min_commute_logical(
986 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
987 ; CHECK-NEXT: ret i1 [[CMPEQ]]
989 %cmp = icmp ule i8 %x, %y
995 define i1 @ule_swap_and_min(i8 %x, i8 %y) {
996 ; CHECK-LABEL: @ule_swap_and_min(
997 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
998 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1000 %cmp = icmp uge i8 %y, %x
1006 define i1 @ule_swap_and_min_logical(i8 %x, i8 %y) {
1007 ; CHECK-LABEL: @ule_swap_and_min_logical(
1008 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
1009 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1011 %cmp = icmp uge i8 %y, %x
1017 define i1 @ule_swap_and_min_commute(i8 %x, i8 %y) {
1018 ; CHECK-LABEL: @ule_swap_and_min_commute(
1019 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
1020 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1022 %cmp = icmp uge i8 %y, %x
1028 define i1 @ule_swap_and_min_commute_logical(i8 %x, i8 %y) {
1029 ; CHECK-LABEL: @ule_swap_and_min_commute_logical(
1030 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
1031 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1033 %cmp = icmp uge i8 %y, %x
1041 ; (X == MAX) || (X >= Y) --> X >= Y
1045 define i1 @sge_or_max(i8 %x, i8 %y) {
1046 ; CHECK-LABEL: @sge_or_max(
1047 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
1048 ; CHECK-NEXT: ret i1 [[CMP]]
1050 %cmp = icmp sge i8 %x, %y
1056 define i1 @sge_or_max_logical(i8 %x, i8 %y) {
1057 ; CHECK-LABEL: @sge_or_max_logical(
1058 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
1059 ; CHECK-NEXT: ret i1 [[CMP]]
1061 %cmp = icmp sge i8 %x, %y
1067 define i1 @sge_or_max_commute(i8 %x, i8 %y) {
1068 ; CHECK-LABEL: @sge_or_max_commute(
1069 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
1070 ; CHECK-NEXT: ret i1 [[CMP]]
1072 %cmp = icmp sge i8 %x, %y
1078 define i1 @sge_or_max_commute_logical(i8 %x, i8 %y) {
1079 ; CHECK-LABEL: @sge_or_max_commute_logical(
1080 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
1081 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 127
1082 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1083 ; CHECK-NEXT: ret i1 [[R]]
1085 %cmp = icmp sge i8 %x, %y
1091 define i1 @sge_swap_or_max(i8 %x, i8 %y) {
1092 ; CHECK-LABEL: @sge_swap_or_max(
1093 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
1094 ; CHECK-NEXT: ret i1 [[CMP]]
1096 %cmp = icmp sle i8 %y, %x
1102 define i1 @sge_swap_or_max_logical(i8 %x, i8 %y) {
1103 ; CHECK-LABEL: @sge_swap_or_max_logical(
1104 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
1105 ; CHECK-NEXT: ret i1 [[CMP]]
1107 %cmp = icmp sle i8 %y, %x
1113 define i1 @sge_swap_or_max_commute(i8 %x, i8 %y) {
1114 ; CHECK-LABEL: @sge_swap_or_max_commute(
1115 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
1116 ; CHECK-NEXT: ret i1 [[CMP]]
1118 %cmp = icmp sle i8 %y, %x
1124 define i1 @sge_swap_or_max_commute_logical(i8 %x, i8 %y) {
1125 ; CHECK-LABEL: @sge_swap_or_max_commute_logical(
1126 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
1127 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 127
1128 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1129 ; CHECK-NEXT: ret i1 [[R]]
1131 %cmp = icmp sle i8 %y, %x
1137 define i1 @uge_or_max(i8 %x, i8 %y) {
1138 ; CHECK-LABEL: @uge_or_max(
1139 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
1140 ; CHECK-NEXT: ret i1 [[CMP]]
1142 %cmp = icmp uge i8 %x, %y
1148 define i1 @uge_or_max_logical(i8 %x, i8 %y) {
1149 ; CHECK-LABEL: @uge_or_max_logical(
1150 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
1151 ; CHECK-NEXT: ret i1 [[CMP]]
1153 %cmp = icmp uge i8 %x, %y
1159 define i1 @uge_or_max_commute(i8 %x, i8 %y) {
1160 ; CHECK-LABEL: @uge_or_max_commute(
1161 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
1162 ; CHECK-NEXT: ret i1 [[CMP]]
1164 %cmp = icmp uge i8 %x, %y
1170 define i1 @uge_or_max_commute_logical(i8 %x, i8 %y) {
1171 ; CHECK-LABEL: @uge_or_max_commute_logical(
1172 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
1173 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -1
1174 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1175 ; CHECK-NEXT: ret i1 [[R]]
1177 %cmp = icmp uge i8 %x, %y
1183 define i1 @uge_swap_or_max(i8 %x, i8 %y) {
1184 ; CHECK-LABEL: @uge_swap_or_max(
1185 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
1186 ; CHECK-NEXT: ret i1 [[CMP]]
1188 %cmp = icmp ule i8 %y, %x
1194 define i1 @uge_swap_or_max_logical(i8 %x, i8 %y) {
1195 ; CHECK-LABEL: @uge_swap_or_max_logical(
1196 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
1197 ; CHECK-NEXT: ret i1 [[CMP]]
1199 %cmp = icmp ule i8 %y, %x
1205 define i1 @uge_swap_or_max_commute(i8 %x, i8 %y) {
1206 ; CHECK-LABEL: @uge_swap_or_max_commute(
1207 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
1208 ; CHECK-NEXT: ret i1 [[CMP]]
1210 %cmp = icmp ule i8 %y, %x
1216 define i1 @uge_swap_or_max_commute_logical(i8 %x, i8 %y) {
1217 ; CHECK-LABEL: @uge_swap_or_max_commute_logical(
1218 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
1219 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -1
1220 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1221 ; CHECK-NEXT: ret i1 [[R]]
1223 %cmp = icmp ule i8 %y, %x
1231 ; (X == MIN) || (X <= Y) --> X <= Y
1235 define i1 @sle_or_min(i8 %x, i8 %y) {
1236 ; CHECK-LABEL: @sle_or_min(
1237 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
1238 ; CHECK-NEXT: ret i1 [[CMP]]
1240 %cmp = icmp sle i8 %x, %y
1246 define i1 @sle_or_min_logical(i8 %x, i8 %y) {
1247 ; CHECK-LABEL: @sle_or_min_logical(
1248 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
1249 ; CHECK-NEXT: ret i1 [[CMP]]
1251 %cmp = icmp sle i8 %x, %y
1257 define i1 @sle_or_min_commute(i8 %x, i8 %y) {
1258 ; CHECK-LABEL: @sle_or_min_commute(
1259 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
1260 ; CHECK-NEXT: ret i1 [[CMP]]
1262 %cmp = icmp sle i8 %x, %y
1268 define i1 @sle_or_min_commute_logical(i8 %x, i8 %y) {
1269 ; CHECK-LABEL: @sle_or_min_commute_logical(
1270 ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
1271 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -128
1272 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1273 ; CHECK-NEXT: ret i1 [[R]]
1275 %cmp = icmp sle i8 %x, %y
1281 define i1 @sle_swap_or_min(i8 %x, i8 %y) {
1282 ; CHECK-LABEL: @sle_swap_or_min(
1283 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
1284 ; CHECK-NEXT: ret i1 [[CMP]]
1286 %cmp = icmp sge i8 %y, %x
1292 define i1 @sle_swap_or_min_logical(i8 %x, i8 %y) {
1293 ; CHECK-LABEL: @sle_swap_or_min_logical(
1294 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
1295 ; CHECK-NEXT: ret i1 [[CMP]]
1297 %cmp = icmp sge i8 %y, %x
1303 define i1 @sle_swap_or_min_commute(i8 %x, i8 %y) {
1304 ; CHECK-LABEL: @sle_swap_or_min_commute(
1305 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
1306 ; CHECK-NEXT: ret i1 [[CMP]]
1308 %cmp = icmp sge i8 %y, %x
1314 define i1 @sle_swap_or_min_commute_logical(i8 %x, i8 %y) {
1315 ; CHECK-LABEL: @sle_swap_or_min_commute_logical(
1316 ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
1317 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], -128
1318 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1319 ; CHECK-NEXT: ret i1 [[R]]
1321 %cmp = icmp sge i8 %y, %x
1327 define i1 @ule_or_min(i8 %x, i8 %y) {
1328 ; CHECK-LABEL: @ule_or_min(
1329 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
1330 ; CHECK-NEXT: ret i1 [[CMP]]
1332 %cmp = icmp ule i8 %x, %y
1338 define i1 @ule_or_min_logical(i8 %x, i8 %y) {
1339 ; CHECK-LABEL: @ule_or_min_logical(
1340 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
1341 ; CHECK-NEXT: ret i1 [[CMP]]
1343 %cmp = icmp ule i8 %x, %y
1349 define i1 @ule_or_min_commute(i8 %x, i8 %y) {
1350 ; CHECK-LABEL: @ule_or_min_commute(
1351 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
1352 ; CHECK-NEXT: ret i1 [[CMP]]
1354 %cmp = icmp ule i8 %x, %y
1360 define i1 @ule_or_min_commute_logical(i8 %x, i8 %y) {
1361 ; CHECK-LABEL: @ule_or_min_commute_logical(
1362 ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
1363 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 0
1364 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1365 ; CHECK-NEXT: ret i1 [[R]]
1367 %cmp = icmp ule i8 %x, %y
1373 define i1 @ule_swap_or_min(i8 %x, i8 %y) {
1374 ; CHECK-LABEL: @ule_swap_or_min(
1375 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
1376 ; CHECK-NEXT: ret i1 [[CMP]]
1378 %cmp = icmp uge i8 %y, %x
1384 define i1 @ule_swap_or_min_logical(i8 %x, i8 %y) {
1385 ; CHECK-LABEL: @ule_swap_or_min_logical(
1386 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
1387 ; CHECK-NEXT: ret i1 [[CMP]]
1389 %cmp = icmp uge i8 %y, %x
1395 define i1 @ule_swap_or_min_commute(i8 %x, i8 %y) {
1396 ; CHECK-LABEL: @ule_swap_or_min_commute(
1397 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
1398 ; CHECK-NEXT: ret i1 [[CMP]]
1400 %cmp = icmp uge i8 %y, %x
1406 define i1 @ule_swap_or_min_commute_logical(i8 %x, i8 %y) {
1407 ; CHECK-LABEL: @ule_swap_or_min_commute_logical(
1408 ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
1409 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp eq i8 [[X]], 0
1410 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
1411 ; CHECK-NEXT: ret i1 [[R]]
1413 %cmp = icmp uge i8 %y, %x
1421 ; (X != MAX) && (X < Y) --> X < Y
1425 define i1 @slt_and_not_max(i8 %x, i8 %y) {
1426 ; CHECK-LABEL: @slt_and_not_max(
1427 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
1428 ; CHECK-NEXT: ret i1 [[CMP]]
1430 %cmp = icmp slt i8 %x, %y
1436 define i1 @slt_and_not_max_logical(i8 %x, i8 %y) {
1437 ; CHECK-LABEL: @slt_and_not_max_logical(
1438 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
1439 ; CHECK-NEXT: ret i1 [[CMP]]
1441 %cmp = icmp slt i8 %x, %y
1447 define i1 @slt_and_not_max_commute(i8 %x, i8 %y) {
1448 ; CHECK-LABEL: @slt_and_not_max_commute(
1449 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
1450 ; CHECK-NEXT: ret i1 [[CMP]]
1452 %cmp = icmp slt i8 %x, %y
1458 define i1 @slt_and_not_max_commute_logical(i8 %x, i8 %y) {
1459 ; CHECK-LABEL: @slt_and_not_max_commute_logical(
1460 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
1461 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 127
1462 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1463 ; CHECK-NEXT: ret i1 [[R]]
1465 %cmp = icmp slt i8 %x, %y
1471 define i1 @slt_swap_and_not_max(i8 %x, i8 %y) {
1472 ; CHECK-LABEL: @slt_swap_and_not_max(
1473 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
1474 ; CHECK-NEXT: ret i1 [[CMP]]
1476 %cmp = icmp sgt i8 %y, %x
1482 define i1 @slt_swap_and_not_max_logical(i8 %x, i8 %y) {
1483 ; CHECK-LABEL: @slt_swap_and_not_max_logical(
1484 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
1485 ; CHECK-NEXT: ret i1 [[CMP]]
1487 %cmp = icmp sgt i8 %y, %x
1493 define i1 @slt_swap_and_not_max_commute(i8 %x, i8 %y) {
1494 ; CHECK-LABEL: @slt_swap_and_not_max_commute(
1495 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
1496 ; CHECK-NEXT: ret i1 [[CMP]]
1498 %cmp = icmp sgt i8 %y, %x
1504 define i1 @slt_swap_and_not_max_commute_logical(i8 %x, i8 %y) {
1505 ; CHECK-LABEL: @slt_swap_and_not_max_commute_logical(
1506 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
1507 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 127
1508 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1509 ; CHECK-NEXT: ret i1 [[R]]
1511 %cmp = icmp sgt i8 %y, %x
1517 define i1 @ult_and_not_max(i8 %x, i8 %y) {
1518 ; CHECK-LABEL: @ult_and_not_max(
1519 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
1520 ; CHECK-NEXT: ret i1 [[CMP]]
1522 %cmp = icmp ult i8 %x, %y
1528 define i1 @ult_and_not_max_logical(i8 %x, i8 %y) {
1529 ; CHECK-LABEL: @ult_and_not_max_logical(
1530 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
1531 ; CHECK-NEXT: ret i1 [[CMP]]
1533 %cmp = icmp ult i8 %x, %y
1539 define i1 @ult_and_not_max_commute(i8 %x, i8 %y) {
1540 ; CHECK-LABEL: @ult_and_not_max_commute(
1541 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
1542 ; CHECK-NEXT: ret i1 [[CMP]]
1544 %cmp = icmp ult i8 %x, %y
1550 define i1 @ult_and_not_max_commute_logical(i8 %x, i8 %y) {
1551 ; CHECK-LABEL: @ult_and_not_max_commute_logical(
1552 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
1553 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -1
1554 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1555 ; CHECK-NEXT: ret i1 [[R]]
1557 %cmp = icmp ult i8 %x, %y
1563 define i1 @ult_swap_and_not_max(i8 %x, i8 %y) {
1564 ; CHECK-LABEL: @ult_swap_and_not_max(
1565 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
1566 ; CHECK-NEXT: ret i1 [[CMP]]
1568 %cmp = icmp ugt i8 %y, %x
1574 define i1 @ult_swap_and_not_max_logical(i8 %x, i8 %y) {
1575 ; CHECK-LABEL: @ult_swap_and_not_max_logical(
1576 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
1577 ; CHECK-NEXT: ret i1 [[CMP]]
1579 %cmp = icmp ugt i8 %y, %x
1585 define i1 @ult_swap_and_not_max_commute(i8 %x, i8 %y) {
1586 ; CHECK-LABEL: @ult_swap_and_not_max_commute(
1587 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
1588 ; CHECK-NEXT: ret i1 [[CMP]]
1590 %cmp = icmp ugt i8 %y, %x
1596 define i1 @ult_swap_and_not_max_commute_logical(i8 %x, i8 %y) {
1597 ; CHECK-LABEL: @ult_swap_and_not_max_commute_logical(
1598 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
1599 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -1
1600 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1601 ; CHECK-NEXT: ret i1 [[R]]
1603 %cmp = icmp ugt i8 %y, %x
1611 ; (X != MIN) && (X > Y) --> X > Y
1615 define i1 @sgt_and_not_min(i8 %x, i8 %y) {
1616 ; CHECK-LABEL: @sgt_and_not_min(
1617 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
1618 ; CHECK-NEXT: ret i1 [[CMP]]
1620 %cmp = icmp sgt i8 %x, %y
1626 define i1 @sgt_and_not_min_logical(i8 %x, i8 %y) {
1627 ; CHECK-LABEL: @sgt_and_not_min_logical(
1628 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
1629 ; CHECK-NEXT: ret i1 [[CMP]]
1631 %cmp = icmp sgt i8 %x, %y
1637 define i1 @sgt_and_not_min_commute(i8 %x, i8 %y) {
1638 ; CHECK-LABEL: @sgt_and_not_min_commute(
1639 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
1640 ; CHECK-NEXT: ret i1 [[CMP]]
1642 %cmp = icmp sgt i8 %x, %y
1648 define i1 @sgt_and_not_min_commute_logical(i8 %x, i8 %y) {
1649 ; CHECK-LABEL: @sgt_and_not_min_commute_logical(
1650 ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
1651 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -128
1652 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1653 ; CHECK-NEXT: ret i1 [[R]]
1655 %cmp = icmp sgt i8 %x, %y
1661 define i1 @sgt_swap_and_not_min(i8 %x, i8 %y) {
1662 ; CHECK-LABEL: @sgt_swap_and_not_min(
1663 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
1664 ; CHECK-NEXT: ret i1 [[CMP]]
1666 %cmp = icmp slt i8 %y, %x
1672 define i1 @sgt_swap_and_not_min_logical(i8 %x, i8 %y) {
1673 ; CHECK-LABEL: @sgt_swap_and_not_min_logical(
1674 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
1675 ; CHECK-NEXT: ret i1 [[CMP]]
1677 %cmp = icmp slt i8 %y, %x
1683 define i1 @sgt_swap_and_not_min_commute(i8 %x, i8 %y) {
1684 ; CHECK-LABEL: @sgt_swap_and_not_min_commute(
1685 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
1686 ; CHECK-NEXT: ret i1 [[CMP]]
1688 %cmp = icmp slt i8 %y, %x
1694 define i1 @sgt_swap_and_not_min_commute_logical(i8 %x, i8 %y) {
1695 ; CHECK-LABEL: @sgt_swap_and_not_min_commute_logical(
1696 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
1697 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], -128
1698 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1699 ; CHECK-NEXT: ret i1 [[R]]
1701 %cmp = icmp slt i8 %y, %x
1707 define i1 @ugt_and_not_min(i8 %x, i8 %y) {
1708 ; CHECK-LABEL: @ugt_and_not_min(
1709 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
1710 ; CHECK-NEXT: ret i1 [[CMP]]
1712 %cmp = icmp ugt i8 %x, %y
1718 define i1 @ugt_and_not_min_logical(i8 %x, i8 %y) {
1719 ; CHECK-LABEL: @ugt_and_not_min_logical(
1720 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
1721 ; CHECK-NEXT: ret i1 [[CMP]]
1723 %cmp = icmp ugt i8 %x, %y
1729 define i1 @ugt_and_not_min_commute(i8 %x, i8 %y) {
1730 ; CHECK-LABEL: @ugt_and_not_min_commute(
1731 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
1732 ; CHECK-NEXT: ret i1 [[CMP]]
1734 %cmp = icmp ugt i8 %x, %y
1740 define i1 @ugt_and_not_min_commute_logical(i8 %x, i8 %y) {
1741 ; CHECK-LABEL: @ugt_and_not_min_commute_logical(
1742 ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
1743 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 0
1744 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1745 ; CHECK-NEXT: ret i1 [[R]]
1747 %cmp = icmp ugt i8 %x, %y
1753 define i1 @ugt_swap_and_not_min(i8 %x, i8 %y) {
1754 ; CHECK-LABEL: @ugt_swap_and_not_min(
1755 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
1756 ; CHECK-NEXT: ret i1 [[CMP]]
1758 %cmp = icmp ult i8 %y, %x
1764 define i1 @ugt_swap_and_not_min_logical(i8 %x, i8 %y) {
1765 ; CHECK-LABEL: @ugt_swap_and_not_min_logical(
1766 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
1767 ; CHECK-NEXT: ret i1 [[CMP]]
1769 %cmp = icmp ult i8 %y, %x
1775 define i1 @ugt_swap_and_not_min_commute(i8 %x, i8 %y) {
1776 ; CHECK-LABEL: @ugt_swap_and_not_min_commute(
1777 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
1778 ; CHECK-NEXT: ret i1 [[CMP]]
1780 %cmp = icmp ult i8 %y, %x
1786 define i1 @ugt_swap_and_not_min_commute_logical(i8 %x, i8 %y) {
1787 ; CHECK-LABEL: @ugt_swap_and_not_min_commute_logical(
1788 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
1789 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X]], 0
1790 ; CHECK-NEXT: [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
1791 ; CHECK-NEXT: ret i1 [[R]]
1793 %cmp = icmp ult i8 %y, %x
1801 ; (X != MAX) || (X < Y) --> X != MAX
1805 define i1 @slt_or_not_max(i8 %x, i8 %y) {
1806 ; CHECK-LABEL: @slt_or_not_max(
1807 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1808 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1810 %cmp = icmp slt i8 %x, %y
1816 define i1 @slt_or_not_max_logical(i8 %x, i8 %y) {
1817 ; CHECK-LABEL: @slt_or_not_max_logical(
1818 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1819 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1821 %cmp = icmp slt i8 %x, %y
1827 define i1 @slt_or_not_max_commute(i8 %x, i8 %y) {
1828 ; CHECK-LABEL: @slt_or_not_max_commute(
1829 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1830 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1832 %cmp = icmp slt i8 %x, %y
1838 define i1 @slt_or_not_max_commute_logical(i8 %x, i8 %y) {
1839 ; CHECK-LABEL: @slt_or_not_max_commute_logical(
1840 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1841 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1843 %cmp = icmp slt i8 %x, %y
1849 define i1 @slt_swap_or_not_max(i8 %x, i8 %y) {
1850 ; CHECK-LABEL: @slt_swap_or_not_max(
1851 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1852 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1854 %cmp = icmp sgt i8 %y, %x
1860 define i1 @slt_swap_or_not_max_logical(i8 %x, i8 %y) {
1861 ; CHECK-LABEL: @slt_swap_or_not_max_logical(
1862 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1863 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1865 %cmp = icmp sgt i8 %y, %x
1871 define i1 @slt_swap_or_not_max_commute(i8 %x, i8 %y) {
1872 ; CHECK-LABEL: @slt_swap_or_not_max_commute(
1873 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1874 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1876 %cmp = icmp sgt i8 %y, %x
1882 define i1 @slt_swap_or_not_max_commute_logical(i8 %x, i8 %y) {
1883 ; CHECK-LABEL: @slt_swap_or_not_max_commute_logical(
1884 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
1885 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1887 %cmp = icmp sgt i8 %y, %x
1893 define i1 @ult_or_not_max(i8 %x, i8 %y) {
1894 ; CHECK-LABEL: @ult_or_not_max(
1895 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1896 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1898 %cmp = icmp ult i8 %x, %y
1904 define i1 @ult_or_not_max_logical(i8 %x, i8 %y) {
1905 ; CHECK-LABEL: @ult_or_not_max_logical(
1906 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1907 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1909 %cmp = icmp ult i8 %x, %y
1915 define i1 @ult_or_not_max_commute(i8 %x, i8 %y) {
1916 ; CHECK-LABEL: @ult_or_not_max_commute(
1917 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1918 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1920 %cmp = icmp ult i8 %x, %y
1926 define i1 @ult_or_not_max_commute_logical(i8 %x, i8 %y) {
1927 ; CHECK-LABEL: @ult_or_not_max_commute_logical(
1928 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1929 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1931 %cmp = icmp ult i8 %x, %y
1937 define i1 @ult_swap_or_not_max(i8 %x, i8 %y) {
1938 ; CHECK-LABEL: @ult_swap_or_not_max(
1939 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1940 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1942 %cmp = icmp ugt i8 %y, %x
1948 define i1 @ult_swap_or_not_max_logical(i8 %x, i8 %y) {
1949 ; CHECK-LABEL: @ult_swap_or_not_max_logical(
1950 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1951 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1953 %cmp = icmp ugt i8 %y, %x
1959 define i1 @ult_swap_or_not_max_commute(i8 %x, i8 %y) {
1960 ; CHECK-LABEL: @ult_swap_or_not_max_commute(
1961 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1962 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1964 %cmp = icmp ugt i8 %y, %x
1970 define i1 @ult_swap_or_not_max_commute_logical(i8 %x, i8 %y) {
1971 ; CHECK-LABEL: @ult_swap_or_not_max_commute_logical(
1972 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1973 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1975 %cmp = icmp ugt i8 %y, %x
1983 ; (X != MIN) || (X > Y) --> X != MIN
1987 define i1 @sgt_or_not_min(i8 %x, i8 %y) {
1988 ; CHECK-LABEL: @sgt_or_not_min(
1989 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
1990 ; CHECK-NEXT: ret i1 [[CMPEQ]]
1992 %cmp = icmp sgt i8 %x, %y
1998 define i1 @sgt_or_not_min_logical(i8 %x, i8 %y) {
1999 ; CHECK-LABEL: @sgt_or_not_min_logical(
2000 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2001 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2003 %cmp = icmp sgt i8 %x, %y
2009 define i1 @sgt_or_not_min_commute(i8 %x, i8 %y) {
2010 ; CHECK-LABEL: @sgt_or_not_min_commute(
2011 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2012 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2014 %cmp = icmp sgt i8 %x, %y
2020 define i1 @sgt_or_not_min_commute_logical(i8 %x, i8 %y) {
2021 ; CHECK-LABEL: @sgt_or_not_min_commute_logical(
2022 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2023 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2025 %cmp = icmp sgt i8 %x, %y
2031 define i1 @sgt_swap_or_not_min(i8 %x, i8 %y) {
2032 ; CHECK-LABEL: @sgt_swap_or_not_min(
2033 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2034 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2036 %cmp = icmp slt i8 %y, %x
2042 define i1 @sgt_swap_or_not_min_logical(i8 %x, i8 %y) {
2043 ; CHECK-LABEL: @sgt_swap_or_not_min_logical(
2044 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2045 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2047 %cmp = icmp slt i8 %y, %x
2053 define i1 @sgt_swap_or_not_min_commute(i8 %x, i8 %y) {
2054 ; CHECK-LABEL: @sgt_swap_or_not_min_commute(
2055 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2056 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2058 %cmp = icmp slt i8 %y, %x
2064 define i1 @sgt_swap_or_not_min_commute_logical(i8 %x, i8 %y) {
2065 ; CHECK-LABEL: @sgt_swap_or_not_min_commute_logical(
2066 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
2067 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2069 %cmp = icmp slt i8 %y, %x
2075 define i1 @ugt_or_not_min(i8 %x, i8 %y) {
2076 ; CHECK-LABEL: @ugt_or_not_min(
2077 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
2078 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2080 %cmp = icmp ugt i8 %x, %y
2086 define i1 @ugt_or_not_min_logical(i8 %x, i8 %y) {
2087 ; CHECK-LABEL: @ugt_or_not_min_logical(
2088 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
2089 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2091 %cmp = icmp ugt i8 %x, %y
2097 define i1 @ugt_or_not_min_commute(i8 %x, i8 %y) {
2098 ; CHECK-LABEL: @ugt_or_not_min_commute(
2099 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
2100 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2102 %cmp = icmp ugt i8 %x, %y
2108 define i1 @ugt_or_not_min_commute_logical(i8 %x, i8 %y) {
2109 ; CHECK-LABEL: @ugt_or_not_min_commute_logical(
2110 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
2111 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2113 %cmp = icmp ugt i8 %x, %y
2119 define i1 @ugt_swap_or_not_min(i8 %x, i8 %y) {
2120 ; CHECK-LABEL: @ugt_swap_or_not_min(
2121 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
2122 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2124 %cmp = icmp ult i8 %y, %x
2130 define i1 @ugt_swap_or_not_min_logical(i8 %x, i8 %y) {
2131 ; CHECK-LABEL: @ugt_swap_or_not_min_logical(
2132 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
2133 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2135 %cmp = icmp ult i8 %y, %x
2141 define i1 @ugt_swap_or_not_min_commute(i823 %x, i823 %y) {
2142 ; CHECK-LABEL: @ugt_swap_or_not_min_commute(
2143 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i823 [[X:%.*]], 0
2144 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2146 %cmp = icmp ult i823 %y, %x
2152 define i1 @ugt_swap_or_not_min_commute_logical(i823 %x, i823 %y) {
2153 ; CHECK-LABEL: @ugt_swap_or_not_min_commute_logical(
2154 ; CHECK-NEXT: [[CMPEQ:%.*]] = icmp ne i823 [[X:%.*]], 0
2155 ; CHECK-NEXT: ret i1 [[CMPEQ]]
2157 %cmp = icmp ult i823 %y, %x