[llvm] bed02fa - Revert "[SCEV] Prove implications of different type via truncation"

Max Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 20 23:04:30 PDT 2020


Author: Max Kazantsev
Date: 2020-10-21T13:03:46+07:00
New Revision: bed02fa8b0ec61b442990fb2406f0157fd3f8c13

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

LOG: Revert "[SCEV] Prove implications of different type via truncation"

This reverts commit 80852a4f2fb154c6094bb9d9e3457757d5a60ad1.

Test is now broken because underlying required patch was also reverted SUDDENLY.

Added: 
    

Modified: 
    llvm/lib/Analysis/ScalarEvolution.cpp
    llvm/test/Analysis/ScalarEvolution/srem.ll
    llvm/unittests/Analysis/ScalarEvolutionTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 6e351a53628f..efc4600e248f 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -9699,25 +9699,6 @@ bool ScalarEvolution::isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS,
   // Balance the types.
   if (getTypeSizeInBits(LHS->getType()) <
       getTypeSizeInBits(FoundLHS->getType())) {
-    // For unsigned and equality predicates, try to prove that both found
-    // operands fit into narrow unsigned range. If so, try to prove facts in
-    // narrow types.
-    if (!CmpInst::isSigned(FoundPred)) {
-      auto *NarrowType = LHS->getType();
-      auto *WideType = FoundLHS->getType();
-      auto BitWidth = getTypeSizeInBits(NarrowType);
-      const SCEV *MaxValue = getZeroExtendExpr(
-          getConstant(APInt::getMaxValue(BitWidth)), WideType);
-      if (isKnownPredicate(ICmpInst::ICMP_ULE, FoundLHS, MaxValue) &&
-          isKnownPredicate(ICmpInst::ICMP_ULE, FoundRHS, MaxValue)) {
-        const SCEV *TruncFoundLHS = getTruncateExpr(FoundLHS, NarrowType);
-        const SCEV *TruncFoundRHS = getTruncateExpr(FoundRHS, NarrowType);
-        if (isImpliedCondBalancedTypes(Pred, LHS, RHS, FoundPred, TruncFoundLHS,
-                                       TruncFoundRHS, Context))
-          return true;
-      }
-    }
-
     if (CmpInst::isSigned(Pred)) {
       LHS = getSignExtendExpr(LHS, FoundLHS->getType());
       RHS = getSignExtendExpr(RHS, FoundLHS->getType());

diff  --git a/llvm/test/Analysis/ScalarEvolution/srem.ll b/llvm/test/Analysis/ScalarEvolution/srem.ll
index 76e0d4a5ec5b..197437b51ca1 100644
--- a/llvm/test/Analysis/ScalarEvolution/srem.ll
+++ b/llvm/test/Analysis/ScalarEvolution/srem.ll
@@ -29,7 +29,7 @@ define dso_local void @_Z4loopi(i32 %width) local_unnamed_addr #0 {
 ; CHECK-NEXT:    %add = add nsw i32 %2, %call
 ; CHECK-NEXT:    --> (%2 + %call) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %for.cond: Variant }
 ; CHECK-NEXT:    %inc = add nsw i32 %i.0, 1
-; CHECK-NEXT:    --> {1,+,1}<nuw><%for.cond> U: full-set S: full-set Exits: (1 + %width) LoopDispositions: { %for.cond: Computable }
+; CHECK-NEXT:    --> {1,+,1}<nuw><%for.cond> U: [1,0) S: [1,0) Exits: (1 + %width) LoopDispositions: { %for.cond: Computable }
 ; CHECK-NEXT:  Determining loop execution counts for: @_Z4loopi
 ; CHECK-NEXT:  Loop %for.cond: backedge-taken count is %width
 ; CHECK-NEXT:  Loop %for.cond: max backedge-taken count is -1

diff  --git a/llvm/unittests/Analysis/ScalarEvolutionTest.cpp b/llvm/unittests/Analysis/ScalarEvolutionTest.cpp
index ee70fe5e7ce5..be8941838f71 100644
--- a/llvm/unittests/Analysis/ScalarEvolutionTest.cpp
+++ b/llvm/unittests/Analysis/ScalarEvolutionTest.cpp
@@ -1316,45 +1316,4 @@ TEST_F(ScalarEvolutionsTest, UnsignedIsImpliedViaOperations) {
   });
 }
 
-TEST_F(ScalarEvolutionsTest, ProveImplicationViaNarrowing) {
-  LLVMContext C;
-  SMDiagnostic Err;
-  std::unique_ptr<Module> M = parseAssemblyString(
-      "define i32 @foo(i32 %start, i32* %q) { "
-      "entry: "
-      "  %wide.start = zext i32 %start to i64 "
-      "  br label %loop "
-      "loop: "
-      "  %wide.iv = phi i64 [%wide.start, %entry], [%wide.iv.next, %backedge] "
-      "  %iv = phi i32 [%start, %entry], [%iv.next, %backedge] "
-      "  %cond = icmp eq i64 %wide.iv, 0 "
-      "  br i1 %cond, label %exit, label %backedge "
-      "backedge: "
-      "  %iv.next = add i32 %iv, -1 "
-      "  %index = zext i32 %iv.next to i64 "
-      "  %load.addr = getelementptr i32, i32* %q, i64 %index "
-      "  %stop = load i32, i32* %load.addr "
-      "  %loop.cond = icmp eq i32 %stop, 0 "
-      "  %wide.iv.next = add nsw i64 %wide.iv, -1 "
-      "  br i1 %loop.cond, label %loop, label %failure "
-      "exit: "
-      "  ret i32 0 "
-      "failure: "
-      "  unreachable "
-      "} ",
-      Err, C);
-
-  ASSERT_TRUE(M && "Could not parse module?");
-  ASSERT_TRUE(!verifyModule(*M) && "Must have been well formed!");
-
-  runWithSE(*M, "foo", [](Function &F, LoopInfo &LI, ScalarEvolution &SE) {
-    auto *IV = SE.getSCEV(getInstructionByName(F, "iv"));
-    auto *Zero = SE.getZero(IV->getType());
-    auto *Backedge = getInstructionByName(F, "iv.next")->getParent();
-    ASSERT_TRUE(Backedge);
-    EXPECT_TRUE(SE.isBasicBlockEntryGuardedByCond(Backedge, ICmpInst::ICMP_UGT,
-                                                  IV, Zero));
-  });
-}
-
 }  // end namespace llvm


        


More information about the llvm-commits mailing list