diff options
Diffstat (limited to 'lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | lib/Analysis/ScalarEvolution.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index eaa847aa10..0857014863 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -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(); |