From 3b6acb179708ea2f3caf95ace0f134fcbc460333 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Tue, 20 Apr 2021 11:47:10 -0700 Subject: [PATCH] Revert "Look through invertible recurrences in isKnownNonEqual" This reverts commit be20eae25f50f5ef648aeefa1143e1c31e4410fc. It appears to have caused a crash on a buildbot (https://lab.llvm.org/buildbot#builders/77/builds/5653). Reverting while investigating. --- llvm/lib/Analysis/ValueTracking.cpp | 29 ---------------------- .../test/Analysis/ValueTracking/known-non-equal.ll | 21 ++++++++++------ 2 files changed, 14 insertions(+), 36 deletions(-) diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 8dbf1f7..46aa84f 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -2580,35 +2580,6 @@ static Optional getInvertibleOperand(const Operator *Op1, if (Op1->getOperand(0)->getType() == Op2->getOperand(0)->getType()) return 0; break; - case Instruction::PHI: { - const PHINode *PN1 = cast(Op1); - const PHINode *PN2 = cast(Op2); - - // If PN1 and PN2 are both recurrences, can we prove the entire recurrences - // are a single invertible function of the start values? Note that repeated - // application of an invertible function is also invertible - BinaryOperator *BO1 = nullptr; - Value *Start1 = nullptr, *Step1 = nullptr; - BinaryOperator *BO2 = nullptr; - Value *Start2 = nullptr, *Step2 = nullptr; - if (PN1->getParent() != PN2->getParent() || - !matchSimpleRecurrence(PN1, BO1, Start1, Step1) || - !matchSimpleRecurrence(PN2, BO2, Start2, Step2)) - break; - - Optional Idx = getInvertibleOperand(cast(BO1), - cast(BO2)); - if (!Idx || *Idx != 0) - break; - assert(BO1->getOperand(*Idx) == PN1 && BO2->getOperand(*Idx) == PN2); - - if (PN1->getOperand(0) == BO1) { - assert(PN2->getOperand(0) == BO2); - return 1; - } - assert(PN1->getOperand(1) == BO1 && PN2->getOperand(1) == BO2); - return 0; - } } return None; } diff --git a/llvm/test/Analysis/ValueTracking/known-non-equal.ll b/llvm/test/Analysis/ValueTracking/known-non-equal.ll index 870af63..257a0a2 100644 --- a/llvm/test/Analysis/ValueTracking/known-non-equal.ll +++ b/llvm/test/Analysis/ValueTracking/known-non-equal.ll @@ -598,7 +598,8 @@ define i1 @recurrence_add_neq(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 @@ -774,7 +775,8 @@ define i1 @recurrence_add_neq_phi_order(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 @@ -808,7 +810,8 @@ define i1 @recurrence_sub_neq(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 @@ -909,7 +912,8 @@ define i1 @recurrence_mul_neq(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 @@ -1045,7 +1049,8 @@ define i1 @recurrence_shl_neq(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 @@ -1181,7 +1186,8 @@ define i1 @recurrence_lshr_neq(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 @@ -1317,7 +1323,8 @@ define i1 @recurrence_ashr_neq(i8 %A) { ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10 ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: -; CHECK-NEXT: ret i1 false +; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]] +; CHECK-NEXT: ret i1 [[RES]] ; entry: %B = add i8 %A, 1 -- 2.7.4