@@ -682,8 +682,7 @@ define i1 @src_x_and_mask_slt(i8 %x, i8 %y, i1 %cond) {
682
682
; CHECK-NEXT: [[MASK:%.*]] = select i1 [[COND:%.*]], i8 [[MASK0]], i8 0
683
683
; CHECK-NEXT: [[MASK_POS:%.*]] = icmp sgt i8 [[MASK]], -1
684
684
; CHECK-NEXT: call void @llvm.assume(i1 [[MASK_POS]])
685
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[MASK]], [[X:%.*]]
686
- ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[AND]], [[X]]
685
+ ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[MASK]], [[X:%.*]]
687
686
; CHECK-NEXT: ret i1 [[R]]
688
687
;
689
688
%mask0 = lshr i8 -1 , %y
@@ -701,8 +700,7 @@ define i1 @src_x_and_mask_sge(i8 %x, i8 %y, i1 %cond) {
701
700
; CHECK-NEXT: [[MASK:%.*]] = select i1 [[COND:%.*]], i8 [[MASK0]], i8 0
702
701
; CHECK-NEXT: [[MASK_POS:%.*]] = icmp sgt i8 [[MASK]], -1
703
702
; CHECK-NEXT: call void @llvm.assume(i1 [[MASK_POS]])
704
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[MASK]], [[X:%.*]]
705
- ; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[AND]], [[X]]
703
+ ; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[MASK]], [[X:%.*]]
706
704
; CHECK-NEXT: ret i1 [[R]]
707
705
;
708
706
%mask0 = lshr i8 -1 , %y
@@ -747,9 +745,9 @@ define i1 @src_x_and_mask_sge_fail_maybe_neg(i8 %x, i8 %y, i1 %cond) {
747
745
define i1 @src_x_and_nmask_eq (i8 %x , i8 %y , i1 %cond ) {
748
746
; CHECK-LABEL: @src_x_and_nmask_eq(
749
747
; CHECK-NEXT: [[NOT_MASK0:%.*]] = shl nsw i8 -1, [[Y:%.*]]
750
- ; CHECK-NEXT: [[NOT_MASK :%.*]] = select i1 [[COND:%.* ]], i8 [[NOT_MASK0]], i8 0
751
- ; CHECK-NEXT: [[AND :%.*]] = and i8 [[NOT_MASK]], [[X :%.*]]
752
- ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[NOT_MASK ]], [[AND ]]
748
+ ; CHECK-NEXT: [[R1 :%.*]] = icmp ule i8 [[NOT_MASK0 ]], [[X:%.*]]
749
+ ; CHECK-NEXT: [[NOT_COND :%.*]] = xor i1 [[COND :%.*]], true
750
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[NOT_COND ]], i1 true, i1 [[R1 ]]
753
751
; CHECK-NEXT: ret i1 [[R]]
754
752
;
755
753
%not_mask0 = shl i8 -1 , %y
@@ -762,9 +760,8 @@ define i1 @src_x_and_nmask_eq(i8 %x, i8 %y, i1 %cond) {
762
760
define i1 @src_x_and_nmask_ne (i8 %x , i8 %y , i1 %cond ) {
763
761
; CHECK-LABEL: @src_x_and_nmask_ne(
764
762
; CHECK-NEXT: [[NOT_MASK0:%.*]] = shl nsw i8 -1, [[Y:%.*]]
765
- ; CHECK-NEXT: [[NOT_MASK:%.*]] = select i1 [[COND:%.*]], i8 [[NOT_MASK0]], i8 0
766
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[NOT_MASK]], [[X:%.*]]
767
- ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[AND]], [[NOT_MASK]]
763
+ ; CHECK-NEXT: [[R1:%.*]] = icmp ugt i8 [[NOT_MASK0]], [[X:%.*]]
764
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[COND:%.*]], i1 [[R1]], i1 false
768
765
; CHECK-NEXT: ret i1 [[R]]
769
766
;
770
767
%not_mask0 = shl i8 -1 , %y
@@ -777,9 +774,8 @@ define i1 @src_x_and_nmask_ne(i8 %x, i8 %y, i1 %cond) {
777
774
define i1 @src_x_and_nmask_ult (i8 %x , i8 %y , i1 %cond ) {
778
775
; CHECK-LABEL: @src_x_and_nmask_ult(
779
776
; CHECK-NEXT: [[NOT_MASK0:%.*]] = shl nsw i8 -1, [[Y:%.*]]
780
- ; CHECK-NEXT: [[NOT_MASK:%.*]] = select i1 [[COND:%.*]], i8 [[NOT_MASK0]], i8 0
781
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[NOT_MASK]], [[X:%.*]]
782
- ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[AND]], [[NOT_MASK]]
777
+ ; CHECK-NEXT: [[R1:%.*]] = icmp ugt i8 [[NOT_MASK0]], [[X:%.*]]
778
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[COND:%.*]], i1 [[R1]], i1 false
783
779
; CHECK-NEXT: ret i1 [[R]]
784
780
;
785
781
%not_mask0 = shl i8 -1 , %y
@@ -792,9 +788,9 @@ define i1 @src_x_and_nmask_ult(i8 %x, i8 %y, i1 %cond) {
792
788
define i1 @src_x_and_nmask_uge (i8 %x , i8 %y , i1 %cond ) {
793
789
; CHECK-LABEL: @src_x_and_nmask_uge(
794
790
; CHECK-NEXT: [[NOT_MASK0:%.*]] = shl nsw i8 -1, [[Y:%.*]]
795
- ; CHECK-NEXT: [[NOT_MASK :%.*]] = select i1 [[COND:%.* ]], i8 [[NOT_MASK0]], i8 0
796
- ; CHECK-NEXT: [[AND :%.*]] = and i8 [[NOT_MASK]], [[X :%.*]]
797
- ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AND ]], [[NOT_MASK ]]
791
+ ; CHECK-NEXT: [[R1 :%.*]] = icmp ule i8 [[NOT_MASK0 ]], [[X:%.*]]
792
+ ; CHECK-NEXT: [[NOT_COND :%.*]] = xor i1 [[COND :%.*]], true
793
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[NOT_COND ]], i1 true, i1 [[R1 ]]
798
794
; CHECK-NEXT: ret i1 [[R]]
799
795
;
800
796
%not_mask0 = shl i8 -1 , %y
@@ -807,8 +803,7 @@ define i1 @src_x_and_nmask_uge(i8 %x, i8 %y, i1 %cond) {
807
803
define i1 @src_x_and_nmask_slt (i8 %x , i8 %y ) {
808
804
; CHECK-LABEL: @src_x_and_nmask_slt(
809
805
; CHECK-NEXT: [[NOT_MASK:%.*]] = shl nsw i8 -1, [[Y:%.*]]
810
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[NOT_MASK]], [[X:%.*]]
811
- ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[AND]], [[NOT_MASK]]
806
+ ; CHECK-NEXT: [[R:%.*]] = icmp sgt i8 [[NOT_MASK]], [[X:%.*]]
812
807
; CHECK-NEXT: ret i1 [[R]]
813
808
;
814
809
%not_mask = shl i8 -1 , %y
@@ -820,8 +815,7 @@ define i1 @src_x_and_nmask_slt(i8 %x, i8 %y) {
820
815
define i1 @src_x_and_nmask_sge (i8 %x , i8 %y ) {
821
816
; CHECK-LABEL: @src_x_and_nmask_sge(
822
817
; CHECK-NEXT: [[NOT_MASK:%.*]] = shl nsw i8 -1, [[Y:%.*]]
823
- ; CHECK-NEXT: [[AND:%.*]] = and i8 [[NOT_MASK]], [[X:%.*]]
824
- ; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[AND]], [[NOT_MASK]]
818
+ ; CHECK-NEXT: [[R:%.*]] = icmp sle i8 [[NOT_MASK]], [[X:%.*]]
825
819
; CHECK-NEXT: ret i1 [[R]]
826
820
;
827
821
%not_mask = shl i8 -1 , %y
@@ -867,9 +861,8 @@ define i1 @src_x_or_mask_eq(i8 %x, i8 %y, i8 %z, i1 %c2, i1 %cond) {
867
861
; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[X:%.*]], -124
868
862
; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[C2:%.*]], i8 [[TMP1]], i8 -46
869
863
; CHECK-NEXT: [[TMP3:%.*]] = call i8 @llvm.umax.i8(i8 [[Z:%.*]], i8 [[TMP2]])
870
- ; CHECK-NEXT: [[NX_CCC:%.*]] = sub i8 11, [[TMP3]]
871
- ; CHECK-NEXT: [[OR:%.*]] = or i8 [[NX_CCC]], [[MASK]]
872
- ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[OR]], -1
864
+ ; CHECK-NEXT: [[TMP4:%.*]] = add i8 [[TMP3]], -12
865
+ ; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[TMP4]], [[MASK]]
873
866
; CHECK-NEXT: ret i1 [[R]]
874
867
;
875
868
%mask0 = lshr i8 -1 , %y
@@ -888,9 +881,7 @@ define i1 @src_x_or_mask_ne(i8 %x, i8 %y, i1 %cond) {
888
881
; CHECK-LABEL: @src_x_or_mask_ne(
889
882
; CHECK-NEXT: [[MASK0:%.*]] = lshr i8 -1, [[Y:%.*]]
890
883
; CHECK-NEXT: [[MASK:%.*]] = select i1 [[COND:%.*]], i8 [[MASK0]], i8 0
891
- ; CHECK-NEXT: [[NX:%.*]] = xor i8 [[X:%.*]], -1
892
- ; CHECK-NEXT: [[OR:%.*]] = or i8 [[MASK]], [[NX]]
893
- ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[OR]], -1
884
+ ; CHECK-NEXT: [[R:%.*]] = icmp ult i8 [[MASK]], [[X:%.*]]
894
885
; CHECK-NEXT: ret i1 [[R]]
895
886
;
896
887
%mask0 = lshr i8 -1 , %y
0 commit comments