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