@@ -3862,10 +3862,9 @@ define <8 x i1> @bitreverse_vec_ne(<8 x i16> %x, <8 x i16> %y) {
3862
3862
define i1 @knownbits1 (i8 %a , i8 %b ) {
3863
3863
; CHECK-LABEL: @knownbits1(
3864
3864
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3865
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
3866
3865
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3867
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3868
- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A2 ]], [[B2 ]]
3866
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3867
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A1 ]], [[TMP1 ]]
3869
3868
; CHECK-NEXT: ret i1 [[C]]
3870
3869
;
3871
3870
%a1 = and i8 %a , 5
@@ -3879,10 +3878,9 @@ define i1 @knownbits1(i8 %a, i8 %b) {
3879
3878
define i1 @knownbits2 (i8 %a , i8 %b ) {
3880
3879
; CHECK-LABEL: @knownbits2(
3881
3880
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3882
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
3883
3881
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3884
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3885
- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A2 ]], [[B2 ]]
3882
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3883
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A1 ]], [[TMP1 ]]
3886
3884
; CHECK-NEXT: ret i1 [[C]]
3887
3885
;
3888
3886
%a1 = and i8 %a , 5
@@ -3896,10 +3894,9 @@ define i1 @knownbits2(i8 %a, i8 %b) {
3896
3894
define i1 @knownbits3 (i8 %a , i8 %b ) {
3897
3895
; CHECK-LABEL: @knownbits3(
3898
3896
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3899
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
3900
3897
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3901
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3902
- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[B2 ]], [[A2 ]]
3898
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3899
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[TMP1 ]], [[A1 ]]
3903
3900
; CHECK-NEXT: ret i1 [[C]]
3904
3901
;
3905
3902
%a1 = and i8 %a , 5
@@ -3913,10 +3910,9 @@ define i1 @knownbits3(i8 %a, i8 %b) {
3913
3910
define <2 x i1 > @knownbits4 (<2 x i8 > %a , <2 x i8 > %b ) {
3914
3911
; CHECK-LABEL: @knownbits4(
3915
3912
; CHECK-NEXT: [[A1:%.*]] = and <2 x i8> [[A:%.*]], <i8 1, i8 1>
3916
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint <2 x i8> [[A1]], <i8 4, i8 4>
3917
3913
; CHECK-NEXT: [[B1:%.*]] = and <2 x i8> [[B:%.*]], <i8 2, i8 2>
3918
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint <2 x i8> [[B1]], <i8 5 , i8 5 >
3919
- ; CHECK-NEXT: [[C:%.*]] = icmp ne <2 x i8> [[B2 ]], [[A2 ]]
3914
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint <2 x i8> [[B1]], <i8 1 , i8 1 >
3915
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne <2 x i8> [[TMP1 ]], [[A1 ]]
3920
3916
; CHECK-NEXT: ret <2 x i1> [[C]]
3921
3917
;
3922
3918
%a1 = and <2 x i8 > %a , <i8 5 , i8 5 >
@@ -3932,10 +3928,9 @@ define <2 x i1> @knownbits4(<2 x i8> %a, <2 x i8> %b) {
3932
3928
define i1 @knownbits5 (i8 %a , i8 %b ) {
3933
3929
; CHECK-LABEL: @knownbits5(
3934
3930
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3935
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
3936
3931
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3937
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3938
- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A2 ]], [[B2 ]]
3932
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3933
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A1 ]], [[TMP1 ]]
3939
3934
; CHECK-NEXT: ret i1 [[C]]
3940
3935
;
3941
3936
%a1 = and i8 %a , 133
@@ -3949,10 +3944,9 @@ define i1 @knownbits5(i8 %a, i8 %b) {
3949
3944
define i1 @knownbits6 (i8 %a , i8 %b ) {
3950
3945
; CHECK-LABEL: @knownbits6(
3951
3946
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3952
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
3953
3947
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3954
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3955
- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A2 ]], [[B2 ]]
3948
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3949
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A1 ]], [[TMP1 ]]
3956
3950
; CHECK-NEXT: ret i1 [[C]]
3957
3951
;
3958
3952
%a1 = and i8 %a , 133
@@ -3966,10 +3960,9 @@ define i1 @knownbits6(i8 %a, i8 %b) {
3966
3960
define <2 x i1 > @knownbits7 (<2 x i8 > %a , <2 x i8 > %b ) {
3967
3961
; CHECK-LABEL: @knownbits7(
3968
3962
; CHECK-NEXT: [[A1:%.*]] = and <2 x i8> [[A:%.*]], <i8 -127, i8 -127>
3969
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint <2 x i8> [[A1]], <i8 4, i8 4>
3970
3963
; CHECK-NEXT: [[B1:%.*]] = and <2 x i8> [[B:%.*]], <i8 2, i8 2>
3971
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint <2 x i8> [[B1]], <i8 5 , i8 5 >
3972
- ; CHECK-NEXT: [[C:%.*]] = icmp eq <2 x i8> [[B2 ]], [[A2 ]]
3964
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint <2 x i8> [[B1]], <i8 1 , i8 1 >
3965
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq <2 x i8> [[TMP1 ]], [[A1 ]]
3973
3966
; CHECK-NEXT: ret <2 x i1> [[C]]
3974
3967
;
3975
3968
%a1 = and <2 x i8 > %a , <i8 133 , i8 133 >
@@ -3983,10 +3976,9 @@ define <2 x i1> @knownbits7(<2 x i8> %a, <2 x i8> %b) {
3983
3976
define i1 @knownbits8 (i8 %a , i8 %b ) {
3984
3977
; CHECK-LABEL: @knownbits8(
3985
3978
; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3986
- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
3987
3979
; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3988
- ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3989
- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[B2 ]], [[A2 ]]
3980
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3981
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[TMP1 ]], [[A1 ]]
3990
3982
; CHECK-NEXT: ret i1 [[C]]
3991
3983
;
3992
3984
%a1 = and i8 %a , 133
@@ -4912,3 +4904,80 @@ define i1 @or_positive_sgt_zero_multi_use(i8 %a) {
4912
4904
%cmp = icmp sgt i8 %b , 0
4913
4905
ret i1 %cmp
4914
4906
}
4907
+
4908
+
4909
+ define i1 @disjoint_or_sgt_1 (i8 %a , i8 %b ) {
4910
+ ; CHECK-LABEL: @disjoint_or_sgt_1(
4911
+ ; CHECK-NEXT: [[B1:%.*]] = add nsw i8 [[B:%.*]], 2
4912
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp sle i8 [[B1]], [[A:%.*]]
4913
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
4914
+ ;
4915
+ %a1 = or disjoint i8 %a , 1
4916
+ %b1 = add nsw i8 %b , 2
4917
+ %icmp_ = icmp sgt i8 %a1 , %b1
4918
+ ret i1 %icmp_
4919
+ }
4920
+
4921
+ define i1 @disjoint_or_sgt_2 (i8 %a , i8 %b ) {
4922
+ ; CHECK-LABEL: @disjoint_or_sgt_2(
4923
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
4924
+ ; CHECK-NEXT: [[B1:%.*]] = add i8 [[B:%.*]], 1
4925
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp sgt i8 [[A1]], [[B1]]
4926
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
4927
+ ;
4928
+ %a1 = or disjoint i8 %a , 2
4929
+ %b1 = add i8 %b , 1
4930
+ %icmp_ = icmp sgt i8 %a1 , %b1
4931
+ ret i1 %icmp_
4932
+ }
4933
+
4934
+ define i1 @disjoint_or_sgt_3 (i8 %a , i8 %b ) {
4935
+ ; CHECK-LABEL: @disjoint_or_sgt_3(
4936
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
4937
+ ; CHECK-NEXT: [[B1:%.*]] = add nuw i8 [[B:%.*]], 1
4938
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp sgt i8 [[A1]], [[B1]]
4939
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
4940
+ ;
4941
+ %a1 = or disjoint i8 %a , 2
4942
+ %b1 = add nuw i8 %b , 1
4943
+ %icmp_ = icmp sgt i8 %a1 , %b1
4944
+ ret i1 %icmp_
4945
+ }
4946
+
4947
+ define i1 @disjoint_or_ugt_1 (i8 %a , i8 %b ) {
4948
+ ; CHECK-LABEL: @disjoint_or_ugt_1(
4949
+ ; CHECK-NEXT: [[B1:%.*]] = add nsw i8 [[B:%.*]], 2
4950
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp ule i8 [[B1]], [[A:%.*]]
4951
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
4952
+ ;
4953
+ %a1 = or disjoint i8 %a , 1
4954
+ %b1 = add nsw i8 %b , 2
4955
+ %icmp_ = icmp ugt i8 %a1 , %b1
4956
+ ret i1 %icmp_
4957
+ }
4958
+
4959
+ define i1 @disjoint_or_ugt_2 (i8 %a , i8 %b ) {
4960
+ ; CHECK-LABEL: @disjoint_or_ugt_2(
4961
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
4962
+ ; CHECK-NEXT: [[B1:%.*]] = add i8 [[B:%.*]], 1
4963
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp ugt i8 [[A1]], [[B1]]
4964
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
4965
+ ;
4966
+ %a1 = or disjoint i8 %a , 2
4967
+ %b1 = add i8 %b , 1
4968
+ %icmp_ = icmp ugt i8 %a1 , %b1
4969
+ ret i1 %icmp_
4970
+ }
4971
+
4972
+ define i1 @disjoint_or_ugt_3 (i8 %a , i8 %b ) {
4973
+ ; CHECK-LABEL: @disjoint_or_ugt_3(
4974
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
4975
+ ; CHECK-NEXT: [[B1:%.*]] = add nuw i8 [[B:%.*]], 1
4976
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp ugt i8 [[A1]], [[B1]]
4977
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
4978
+ ;
4979
+ %a1 = or disjoint i8 %a , 2
4980
+ %b1 = add nuw i8 %b , 1
4981
+ %icmp_ = icmp ugt i8 %a1 , %b1
4982
+ ret i1 %icmp_
4983
+ }
0 commit comments