Fix a bug Brian found.
authorChris Lattner <sabre@nondot.org>
Wed, 7 Apr 2004 16:16:11 +0000 (16:16 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 7 Apr 2004 16:16:11 +0000 (16:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12754 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolution.cpp

index 77f4b1c60667407ed85347d82c72a051e79d7140..70a7d04121ccf149fe80cb5a89a4804faf826877 100644 (file)
@@ -924,6 +924,7 @@ SCEVHandle SCEVZeroExtendExpr::get(const SCEVHandle &Op, const Type *Ty) {
 // get - Get a canonical add expression, or something simpler if possible.
 SCEVHandle SCEVAddExpr::get(std::vector<SCEVHandle> &Ops) {
   assert(!Ops.empty() && "Cannot get empty add!");
+  if (Ops.size() == 1) return Ops[0];
 
   // Sort by complexity, this groups all similar expression types together.
   std::sort(Ops.begin(), Ops.end(), SCEVComplexityCompare());
@@ -932,6 +933,7 @@ SCEVHandle SCEVAddExpr::get(std::vector<SCEVHandle> &Ops) {
   unsigned Idx = 0;
   if (SCEVConstant *LHSC = dyn_cast<SCEVConstant>(Ops[0])) {
     ++Idx;
+    assert(Idx < Ops.size());
     while (SCEVConstant *RHSC = dyn_cast<SCEVConstant>(Ops[Idx])) {
       // We found two constants, fold them together!
       Constant *Fold = ConstantExpr::getAdd(LHSC->getValue(), RHSC->getValue());
@@ -954,8 +956,7 @@ SCEVHandle SCEVAddExpr::get(std::vector<SCEVHandle> &Ops) {
     }
   }
 
-  if (Ops.size() == 1)
-    return Ops[0];
+  if (Ops.size() == 1) return Ops[0];
   
   // Okay, check to see if the same value occurs in the operand list twice.  If
   // so, merge them together into an multiply expression.  Since we sorted the