@@ -609,9 +609,9 @@ define i1 @fold_ne_rhs_fail_shift_not_1s(i8 %x, i8 %yy) {
609
609
610
610
define i1 @test_shl_sub_bw_minus_1_slt_0 (i32 %a , i32 %b ) {
611
611
; CHECK-LABEL: @test_shl_sub_bw_minus_1_slt_0(
612
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
613
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 [[A:%.* ]], [[SUB ]]
614
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[SHL ]], 0
612
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
613
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1 ]], [[A:%.* ]]
614
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2 ]], 0
615
615
; CHECK-NEXT: ret i1 [[CMP]]
616
616
;
617
617
%sub = sub i32 31 , %b
@@ -622,9 +622,9 @@ define i1 @test_shl_sub_bw_minus_1_slt_0(i32 %a, i32 %b) {
622
622
623
623
define i1 @test_const_shl_sub_bw_minus_1_slt_0 (i32 %b ) {
624
624
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0(
625
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
626
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 42, [[SUB]]
627
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[SHL ]], 0
625
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
626
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1]], 42
627
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2 ]], 0
628
628
; CHECK-NEXT: ret i1 [[CMP]]
629
629
;
630
630
%sub = sub i32 31 , %b
@@ -635,9 +635,9 @@ define i1 @test_const_shl_sub_bw_minus_1_slt_0(i32 %b) {
635
635
636
636
define i1 @test_not_shl_sub_bw_minus_1_slt_0 (i32 %a , i32 %b ) {
637
637
; CHECK-LABEL: @test_not_shl_sub_bw_minus_1_slt_0(
638
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
639
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 [[A:%.* ]], [[SUB ]]
640
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[SHL ]], -1
638
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
639
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1 ]], [[A:%.* ]]
640
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP2 ]], 0
641
641
; CHECK-NEXT: ret i1 [[CMP]]
642
642
;
643
643
%sub = sub i32 31 , %b
@@ -648,9 +648,9 @@ define i1 @test_not_shl_sub_bw_minus_1_slt_0(i32 %a, i32 %b) {
648
648
649
649
define i1 @test_shl_nuw_sub_bw_minus_1_slt_0 (i32 %a , i32 %b ) {
650
650
; CHECK-LABEL: @test_shl_nuw_sub_bw_minus_1_slt_0(
651
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
652
- ; CHECK-NEXT: [[SHL :%.*]] = shl nuw i32 [[A:%.* ]], [[SUB ]]
653
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[SHL ]], 0
651
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
652
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1 ]], [[A:%.* ]]
653
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2 ]], 0
654
654
; CHECK-NEXT: ret i1 [[CMP]]
655
655
;
656
656
%sub = sub i32 31 , %b
@@ -661,9 +661,9 @@ define i1 @test_shl_nuw_sub_bw_minus_1_slt_0(i32 %a, i32 %b) {
661
661
662
662
define i1 @test_not_const_shl_sub_bw_minus_1_slt_0 (i32 %b ) {
663
663
; CHECK-LABEL: @test_not_const_shl_sub_bw_minus_1_slt_0(
664
- ; CHECK-NEXT: [[SUB :%.*]] = sub i32 31 , [[B:%.*]]
665
- ; CHECK-NEXT: [[SHL :%.*]] = shl i32 42, [[SUB]]
666
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[SHL ]], -1
664
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl nuw i32 1 , [[B:%.*]]
665
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and i32 [[TMP1]], 42
666
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP2 ]], 0
667
667
; CHECK-NEXT: ret i1 [[CMP]]
668
668
;
669
669
%sub = sub i32 31 , %b
@@ -674,9 +674,9 @@ define i1 @test_not_const_shl_sub_bw_minus_1_slt_0(i32 %b) {
674
674
675
675
define <8 x i1 > @test_shl_sub_bw_minus_1_slt_0_v8i8 (<8 x i8 > %a , <8 x i8 > %b ) {
676
676
; CHECK-LABEL: @test_shl_sub_bw_minus_1_slt_0_v8i8(
677
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
678
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> [[A:%.* ]], [[SUB ]]
679
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
677
+ ; 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:%.*]]
678
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1 ]], [[A:%.* ]]
679
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
680
680
; CHECK-NEXT: ret <8 x i1> [[CMP]]
681
681
;
682
682
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
@@ -687,9 +687,9 @@ define <8 x i1> @test_shl_sub_bw_minus_1_slt_0_v8i8(<8 x i8> %a, <8 x i8> %b) {
687
687
688
688
define <8 x i1 > @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat (<8 x i8 > %b ) {
689
689
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat(
690
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
691
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>, [[SUB]]
692
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
690
+ ; 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:%.*]]
691
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1]], <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>
692
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
693
693
; CHECK-NEXT: ret <8 x i1> [[CMP]]
694
694
;
695
695
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
@@ -713,9 +713,9 @@ define <8 x i1> @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_1(<8 x i8
713
713
714
714
define <8 x i1 > @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_2 (<8 x i8 > %b ) {
715
715
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_2(
716
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
717
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 poison>, [[SUB]]
718
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
716
+ ; 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:%.*]]
717
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1]], <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 poison>
718
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
719
719
; CHECK-NEXT: ret <8 x i1> [[CMP]]
720
720
;
721
721
%sub = sub <8 x i8 > <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, %b
@@ -726,9 +726,9 @@ define <8 x i1> @test_const_shl_sub_bw_minus_1_slt_0_v8i8_splat_poison_2(<8 x i8
726
726
727
727
define <8 x i1 > @test_const_shl_sub_bw_minus_1_slt_0_v8i8_nonsplat (<8 x i8 > %b ) {
728
728
; CHECK-LABEL: @test_const_shl_sub_bw_minus_1_slt_0_v8i8_nonsplat(
729
- ; CHECK-NEXT: [[SUB :%.*]] = sub <8 x i8> <i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 , i8 7 >, [[B:%.*]]
730
- ; CHECK-NEXT: [[SHL :%.*]] = shl <8 x i8> <i8 42, i8 43, i8 44, i8 45, i8 46, i8 47, i8 48, i8 49>, [[SUB]]
731
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt <8 x i8> [[SHL ]], zeroinitializer
729
+ ; 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:%.*]]
730
+ ; CHECK-NEXT: [[TMP2 :%.*]] = and <8 x i8> [[TMP1]], <i8 42, i8 43, i8 44, i8 45, i8 46, i8 47, i8 48, i8 49>
731
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <8 x i8> [[TMP2 ]], zeroinitializer
732
732
; CHECK-NEXT: ret <8 x i1> [[CMP]]
733
733
;
734
734
%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