Lines Matching refs:i4
71 define <2 x i4> @or_not_commute_vec_undef(<2 x i4> %A) {
73 ; CHECK-NEXT: ret <2 x i4> <i4 -1, i4 -1>
75 %NotA = xor <2 x i4> %A, <i4 -1, i4 undef>
76 %B = or <2 x i4> %NotA, %A
77 ret <2 x i4> %B
353 define i4 @and_or_not_or_commute0(i4 %A, i4 %B) {
355 ; CHECK-NEXT: [[NOTA:%.*]] = xor i4 [[A:%.*]], -1
356 ; CHECK-NEXT: ret i4 [[NOTA]]
358 %nota = xor i4 %A, -1
359 %and = and i4 %nota, %B
360 %or = or i4 %A, %B
361 %notab = xor i4 %or, -1
362 %r = or i4 %and, %notab
363 ret i4 %r
392 define <2 x i4> @and_or_not_or_commute3(<2 x i4> %A, <2 x i4> %B) {
394 ; CHECK-NEXT: [[NOTA:%.*]] = xor <2 x i4> [[A:%.*]], <i4 -1, i4 -1>
395 ; CHECK-NEXT: ret <2 x i4> [[NOTA]]
397 %nota = xor <2 x i4> %A, <i4 -1, i4 -1>
398 %and = and <2 x i4> %B, %nota
399 %or = or <2 x i4> %B, %A
400 %notab = xor <2 x i4> %or, <i4 -1, i4 -1>
401 %r = or <2 x i4> %and, %notab
402 ret <2 x i4> %r
405 define i4 @and_or_not_or_commute4(i4 %A, i4 %B) {
407 ; CHECK-NEXT: [[NOTA:%.*]] = xor i4 [[A:%.*]], -1
408 ; CHECK-NEXT: ret i4 [[NOTA]]
410 %nota = xor i4 %A, -1
411 %and = and i4 %nota, %B
412 %or = or i4 %A, %B
413 %notab = xor i4 %or, -1
414 %r = or i4 %notab, %and
415 ret i4 %r
444 define <2 x i4> @and_or_not_or_commute7(<2 x i4> %A, <2 x i4> %B) {
446 ; CHECK-NEXT: [[NOTA:%.*]] = xor <2 x i4> [[A:%.*]], <i4 -1, i4 -1>
447 ; CHECK-NEXT: ret <2 x i4> [[NOTA]]
449 %nota = xor <2 x i4> %A, <i4 -1, i4 -1>
450 %and = and <2 x i4> %B, %nota
451 %or = or <2 x i4> %B, %A
452 %notab = xor <2 x i4> %or, <i4 -1, i4 -1>
453 %r = or <2 x i4> %notab, %and
454 ret <2 x i4> %r
459 define <2 x i4> @and_or_not_or_commute7_undef_elt(<2 x i4> %A, <2 x i4> %B) {
461 ; CHECK-NEXT: [[NOTA:%.*]] = xor <2 x i4> [[A:%.*]], <i4 undef, i4 -1>
462 ; CHECK-NEXT: [[AND:%.*]] = and <2 x i4> [[B:%.*]], [[NOTA]]
463 ; CHECK-NEXT: [[OR:%.*]] = or <2 x i4> [[B]], [[A]]
464 ; CHECK-NEXT: [[NOTAB:%.*]] = xor <2 x i4> [[OR]], <i4 -1, i4 -1>
465 ; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[NOTAB]], [[AND]]
466 ; CHECK-NEXT: ret <2 x i4> [[R]]
468 %nota = xor <2 x i4> %A, <i4 undef, i4 -1>
469 %and = and <2 x i4> %B, %nota
470 %or = or <2 x i4> %B, %A
471 %notab = xor <2 x i4> %or, <i4 -1, i4 -1>
472 %r = or <2 x i4> %notab, %and
473 ret <2 x i4> %r
504 define <4 x i4> @or_or_xor_commuted(<4 x i4> %A, <4 x i4> %B) {
506 ; CHECK-NEXT: [[I1:%.*]] = or <4 x i4> [[A:%.*]], [[B:%.*]]
507 ; CHECK-NEXT: ret <4 x i4> [[I1]]
509 %i1 = or <4 x i4> %A, %B
510 %i2 = xor <4 x i4> %A, %B
511 %i3 = or <4 x i4> %i2, %i1
512 ret <4 x i4> %i3
517 define i4 @or_or_xor_inner_or_outer_or_commuted(i4 %A, i4 %B) {
519 ; CHECK-NEXT: [[I1:%.*]] = or i4 [[B:%.*]], [[A:%.*]]
520 ; CHECK-NEXT: ret i4 [[I1]]
522 %i1 = or i4 %B, %A
523 %i2 = xor i4 %A, %B
524 %i3 = or i4 %i2, %i1
525 ret i4 %i3
627 define i4 @or_nxor_and_commute0(i4 %a, i4 %b) {
629 ; CHECK-NEXT: [[XOR:%.*]] = xor i4 [[A:%.*]], [[B:%.*]]
630 ; CHECK-NEXT: [[NOT:%.*]] = xor i4 [[XOR]], -1
631 ; CHECK-NEXT: ret i4 [[NOT]]
633 %and = and i4 %a, %b
634 %xor = xor i4 %a, %b
635 %not = xor i4 %xor, -1
636 %r = or i4 %and, %not
637 ret i4 %r
640 define <2 x i4> @or_nxor_and_commute1(<2 x i4> %a, <2 x i4> %b) {
642 ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i4> [[A:%.*]], [[B:%.*]]
643 ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i4> [[XOR]], <i4 -1, i4 -1>
644 ; CHECK-NEXT: ret <2 x i4> [[NOT]]
646 %and = and <2 x i4> %a, %b
647 %xor = xor <2 x i4> %a, %b
648 %not = xor <2 x i4> %xor, <i4 -1, i4 -1>
649 %r = or <2 x i4> %not, %and
650 ret <2 x i4> %r
666 define <2 x i4> @or_nxor_and_commute3(<2 x i4> %a, <2 x i4> %b) {
668 ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i4> [[A:%.*]], [[B:%.*]]
669 ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i4> [[XOR]], <i4 -1, i4 -1>
670 ; CHECK-NEXT: ret <2 x i4> [[NOT]]
672 %and = and <2 x i4> %b, %a
673 %xor = xor <2 x i4> %a, %b
674 %not = xor <2 x i4> %xor, <i4 -1, i4 -1>
675 %r = or <2 x i4> %not, %and
676 ret <2 x i4> %r
681 define i4 @or_nxor_and_wrong_val1(i4 %a, i4 %b, i4 %c) {
683 ; CHECK-NEXT: [[AND:%.*]] = and i4 [[A:%.*]], [[C:%.*]]
684 ; CHECK-NEXT: [[XOR:%.*]] = xor i4 [[A]], [[B:%.*]]
685 ; CHECK-NEXT: [[NOT:%.*]] = xor i4 [[XOR]], -1
686 ; CHECK-NEXT: [[R:%.*]] = or i4 [[AND]], [[NOT]]
687 ; CHECK-NEXT: ret i4 [[R]]
689 %and = and i4 %a, %c
690 %xor = xor i4 %a, %b
691 %not = xor i4 %xor, -1
692 %r = or i4 %and, %not
693 ret i4 %r
698 define i4 @or_nxor_and_wrong_val2(i4 %a, i4 %b, i4 %c) {
700 ; CHECK-NEXT: [[AND:%.*]] = and i4 [[C:%.*]], [[B:%.*]]
701 ; CHECK-NEXT: [[XOR:%.*]] = xor i4 [[A:%.*]], [[B]]
702 ; CHECK-NEXT: [[NOT:%.*]] = xor i4 [[XOR]], -1
703 ; CHECK-NEXT: [[R:%.*]] = or i4 [[AND]], [[NOT]]
704 ; CHECK-NEXT: ret i4 [[R]]
706 %and = and i4 %c, %b
707 %xor = xor i4 %a, %b
708 %not = xor i4 %xor, -1
709 %r = or i4 %and, %not
710 ret i4 %r
715 define <2 x i4> @or_nxor_and_undef_elt(<2 x i4> %a, <2 x i4> %b) {
717 ; CHECK-NEXT: [[AND:%.*]] = and <2 x i4> [[B:%.*]], [[A:%.*]]
718 ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i4> [[A]], [[B]]
719 ; CHECK-NEXT: [[NOT:%.*]] = xor <2 x i4> [[XOR]], <i4 -1, i4 undef>
720 ; CHECK-NEXT: [[R:%.*]] = or <2 x i4> [[NOT]], [[AND]]
721 ; CHECK-NEXT: ret <2 x i4> [[R]]
723 %and = and <2 x i4> %b, %a
724 %xor = xor <2 x i4> %a, %b
725 %not = xor <2 x i4> %xor, <i4 -1, i4 undef>
726 %r = or <2 x i4> %not, %and
727 ret <2 x i4> %r
732 define i4 @or_nxor_or_commute0(i4 %a, i4 %b) {
734 ; CHECK-NEXT: ret i4 -1
736 %or = or i4 %a, %b
737 %xor = xor i4 %a, %b
738 %not = xor i4 %xor, -1
739 %r = or i4 %not, %or
740 ret i4 %r
743 define <2 x i4> @or_nxor_or_commute1(<2 x i4> %a, <2 x i4> %b) {
745 ; CHECK-NEXT: ret <2 x i4> <i4 -1, i4 -1>
747 %or = or <2 x i4> %a, %b
748 %xor = xor <2 x i4> %a, %b
749 %not = xor <2 x i4> %xor, <i4 -1, i4 -1>
750 %r = or <2 x i4> %or, %not
751 ret <2 x i4> %r
765 define <2 x i4> @or_nxor_or_commute3(<2 x i4> %a, <2 x i4> %b) {
767 ; CHECK-NEXT: ret <2 x i4> <i4 -1, i4 -1>
769 %or = or <2 x i4> %b, %a
770 %xor = xor <2 x i4> %a, %b
771 %not = xor <2 x i4> %xor, <i4 -1, i4 -1>
772 %r = or <2 x i4> %or, %not
773 ret <2 x i4> %r
778 define i4 @or_nxor_or_wrong_val1(i4 %a, i4 %b, i4 %c) {
780 ; CHECK-NEXT: [[OR:%.*]] = or i4 [[A:%.*]], [[C:%.*]]
781 ; CHECK-NEXT: [[XOR:%.*]] = xor i4 [[A]], [[B:%.*]]
782 ; CHECK-NEXT: [[NOT:%.*]] = xor i4 [[XOR]], -1
783 ; CHECK-NEXT: [[R:%.*]] = or i4 [[NOT]], [[OR]]
784 ; CHECK-NEXT: ret i4 [[R]]
786 %or = or i4 %a, %c
787 %xor = xor i4 %a, %b
788 %not = xor i4 %xor, -1
789 %r = or i4 %not, %or
790 ret i4 %r
795 define i4 @or_nxor_or_wrong_val2(i4 %a, i4 %b, i4 %c) {
797 ; CHECK-NEXT: [[OR:%.*]] = or i4 [[C:%.*]], [[B:%.*]]
798 ; CHECK-NEXT: [[XOR:%.*]] = xor i4 [[A:%.*]], [[B]]
799 ; CHECK-NEXT: [[NOT:%.*]] = xor i4 [[XOR]], -1
800 ; CHECK-NEXT: [[R:%.*]] = or i4 [[NOT]], [[OR]]
801 ; CHECK-NEXT: ret i4 [[R]]
803 %or = or i4 %c, %b
804 %xor = xor i4 %a, %b
805 %not = xor i4 %xor, -1
806 %r = or i4 %not, %or
807 ret i4 %r
812 define <2 x i4> @or_nxor_or_undef_elt(<2 x i4> %a, <2 x i4> %b) {
814 ; CHECK-NEXT: ret <2 x i4> <i4 -1, i4 -1>
816 %or = or <2 x i4> %b, %a
817 %xor = xor <2 x i4> %a, %b
818 %not = xor <2 x i4> %xor, <i4 -1, i4 undef>
819 %r = or <2 x i4> %or, %not
820 ret <2 x i4> %r
825 define i4 @or_xor_not_op_or(i4 %a, i4 %b){
827 ; CHECK-NEXT: ret i4 -1
829 %xor = xor i4 %a, %b
830 %nota = xor i4 %a, -1
831 %or = or i4 %nota, %b
832 %r = or i4 %xor, %or
833 ret i4 %r
927 define <2 x i4> @or_xor_not_op_or_undef_elt(<2 x i4> %a, <2 x i4> %b) {
929 ; CHECK-NEXT: ret <2 x i4> <i4 -1, i4 -1>
931 %xor = xor <2 x i4> %a, %b
932 %nota = xor <2 x i4> %a, <i4 -1, i4 undef>
933 %or = or <2 x i4> %nota, %b
934 %r = or <2 x i4> %xor, %or
935 ret <2 x i4> %r
957 define i4 @or_nand_xor(i4 %x, i4 %y) {
959 ; CHECK-NEXT: [[AND:%.*]] = and i4 [[X:%.*]], [[Y:%.*]]
960 ; CHECK-NEXT: [[NAND:%.*]] = xor i4 [[AND]], -1
961 ; CHECK-NEXT: ret i4 [[NAND]]
963 %and = and i4 %x, %y
964 %xor = xor i4 %x, %y
965 %nand = xor i4 %and, -1
966 %or = or i4 %xor, %nand
967 ret i4 %or
970 define <2 x i4> @or_nand_xor_commute1(<2 x i4> %x, <2 x i4> %y) {
972 ; CHECK-NEXT: [[AND:%.*]] = and <2 x i4> [[Y:%.*]], [[X:%.*]]
973 ; CHECK-NEXT: [[NAND:%.*]] = xor <2 x i4> [[AND]], <i4 -1, i4 -1>
974 ; CHECK-NEXT: ret <2 x i4> [[NAND]]
976 %and = and <2 x i4> %y, %x
977 %xor = xor <2 x i4> %x, %y
978 %nand = xor <2 x i4> %and, <i4 -1, i4 -1>
979 %or = or <2 x i4> %xor, %nand
980 ret <2 x i4> %or
996 define i4 @or_nand_xor_commute3(i4 %x, i4 %y) {
998 ; CHECK-NEXT: [[AND:%.*]] = and i4 [[Y:%.*]], [[X:%.*]]
999 ; CHECK-NEXT: [[NAND:%.*]] = xor i4 [[AND]], -1
1000 ; CHECK-NEXT: ret i4 [[NAND]]
1002 %and = and i4 %y, %x
1003 %xor = xor i4 %x, %y
1004 %nand = xor i4 %and, -1
1005 %or = or i4 %nand, %xor
1006 ret i4 %or
1011 define i4 @or_nand_xor_wrong_val(i4 %x, i4 %y, i4 %z) {
1013 ; CHECK-NEXT: [[AND:%.*]] = and i4 [[X:%.*]], [[Y:%.*]]
1014 ; CHECK-NEXT: [[XOR:%.*]] = xor i4 [[X]], [[Z:%.*]]
1015 ; CHECK-NEXT: [[NAND:%.*]] = xor i4 [[AND]], -1
1016 ; CHECK-NEXT: [[OR:%.*]] = or i4 [[XOR]], [[NAND]]
1017 ; CHECK-NEXT: ret i4 [[OR]]
1019 %and = and i4 %x, %y
1020 %xor = xor i4 %x, %z
1021 %nand = xor i4 %and, -1
1022 %or = or i4 %xor, %nand
1023 ret i4 %or
1028 define <2 x i4> @or_nand_xor_undef_elt(<2 x i4> %x, <2 x i4> %y) {
1030 ; CHECK-NEXT: [[AND:%.*]] = and <2 x i4> [[Y:%.*]], [[X:%.*]]
1031 ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i4> [[X]], [[Y]]
1032 ; CHECK-NEXT: [[NAND:%.*]] = xor <2 x i4> [[AND]], <i4 undef, i4 -1>
1033 ; CHECK-NEXT: [[OR:%.*]] = or <2 x i4> [[XOR]], [[NAND]]
1034 ; CHECK-NEXT: ret <2 x i4> [[OR]]
1036 %and = and <2 x i4> %y, %x
1037 %xor = xor <2 x i4> %x, %y
1038 %nand = xor <2 x i4> %and, <i4 undef, i4 -1>
1039 %or = or <2 x i4> %xor, %nand
1040 ret <2 x i4> %or