mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-14 14:24:05 +00:00
If loop induction variable's start value is less then its exit value then do not split the loop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53265 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -384,6 +384,19 @@ void LoopIndexSplit::findLoopConditionals() {
|
||||
BasicBlock *Preheader = L->getLoopPreheader();
|
||||
StartValue = IndVar->getIncomingValueForBlock(Preheader);
|
||||
}
|
||||
|
||||
// If start value is more then exit value where induction variable
|
||||
// increments by 1 then we are potentially dealing with an infinite loop.
|
||||
// Do not index split this loop.
|
||||
if (ExitCondition) {
|
||||
ConstantInt *SV = dyn_cast<ConstantInt>(StartValue);
|
||||
ConstantInt *EV =
|
||||
dyn_cast<ConstantInt>(ExitCondition->getOperand(ExitValueNum));
|
||||
if (SV && EV && SV->getSExtValue() > EV->getSExtValue())
|
||||
ExitCondition = NULL;
|
||||
else if (EV && EV->isZero())
|
||||
ExitCondition = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/// Find condition inside a loop that is suitable candidate for index split.
|
||||
|
Reference in New Issue
Block a user