@@ -3862,10 +3862,9 @@ define <8 x i1> @bitreverse_vec_ne(<8 x i16> %x, <8 x i16> %y) {
38623862define i1 @knownbits1 (i8 %a , i8 %b ) {
38633863; CHECK-LABEL: @knownbits1(
38643864; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3865- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
38663865; 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 ]]
38693868; CHECK-NEXT: ret i1 [[C]]
38703869;
38713870 %a1 = and i8 %a , 5
@@ -3879,10 +3878,9 @@ define i1 @knownbits1(i8 %a, i8 %b) {
38793878define i1 @knownbits2 (i8 %a , i8 %b ) {
38803879; CHECK-LABEL: @knownbits2(
38813880; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3882- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
38833881; 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 ]]
38863884; CHECK-NEXT: ret i1 [[C]]
38873885;
38883886 %a1 = and i8 %a , 5
@@ -3896,10 +3894,9 @@ define i1 @knownbits2(i8 %a, i8 %b) {
38963894define i1 @knownbits3 (i8 %a , i8 %b ) {
38973895; CHECK-LABEL: @knownbits3(
38983896; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3899- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39003897; 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 ]]
39033900; CHECK-NEXT: ret i1 [[C]]
39043901;
39053902 %a1 = and i8 %a , 5
@@ -3913,10 +3910,9 @@ define i1 @knownbits3(i8 %a, i8 %b) {
39133910define <2 x i1 > @knownbits4 (<2 x i8 > %a , <2 x i8 > %b ) {
39143911; CHECK-LABEL: @knownbits4(
39153912; 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>
39173913; 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 ]]
39203916; CHECK-NEXT: ret <2 x i1> [[C]]
39213917;
39223918 %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) {
39323928define i1 @knownbits5 (i8 %a , i8 %b ) {
39333929; CHECK-LABEL: @knownbits5(
39343930; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3935- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39363931; 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 ]]
39393934; CHECK-NEXT: ret i1 [[C]]
39403935;
39413936 %a1 = and i8 %a , 133
@@ -3949,10 +3944,9 @@ define i1 @knownbits5(i8 %a, i8 %b) {
39493944define i1 @knownbits6 (i8 %a , i8 %b ) {
39503945; CHECK-LABEL: @knownbits6(
39513946; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3952- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39533947; 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 ]]
39563950; CHECK-NEXT: ret i1 [[C]]
39573951;
39583952 %a1 = and i8 %a , 133
@@ -3966,10 +3960,9 @@ define i1 @knownbits6(i8 %a, i8 %b) {
39663960define <2 x i1 > @knownbits7 (<2 x i8 > %a , <2 x i8 > %b ) {
39673961; CHECK-LABEL: @knownbits7(
39683962; 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>
39703963; 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 ]]
39733966; CHECK-NEXT: ret <2 x i1> [[C]]
39743967;
39753968 %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) {
39833976define i1 @knownbits8 (i8 %a , i8 %b ) {
39843977; CHECK-LABEL: @knownbits8(
39853978; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3986- ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39873979; 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 ]]
39903982; CHECK-NEXT: ret i1 [[C]]
39913983;
39923984 %a1 = and i8 %a , 133
@@ -4912,3 +4904,80 @@ define i1 @or_positive_sgt_zero_multi_use(i8 %a) {
49124904 %cmp = icmp sgt i8 %b , 0
49134905 ret i1 %cmp
49144906}
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