@@ -404,11 +404,10 @@ define <2 x i32> @icmp_ne_and_pow2_lshr_pow2_vec(<2 x i32> %0) {
404
404
ret <2 x i32 > %conv
405
405
}
406
406
407
- define i32 @icmp_eq_and1_lshr_pow2_negative1 (i32 %0 ) {
408
- ; CHECK-LABEL: @icmp_eq_and1_lshr_pow2_negative1(
409
- ; CHECK-NEXT: [[LSHR:%.*]] = lshr i32 7, [[TMP0:%.*]]
410
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[LSHR]], 1
411
- ; CHECK-NEXT: [[CONV:%.*]] = xor i32 [[AND]], 1
407
+ define i32 @icmp_eq_and1_lshr_pow2_minus_one (i32 %0 ) {
408
+ ; CHECK-LABEL: @icmp_eq_and1_lshr_pow2_minus_one(
409
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[TMP0:%.*]], 2
410
+ ; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
412
411
; CHECK-NEXT: ret i32 [[CONV]]
413
412
;
414
413
%lshr = lshr i32 7 , %0
@@ -622,8 +621,8 @@ define i1 @test_shr_and_1_ne_0(i32 %a, i32 %b) {
622
621
623
622
define i1 @test_const_shr_and_1_ne_0 (i32 %b ) {
624
623
; CHECK-LABEL: @test_const_shr_and_1_ne_0(
625
- ; CHECK-NEXT: [[SHR :%.*]] = lshr i32 42 , [[B:%.*]]
626
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHR ]], 1
624
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
625
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[TMP1 ]], 42
627
626
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[AND]], 0
628
627
; CHECK-NEXT: ret i1 [[CMP]]
629
628
;
@@ -635,8 +634,8 @@ define i1 @test_const_shr_and_1_ne_0(i32 %b) {
635
634
636
635
define i1 @test_not_const_shr_and_1_ne_0 (i32 %b ) {
637
636
; CHECK-LABEL: @test_not_const_shr_and_1_ne_0(
638
- ; CHECK-NEXT: [[SHR :%.*]] = lshr i32 42 , [[B:%.*]]
639
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHR ]], 1
637
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
638
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[TMP1 ]], 42
640
639
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i32 [[AND]], 0
641
640
; CHECK-NEXT: ret i1 [[CMP_NOT]]
642
641
;
@@ -648,8 +647,8 @@ define i1 @test_not_const_shr_and_1_ne_0(i32 %b) {
648
647
649
648
define i1 @test_const_shr_exact_and_1_ne_0 (i32 %b ) {
650
649
; CHECK-LABEL: @test_const_shr_exact_and_1_ne_0(
651
- ; CHECK-NEXT: [[SHR :%.*]] = lshr exact i32 42 , [[B:%.*]]
652
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHR ]], 1
650
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
651
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[TMP1 ]], 42
653
652
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[AND]], 0
654
653
; CHECK-NEXT: ret i1 [[CMP]]
655
654
;
@@ -742,9 +741,9 @@ define i1 @test_const_shr_and_1_ne_0_multi_use_and_negative(i32 %b) {
742
741
743
742
define i1 @test_shl_sub_bw_minus_1_slt_0 (i32 %a , i32 %b ) {
744
743
; CHECK-LABEL: @test_shl_sub_bw_minus_1_slt_0(
745
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
746
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 [[A:%.* ]], [[SUB ]]
747
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[SHL ]], 0
744
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
745
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1 ]], [[A:%.* ]]
746
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2 ]], 0
748
747
; CHECK-NEXT: ret i1 [[CMP]]
749
748
;
750
749
%sub = sub i32 31 , %b
@@ -755,9 +754,9 @@ define i1 @test_shl_sub_bw_minus_1_slt_0(i32 %a, i32 %b) {
755
754
756
755
define i1 @test_const_shl_sub_bw_minus_1_slt_0 (i32 %b ) {
757
756
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0(
758
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
759
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 42, [[SUB]]
760
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[SHL ]], 0
757
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
758
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1]], 42
759
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2 ]], 0
761
760
; CHECK-NEXT: ret i1 [[CMP]]
762
761
;
763
762
%sub = sub i32 31 , %b
@@ -768,9 +767,9 @@ define i1 @test_const_shl_sub_bw_minus_1_slt_0(i32 %b) {
768
767
769
768
define i1 @test_not_shl_sub_bw_minus_1_slt_0 (i32 %a , i32 %b ) {
770
769
; CHECK-LABEL: @test_not_shl_sub_bw_minus_1_slt_0(
771
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
772
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 [[A:%.* ]], [[SUB ]]
773
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[SHL ]], -1
770
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
771
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1 ]], [[A:%.* ]]
772
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP2 ]], 0
774
773
; CHECK-NEXT: ret i1 [[CMP]]
775
774
;
776
775
%sub = sub i32 31 , %b
@@ -781,9 +780,9 @@ define i1 @test_not_shl_sub_bw_minus_1_slt_0(i32 %a, i32 %b) {
781
780
782
781
define i1 @test_shl_nuw_sub_bw_minus_1_slt_0 (i32 %a , i32 %b ) {
783
782
; CHECK-LABEL: @test_shl_nuw_sub_bw_minus_1_slt_0(
784
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
785
- ; CHECK-NEXT: [[SHL :%.*]] = shl nuw i32 [[A:%.* ]], [[SUB ]]
786
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[SHL ]], 0
783
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
784
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1 ]], [[A:%.* ]]
785
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2 ]], 0
787
786
; CHECK-NEXT: ret i1 [[CMP]]
788
787
;
789
788
%sub = sub i32 31 , %b
@@ -794,9 +793,9 @@ define i1 @test_shl_nuw_sub_bw_minus_1_slt_0(i32 %a, i32 %b) {
794
793
795
794
define i1 @test_not_const_shl_sub_bw_minus_1_slt_0 (i32 %b ) {
796
795
; CHECK-LABEL: @test_not_const_shl_sub_bw_minus_1_slt_0(
797
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
798
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 42, [[SUB]]
799
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[SHL ]], -1
796
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
797
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1]], 42
798
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP2 ]], 0
800
799
; CHECK-NEXT: ret i1 [[CMP]]
801
800
;
802
801
%sub = sub i32 31 , %b
@@ -807,9 +806,9 @@ define i1 @test_not_const_shl_sub_bw_minus_1_slt_0(i32 %b) {
807
806
808
807
define <8 x i1 > @test_shl_sub_bw_minus_1_slt_0_v8i8 (<8 x i8 > %a , <8 x i8 > %b ) {
809
808
; CHECK-LABEL: @test_shl_sub_bw_minus_1_slt_0_v8i8(
810
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
811
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> [[A:%.* ]], [[SUB ]]
812
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
809
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw <8 x i8> <i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 >, [[B:%.*]]
810
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1 ]], [[A:%.* ]]
811
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
813
812
; CHECK-NEXT: ret <8 x i1> [[CMP]]
814
813
;
815
814
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
@@ -820,9 +819,9 @@ define <8 x i1> @test_shl_sub_bw_minus_1_slt_0_v8i8(<8 x i8> %a, <8 x i8> %b) {
820
819
821
820
define <8 x i1 > @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat (<8 x i8 > %b ) {
822
821
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat(
823
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
824
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>, [[SUB]]
825
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
822
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw <8 x i8> <i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 >, [[B:%.*]]
823
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1]], <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>
824
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
826
825
; CHECK-NEXT: ret <8 x i1> [[CMP]]
827
826
;
828
827
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
@@ -846,9 +845,9 @@ define <8 x i1> @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_1(<8 x i8
846
845
847
846
define <8 x i1 > @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_2 (<8 x i8 > %b ) {
848
847
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_2(
849
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
850
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 poison>, [[SUB]]
851
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
848
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw <8 x i8> <i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 >, [[B:%.*]]
849
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1]], <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 poison>
850
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
852
851
; CHECK-NEXT: ret <8 x i1> [[CMP]]
853
852
;
854
853
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
@@ -859,9 +858,9 @@ define <8 x i1> @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_2(<8 x i8
859
858
860
859
define <8 x i1 > @test_const_shl_sub_bw_minus_1_slt_0_v8i8_nonsplat (<8 x i8 > %b ) {
861
860
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0_v8i8_nonsplat(
862
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
863
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> <i8 42, i8 43, i8 44, i8 45, i8 46, i8 47, i8 48, i8 49>, [[SUB]]
864
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
861
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw <8 x i8> <i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 , i8 1 >, [[B:%.*]]
862
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1]], <i8 42, i8 43, i8 44, i8 45, i8 46, i8 47, i8 48, i8 49>
863
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
865
864
; CHECK-NEXT: ret <8 x i1> [[CMP]]
866
865
;
867
866
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
0 commit comments