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:
Devang Patel
2008-07-09 00:12:01 +00:00
parent f877b735ad
commit a5e27f8028
3 changed files with 39 additions and 1 deletions

View File

@ -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.