[llvm] 3b6acb1 - Revert "Look through invertible recurrences in isKnownNonEqual"

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 20 11:48:02 PDT 2021


Author: Philip Reames
Date: 2021-04-20T11:47:10-07:00
New Revision: 3b6acb179708ea2f3caf95ace0f134fcbc460333

URL: https://github.com/llvm/llvm-project/commit/3b6acb179708ea2f3caf95ace0f134fcbc460333
DIFF: https://github.com/llvm/llvm-project/commit/3b6acb179708ea2f3caf95ace0f134fcbc460333.diff

LOG: 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.

Added: 
    

Modified: 
    llvm/lib/Analysis/ValueTracking.cpp
    llvm/test/Analysis/ValueTracking/known-non-equal.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 8dbf1f78a2e1..46aa84f72aaf 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2580,35 +2580,6 @@ static Optional<unsigned> getInvertibleOperand(const Operator *Op1,
     if (Op1->getOperand(0)->getType() == Op2->getOperand(0)->getType())
       return 0;
     break;
-  case Instruction::PHI: {
-    const PHINode *PN1 = cast<PHINode>(Op1);
-    const PHINode *PN2 = cast<PHINode>(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<unsigned> Idx = getInvertibleOperand(cast<Operator>(BO1),
-                                                  cast<Operator>(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 870af630d6bb..257a0a255af3 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


        


More information about the llvm-commits mailing list