mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-10 16:24:04 +00:00
Canonicalize nested AddRecs in by nesting them in order of loop depth.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54545 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d9ced09299
commit
d9cc749318
@ -1158,6 +1158,19 @@ SCEVHandle ScalarEvolution::getAddRecExpr(std::vector<SCEVHandle> &Operands,
|
|||||||
return getAddRecExpr(Operands, L); // { X,+,0 } --> X
|
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 =
|
SCEVAddRecExpr *&Result =
|
||||||
(*SCEVAddRecExprs)[std::make_pair(L, std::vector<SCEV*>(Operands.begin(),
|
(*SCEVAddRecExprs)[std::make_pair(L, std::vector<SCEV*>(Operands.begin(),
|
||||||
Operands.end()))];
|
Operands.end()))];
|
||||||
|
Loading…
Reference in New Issue
Block a user