@@ -3862,9 +3862,10 @@ 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
38653866; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3866- ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3867- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A1 ]], [[TMP1 ]]
3867+ ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3868+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A2 ]], [[B2 ]]
38683869; CHECK-NEXT: ret i1 [[C]]
38693870;
38703871 %a1 = and i8 %a , 5
@@ -3878,9 +3879,10 @@ define i1 @knownbits1(i8 %a, i8 %b) {
38783879define i1 @knownbits2 (i8 %a , i8 %b ) {
38793880; CHECK-LABEL: @knownbits2(
38803881; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3882+ ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
38813883; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3882- ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3883- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A1 ]], [[TMP1 ]]
3884+ ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3885+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A2 ]], [[B2 ]]
38843886; CHECK-NEXT: ret i1 [[C]]
38853887;
38863888 %a1 = and i8 %a , 5
@@ -3894,9 +3896,10 @@ define i1 @knownbits2(i8 %a, i8 %b) {
38943896define i1 @knownbits3 (i8 %a , i8 %b ) {
38953897; CHECK-LABEL: @knownbits3(
38963898; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], 1
3899+ ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
38973900; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3898- ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3899- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[TMP1 ]], [[A1 ]]
3901+ ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3902+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[B2 ]], [[A2 ]]
39003903; CHECK-NEXT: ret i1 [[C]]
39013904;
39023905 %a1 = and i8 %a , 5
@@ -3910,9 +3913,10 @@ define i1 @knownbits3(i8 %a, i8 %b) {
39103913define <2 x i1 > @knownbits4 (<2 x i8 > %a , <2 x i8 > %b ) {
39113914; CHECK-LABEL: @knownbits4(
39123915; 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>
39133917; CHECK-NEXT: [[B1:%.*]] = and <2 x i8> [[B:%.*]], <i8 2, i8 2>
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 ]]
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 ]]
39163920; CHECK-NEXT: ret <2 x i1> [[C]]
39173921;
39183922 %a1 = and <2 x i8 > %a , <i8 5 , i8 5 >
@@ -3928,9 +3932,10 @@ define <2 x i1> @knownbits4(<2 x i8> %a, <2 x i8> %b) {
39283932define i1 @knownbits5 (i8 %a , i8 %b ) {
39293933; CHECK-LABEL: @knownbits5(
39303934; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3935+ ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39313936; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3932- ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3933- ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A1 ]], [[TMP1 ]]
3937+ ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3938+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[A2 ]], [[B2 ]]
39343939; CHECK-NEXT: ret i1 [[C]]
39353940;
39363941 %a1 = and i8 %a , 133
@@ -3944,9 +3949,10 @@ define i1 @knownbits5(i8 %a, i8 %b) {
39443949define i1 @knownbits6 (i8 %a , i8 %b ) {
39453950; CHECK-LABEL: @knownbits6(
39463951; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3952+ ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39473953; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3948- ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3949- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A1 ]], [[TMP1 ]]
3954+ ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3955+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[A2 ]], [[B2 ]]
39503956; CHECK-NEXT: ret i1 [[C]]
39513957;
39523958 %a1 = and i8 %a , 133
@@ -3960,9 +3966,10 @@ define i1 @knownbits6(i8 %a, i8 %b) {
39603966define <2 x i1 > @knownbits7 (<2 x i8 > %a , <2 x i8 > %b ) {
39613967; CHECK-LABEL: @knownbits7(
39623968; 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>
39633970; CHECK-NEXT: [[B1:%.*]] = and <2 x i8> [[B:%.*]], <i8 2, i8 2>
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 ]]
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 ]]
39663973; CHECK-NEXT: ret <2 x i1> [[C]]
39673974;
39683975 %a1 = and <2 x i8 > %a , <i8 133 , i8 133 >
@@ -3976,9 +3983,10 @@ define <2 x i1> @knownbits7(<2 x i8> %a, <2 x i8> %b) {
39763983define i1 @knownbits8 (i8 %a , i8 %b ) {
39773984; CHECK-LABEL: @knownbits8(
39783985; CHECK-NEXT: [[A1:%.*]] = and i8 [[A:%.*]], -127
3986+ ; CHECK-NEXT: [[A2:%.*]] = or disjoint i8 [[A1]], 4
39793987; CHECK-NEXT: [[B1:%.*]] = and i8 [[B:%.*]], 2
3980- ; CHECK-NEXT: [[TMP1 :%.*]] = or disjoint i8 [[B1]], 1
3981- ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[TMP1 ]], [[A1 ]]
3988+ ; CHECK-NEXT: [[B2 :%.*]] = or disjoint i8 [[B1]], 5
3989+ ; CHECK-NEXT: [[C:%.*]] = icmp ne i8 [[B2 ]], [[A2 ]]
39823990; CHECK-NEXT: ret i1 [[C]]
39833991;
39843992 %a1 = and i8 %a , 133
@@ -4904,80 +4912,3 @@ define i1 @or_positive_sgt_zero_multi_use(i8 %a) {
49044912 %cmp = icmp sgt i8 %b , 0
49054913 ret i1 %cmp
49064914}
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