From 4dfad295475387211012f17bf640a9f8330872be Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sun, 14 Jun 2009 22:51:25 +0000 Subject: [PATCH] Do compare constant SCEV values in SCEVComplexityCompare, because even though the order doesn't matter at the top level of an expression, it does matter when the constant is a subexpression of an n-ary expression, because n-ary expressions are sorted lexicographically. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73358 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/ScalarEvolution.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 8357ddbc344..ee077d56b62 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -504,9 +504,18 @@ namespace { return false; } - // Constant sorting doesn't matter since they'll be folded. - if (isa(LHS)) - return false; + // Compare constant values. + if (const SCEVConstant *LC = dyn_cast(LHS)) { + const SCEVConstant *RC = cast(RHS); + return LC->getValue()->getValue().ult(RC->getValue()->getValue()); + } + + // Compare addrec loop depths. + if (const SCEVAddRecExpr *LA = dyn_cast(LHS)) { + const SCEVAddRecExpr *RA = cast(RHS); + if (LA->getLoop()->getLoopDepth() != RA->getLoop()->getLoopDepth()) + return LA->getLoop()->getLoopDepth() < RA->getLoop()->getLoopDepth(); + } // Lexicographically compare n-ary expressions. if (const SCEVNAryExpr *LC = dyn_cast(LHS)) { -- 2.34.1