Some cleanup for r209568.
authorMichael Zolotukhin <mzolotukhin@apple.com>
Mon, 26 May 2014 14:49:46 +0000 (14:49 +0000)
committerMichael Zolotukhin <mzolotukhin@apple.com>
Mon, 26 May 2014 14:49:46 +0000 (14:49 +0000)
llvm-svn: 209634

llvm/lib/Analysis/ScalarEvolution.cpp

index 461fdac..1087e5d 100644 (file)
@@ -1208,11 +1208,10 @@ const SCEV *ScalarEvolution::getSignExtendExpr(const SCEV *Op,
       auto SMul = dyn_cast<SCEVMulExpr>(SA->getOperand(1));
       if (SMul && SC1) {
         if (auto SC2 = dyn_cast<SCEVConstant>(SMul->getOperand(0))) {
-          APInt C1 = SC1->getValue()->getValue();
-          APInt C2 = SC2->getValue()->getValue();
-          APInt CDiff = C2 - C1;
+          const APInt &C1 = SC1->getValue()->getValue();
+          const APInt &C2 = SC2->getValue()->getValue();
           if (C1.isStrictlyPositive() && C2.isStrictlyPositive() &&
-              CDiff.isStrictlyPositive() && C2.isPowerOf2())
+              C2.ugt(C1) && C2.isPowerOf2())
             return getAddExpr(getSignExtendExpr(SC1, Ty),
                               getSignExtendExpr(SMul, Ty));
         }
@@ -1316,11 +1315,10 @@ const SCEV *ScalarEvolution::getSignExtendExpr(const SCEV *Op,
       auto SC1 = dyn_cast<SCEVConstant>(Start);
       auto SC2 = dyn_cast<SCEVConstant>(Step);
       if (SC1 && SC2) {
-        APInt C1 = SC1->getValue()->getValue();
-        APInt C2 = SC2->getValue()->getValue();
-        APInt CDiff = C2 - C1;
-        if (C1.isStrictlyPositive() && C2.isStrictlyPositive() &&
-            CDiff.isStrictlyPositive() && C2.isPowerOf2()) {
+        const APInt &C1 = SC1->getValue()->getValue();
+        const APInt &C2 = SC2->getValue()->getValue();
+        if (C1.isStrictlyPositive() && C2.isStrictlyPositive() && C2.ugt(C1) &&
+            C2.isPowerOf2()) {
           Start = getSignExtendExpr(Start, Ty);
           const SCEV *NewAR = getAddRecExpr(getConstant(AR->getType(), 0), Step,
                                             L, AR->getNoWrapFlags());