[llvm-commits] [llvm] r54545 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp
Dan Gohman
gohman at apple.com
Fri Aug 8 11:33:12 PDT 2008
Author: djg
Date: Fri Aug 8 13:33:12 2008
New Revision: 54545
URL: http://llvm.org/viewvc/llvm-project?rev=54545&view=rev
Log:
Canonicalize nested AddRecs in by nesting them in order of loop depth.
Modified:
llvm/trunk/lib/Analysis/ScalarEvolution.cpp
Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=54545&r1=54544&r2=54545&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
+++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Fri Aug 8 13:33:12 2008
@@ -1158,6 +1158,19 @@
return getAddRecExpr(Operands, L); // { X,+,0 } --> X
}
+ // Canonicalize nested AddRecs in by nesting them in order of loop depth.
+ if (SCEVAddRecExpr *NestedAR = dyn_cast<SCEVAddRecExpr>(Operands[0])) {
+ const Loop* NestedLoop = NestedAR->getLoop();
+ if (L->getLoopDepth() < NestedLoop->getLoopDepth()) {
+ std::vector<SCEVHandle> NestedOperands(NestedAR->op_begin(),
+ NestedAR->op_end());
+ SCEVHandle NestedARHandle(NestedAR);
+ Operands[0] = NestedAR->getStart();
+ NestedOperands[0] = getAddRecExpr(Operands, L);
+ return getAddRecExpr(NestedOperands, NestedLoop);
+ }
+ }
+
SCEVAddRecExpr *&Result =
(*SCEVAddRecExprs)[std::make_pair(L, std::vector<SCEV*>(Operands.begin(),
Operands.end()))];
More information about the llvm-commits
mailing list