@@ -554,10 +554,9 @@ define i8 @shl_add_and_fail_mismatch_shift(i8 %x, i8 %y) {
554
554
555
555
define i8 @and_ashr_not (i8 %x , i8 %y , i8 %shamt ) {
556
556
; CHECK-LABEL: @and_ashr_not(
557
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr i8 [[X:%.*]], [[SHAMT:%.*]]
558
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr i8 [[Y:%.*]], [[SHAMT]]
559
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor i8 [[Y_SHIFT]], -1
560
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X_SHIFT]], [[Y_SHIFT_NOT]]
557
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[Y:%.*]], -1
558
+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
559
+ ; CHECK-NEXT: [[AND:%.*]] = ashr i8 [[TMP2]], [[SHAMT:%.*]]
561
560
; CHECK-NEXT: ret i8 [[AND]]
562
561
;
563
562
%x.shift = ashr i8 %x , %shamt
@@ -569,10 +568,9 @@ define i8 @and_ashr_not(i8 %x, i8 %y, i8 %shamt) {
569
568
570
569
define i8 @and_ashr_not_commuted (i8 %x , i8 %y , i8 %shamt ) {
571
570
; CHECK-LABEL: @and_ashr_not_commuted(
572
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr i8 [[X:%.*]], [[SHAMT:%.*]]
573
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr i8 [[Y:%.*]], [[SHAMT]]
574
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor i8 [[Y_SHIFT]], -1
575
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X_SHIFT]], [[Y_SHIFT_NOT]]
571
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[Y:%.*]], -1
572
+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], [[X:%.*]]
573
+ ; CHECK-NEXT: [[AND:%.*]] = ashr i8 [[TMP2]], [[SHAMT:%.*]]
576
574
; CHECK-NEXT: ret i8 [[AND]]
577
575
;
578
576
%x.shift = ashr i8 %x , %shamt
@@ -635,10 +633,9 @@ define i8 @and_ashr_not_fail_invalid_xor_constant(i8 %x, i8 %y, i8 %shamt) {
635
633
636
634
define <4 x i8 > @and_ashr_not_vec (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
637
635
; CHECK-LABEL: @and_ashr_not_vec(
638
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr <4 x i8> [[X:%.*]], [[SHAMT:%.*]]
639
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr <4 x i8> [[Y:%.*]], [[SHAMT]]
640
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor <4 x i8> [[Y_SHIFT]], <i8 -1, i8 -1, i8 -1, i8 -1>
641
- ; CHECK-NEXT: [[AND:%.*]] = and <4 x i8> [[X_SHIFT]], [[Y_SHIFT_NOT]]
636
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i8> [[Y:%.*]], <i8 -1, i8 -1, i8 -1, i8 -1>
637
+ ; CHECK-NEXT: [[TMP2:%.*]] = and <4 x i8> [[TMP1]], [[X:%.*]]
638
+ ; CHECK-NEXT: [[AND:%.*]] = ashr <4 x i8> [[TMP2]], [[SHAMT:%.*]]
642
639
; CHECK-NEXT: ret <4 x i8> [[AND]]
643
640
;
644
641
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -650,10 +647,9 @@ define <4 x i8> @and_ashr_not_vec(<4 x i8> %x, <4 x i8> %y, <4 x i8> %shamt) {
650
647
651
648
define <4 x i8 > @and_ashr_not_vec_commuted (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
652
649
; CHECK-LABEL: @and_ashr_not_vec_commuted(
653
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr <4 x i8> [[X:%.*]], [[SHAMT:%.*]]
654
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr <4 x i8> [[Y:%.*]], [[SHAMT]]
655
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor <4 x i8> [[Y_SHIFT]], <i8 -1, i8 -1, i8 -1, i8 -1>
656
- ; CHECK-NEXT: [[AND:%.*]] = and <4 x i8> [[X_SHIFT]], [[Y_SHIFT_NOT]]
650
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i8> [[Y:%.*]], <i8 -1, i8 -1, i8 -1, i8 -1>
651
+ ; CHECK-NEXT: [[TMP2:%.*]] = and <4 x i8> [[TMP1]], [[X:%.*]]
652
+ ; CHECK-NEXT: [[AND:%.*]] = ashr <4 x i8> [[TMP2]], [[SHAMT:%.*]]
657
653
; CHECK-NEXT: ret <4 x i8> [[AND]]
658
654
;
659
655
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -665,10 +661,9 @@ define <4 x i8> @and_ashr_not_vec_commuted(<4 x i8> %x, <4 x i8> %y, <4 x i8> %s
665
661
666
662
define <4 x i8 > @and_ashr_not_vec_undef_1 (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
667
663
; CHECK-LABEL: @and_ashr_not_vec_undef_1(
668
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr <4 x i8> [[X:%.*]], [[SHAMT:%.*]]
669
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr <4 x i8> [[Y:%.*]], [[SHAMT]]
670
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor <4 x i8> [[Y_SHIFT]], <i8 -1, i8 undef, i8 undef, i8 undef>
671
- ; CHECK-NEXT: [[AND:%.*]] = and <4 x i8> [[X_SHIFT]], [[Y_SHIFT_NOT]]
664
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i8> [[Y:%.*]], <i8 -1, i8 -1, i8 -1, i8 -1>
665
+ ; CHECK-NEXT: [[TMP2:%.*]] = and <4 x i8> [[TMP1]], [[X:%.*]]
666
+ ; CHECK-NEXT: [[AND:%.*]] = ashr <4 x i8> [[TMP2]], [[SHAMT:%.*]]
672
667
; CHECK-NEXT: ret <4 x i8> [[AND]]
673
668
;
674
669
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -693,10 +688,9 @@ define <4 x i8> @and_ashr_not_vec_undef_2(<4 x i8> %x, <4 x i8> %y, <4 x i8> %sh
693
688
694
689
define i8 @or_ashr_not (i8 %x , i8 %y , i8 %shamt ) {
695
690
; CHECK-LABEL: @or_ashr_not(
696
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr i8 [[X:%.*]], [[SHAMT:%.*]]
697
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr i8 [[Y:%.*]], [[SHAMT]]
698
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor i8 [[Y_SHIFT]], -1
699
- ; CHECK-NEXT: [[OR:%.*]] = or i8 [[X_SHIFT]], [[Y_SHIFT_NOT]]
691
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[Y:%.*]], -1
692
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i8 [[TMP1]], [[X:%.*]]
693
+ ; CHECK-NEXT: [[OR:%.*]] = ashr i8 [[TMP2]], [[SHAMT:%.*]]
700
694
; CHECK-NEXT: ret i8 [[OR]]
701
695
;
702
696
%x.shift = ashr i8 %x , %shamt
@@ -708,10 +702,9 @@ define i8 @or_ashr_not(i8 %x, i8 %y, i8 %shamt) {
708
702
709
703
define i8 @or_ashr_not_commuted (i8 %x , i8 %y , i8 %shamt ) {
710
704
; CHECK-LABEL: @or_ashr_not_commuted(
711
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr i8 [[X:%.*]], [[SHAMT:%.*]]
712
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr i8 [[Y:%.*]], [[SHAMT]]
713
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor i8 [[Y_SHIFT]], -1
714
- ; CHECK-NEXT: [[OR:%.*]] = or i8 [[X_SHIFT]], [[Y_SHIFT_NOT]]
705
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[Y:%.*]], -1
706
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i8 [[TMP1]], [[X:%.*]]
707
+ ; CHECK-NEXT: [[OR:%.*]] = ashr i8 [[TMP2]], [[SHAMT:%.*]]
715
708
; CHECK-NEXT: ret i8 [[OR]]
716
709
;
717
710
%x.shift = ashr i8 %x , %shamt
@@ -774,10 +767,9 @@ define i8 @or_ashr_not_fail_invalid_xor_constant(i8 %x, i8 %y, i8 %shamt) {
774
767
775
768
define <4 x i8 > @or_ashr_not_vec (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
776
769
; CHECK-LABEL: @or_ashr_not_vec(
777
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr <4 x i8> [[X:%.*]], [[SHAMT:%.*]]
778
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr <4 x i8> [[Y:%.*]], [[SHAMT]]
779
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor <4 x i8> [[Y_SHIFT]], <i8 -1, i8 -1, i8 -1, i8 -1>
780
- ; CHECK-NEXT: [[OR:%.*]] = or <4 x i8> [[X_SHIFT]], [[Y_SHIFT_NOT]]
770
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i8> [[Y:%.*]], <i8 -1, i8 -1, i8 -1, i8 -1>
771
+ ; CHECK-NEXT: [[TMP2:%.*]] = or <4 x i8> [[TMP1]], [[X:%.*]]
772
+ ; CHECK-NEXT: [[OR:%.*]] = ashr <4 x i8> [[TMP2]], [[SHAMT:%.*]]
781
773
; CHECK-NEXT: ret <4 x i8> [[OR]]
782
774
;
783
775
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -789,10 +781,9 @@ define <4 x i8> @or_ashr_not_vec(<4 x i8> %x, <4 x i8> %y, <4 x i8> %shamt) {
789
781
790
782
define <4 x i8 > @or_ashr_not_vec_commuted (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
791
783
; CHECK-LABEL: @or_ashr_not_vec_commuted(
792
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr <4 x i8> [[X:%.*]], [[SHAMT:%.*]]
793
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr <4 x i8> [[Y:%.*]], [[SHAMT]]
794
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor <4 x i8> [[Y_SHIFT]], <i8 -1, i8 -1, i8 -1, i8 -1>
795
- ; CHECK-NEXT: [[OR:%.*]] = or <4 x i8> [[X_SHIFT]], [[Y_SHIFT_NOT]]
784
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i8> [[Y:%.*]], <i8 -1, i8 -1, i8 -1, i8 -1>
785
+ ; CHECK-NEXT: [[TMP2:%.*]] = or <4 x i8> [[TMP1]], [[X:%.*]]
786
+ ; CHECK-NEXT: [[OR:%.*]] = ashr <4 x i8> [[TMP2]], [[SHAMT:%.*]]
796
787
; CHECK-NEXT: ret <4 x i8> [[OR]]
797
788
;
798
789
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -804,10 +795,9 @@ define <4 x i8> @or_ashr_not_vec_commuted(<4 x i8> %x, <4 x i8> %y, <4 x i8> %sh
804
795
805
796
define <4 x i8 > @or_ashr_not_vec_undef_1 (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
806
797
; CHECK-LABEL: @or_ashr_not_vec_undef_1(
807
- ; CHECK-NEXT: [[X_SHIFT:%.*]] = ashr <4 x i8> [[X:%.*]], [[SHAMT:%.*]]
808
- ; CHECK-NEXT: [[Y_SHIFT:%.*]] = ashr <4 x i8> [[Y:%.*]], [[SHAMT]]
809
- ; CHECK-NEXT: [[Y_SHIFT_NOT:%.*]] = xor <4 x i8> [[Y_SHIFT]], <i8 -1, i8 undef, i8 undef, i8 undef>
810
- ; CHECK-NEXT: [[OR:%.*]] = or <4 x i8> [[X_SHIFT]], [[Y_SHIFT_NOT]]
798
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i8> [[Y:%.*]], <i8 -1, i8 -1, i8 -1, i8 -1>
799
+ ; CHECK-NEXT: [[TMP2:%.*]] = or <4 x i8> [[TMP1]], [[X:%.*]]
800
+ ; CHECK-NEXT: [[OR:%.*]] = ashr <4 x i8> [[TMP2]], [[SHAMT:%.*]]
811
801
; CHECK-NEXT: ret <4 x i8> [[OR]]
812
802
;
813
803
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -832,9 +822,9 @@ define <4 x i8> @or_ashr_not_vec_undef_2(<4 x i8> %x, <4 x i8> %y, <4 x i8> %sha
832
822
833
823
define i8 @xor_ashr_not (i8 %x , i8 %y , i8 %shamt ) {
834
824
; CHECK-LABEL: @xor_ashr_not(
835
- ; CHECK-NEXT: [[Y_SHIFT1 :%.*]] = xor i8 [[Y:%.*]], [[X:%.*]]
836
- ; CHECK-NEXT: [[TMP1 :%.*]] = ashr i8 [[Y_SHIFT1 ]], [[SHAMT:%.*]]
837
- ; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[TMP1 ]], -1
825
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[Y:%.*]], [[X:%.*]]
826
+ ; CHECK-NEXT: [[DOTNOT :%.*]] = ashr i8 [[TMP1 ]], [[SHAMT:%.*]]
827
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[DOTNOT ]], -1
838
828
; CHECK-NEXT: ret i8 [[XOR]]
839
829
;
840
830
%x.shift = ashr i8 %x , %shamt
@@ -846,9 +836,9 @@ define i8 @xor_ashr_not(i8 %x, i8 %y, i8 %shamt) {
846
836
847
837
define i8 @xor_ashr_not_commuted (i8 %x , i8 %y , i8 %shamt ) {
848
838
; CHECK-LABEL: @xor_ashr_not_commuted(
849
- ; CHECK-NEXT: [[Y_SHIFT1 :%.*]] = xor i8 [[Y:%.*]], [[X:%.*]]
850
- ; CHECK-NEXT: [[TMP1 :%.*]] = ashr i8 [[Y_SHIFT1 ]], [[SHAMT:%.*]]
851
- ; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[TMP1 ]], -1
839
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[Y:%.*]], [[X:%.*]]
840
+ ; CHECK-NEXT: [[DOTNOT :%.*]] = ashr i8 [[TMP1 ]], [[SHAMT:%.*]]
841
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[DOTNOT ]], -1
852
842
; CHECK-NEXT: ret i8 [[XOR]]
853
843
;
854
844
%x.shift = ashr i8 %x , %shamt
@@ -910,9 +900,9 @@ define i8 @xor_ashr_not_fail_invalid_xor_constant(i8 %x, i8 %y, i8 %shamt) {
910
900
911
901
define <4 x i8 > @xor_ashr_not_vec (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
912
902
; CHECK-LABEL: @xor_ashr_not_vec(
913
- ; CHECK-NEXT: [[Y_SHIFT1 :%.*]] = xor <4 x i8> [[Y:%.*]], [[X:%.*]]
914
- ; CHECK-NEXT: [[TMP1 :%.*]] = ashr <4 x i8> [[Y_SHIFT1 ]], [[SHAMT:%.*]]
915
- ; CHECK-NEXT: [[XOR:%.*]] = xor <4 x i8> [[TMP1 ]], <i8 -1, i8 -1, i8 -1, i8 -1>
903
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor <4 x i8> [[Y:%.*]], [[X:%.*]]
904
+ ; CHECK-NEXT: [[DOTNOT :%.*]] = ashr <4 x i8> [[TMP1 ]], [[SHAMT:%.*]]
905
+ ; CHECK-NEXT: [[XOR:%.*]] = xor <4 x i8> [[DOTNOT ]], <i8 -1, i8 -1, i8 -1, i8 -1>
916
906
; CHECK-NEXT: ret <4 x i8> [[XOR]]
917
907
;
918
908
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -924,9 +914,9 @@ define <4 x i8> @xor_ashr_not_vec(<4 x i8> %x, <4 x i8> %y, <4 x i8> %shamt) {
924
914
925
915
define <4 x i8 > @xor_ashr_not_vec_commuted (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
926
916
; CHECK-LABEL: @xor_ashr_not_vec_commuted(
927
- ; CHECK-NEXT: [[Y_SHIFT1 :%.*]] = xor <4 x i8> [[Y:%.*]], [[X:%.*]]
928
- ; CHECK-NEXT: [[TMP1 :%.*]] = ashr <4 x i8> [[Y_SHIFT1 ]], [[SHAMT:%.*]]
929
- ; CHECK-NEXT: [[XOR:%.*]] = xor <4 x i8> [[TMP1 ]], <i8 -1, i8 -1, i8 -1, i8 -1>
917
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor <4 x i8> [[Y:%.*]], [[X:%.*]]
918
+ ; CHECK-NEXT: [[DOTNOT :%.*]] = ashr <4 x i8> [[TMP1 ]], [[SHAMT:%.*]]
919
+ ; CHECK-NEXT: [[XOR:%.*]] = xor <4 x i8> [[DOTNOT ]], <i8 -1, i8 -1, i8 -1, i8 -1>
930
920
; CHECK-NEXT: ret <4 x i8> [[XOR]]
931
921
;
932
922
%x.shift = ashr <4 x i8 > %x , %shamt
@@ -938,9 +928,9 @@ define <4 x i8> @xor_ashr_not_vec_commuted(<4 x i8> %x, <4 x i8> %y, <4 x i8> %s
938
928
939
929
define <4 x i8 > @xor_ashr_not_vec_undef_1 (<4 x i8 > %x , <4 x i8 > %y , <4 x i8 > %shamt ) {
940
930
; CHECK-LABEL: @xor_ashr_not_vec_undef_1(
941
- ; CHECK-NEXT: [[Y_SHIFT1 :%.*]] = xor <4 x i8> [[Y:%.*]], [[X:%.*]]
942
- ; CHECK-NEXT: [[TMP1 :%.*]] = ashr <4 x i8> [[Y_SHIFT1 ]], [[SHAMT:%.*]]
943
- ; CHECK-NEXT: [[XOR:%.*]] = xor <4 x i8> [[TMP1 ]], <i8 -1, i8 undef , i8 undef , i8 undef >
931
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor <4 x i8> [[Y:%.*]], [[X:%.*]]
932
+ ; CHECK-NEXT: [[DOTNOT :%.*]] = ashr <4 x i8> [[TMP1 ]], [[SHAMT:%.*]]
933
+ ; CHECK-NEXT: [[XOR:%.*]] = xor <4 x i8> [[DOTNOT ]], <i8 -1, i8 -1 , i8 -1 , i8 -1 >
944
934
; CHECK-NEXT: ret <4 x i8> [[XOR]]
945
935
;
946
936
%x.shift = ashr <4 x i8 > %x , %shamt
0 commit comments