Teach SCEVExpander to expand arithmetic involving pointers into GEP
[oota-llvm.git] / lib / Analysis / ScalarEvolution.cpp
index eaa847aa10da59435515dd0311c5952cee7fe820..0857014863b769d60776f4141b4c5d834987fbfd 100644 (file)
@@ -456,6 +456,13 @@ namespace {
       if (const SCEVUnknown *LU = dyn_cast<SCEVUnknown>(LHS)) {
         const SCEVUnknown *RU = cast<SCEVUnknown>(RHS);
 
+        // Order pointer values after integer values. This helps SCEVExpander
+        // form GEPs.
+        if (isa<PointerType>(LU->getType()) && !isa<PointerType>(RU->getType()))
+          return false;
+        if (isa<PointerType>(RU->getType()) && !isa<PointerType>(LU->getType()))
+          return true;
+
         // Compare getValueID values.
         if (LU->getValue()->getValueID() != RU->getValue()->getValueID())
           return LU->getValue()->getValueID() < RU->getValue()->getValueID();