require that the branch being controlled by the IV

exits the loop.  With this information we can guarantee 
the iteration count of the loop is bounded by the 
compare.  I think this xforms is finally safe now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100285 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2010-04-03 07:21:39 +00:00
parent 96fd76638b
commit d52c072777

View File

@ -691,8 +691,15 @@ void IndVarSimplify::HandleFloatingPointIV(Loop *L, PHINode *PN) {
BranchInst *TheBr = cast<BranchInst>(Compare->use_back());
// FIXME: Need to verify that the branch actually controls the iteration count
// We need to verify that the branch actually controls the iteration count
// of the loop. If not, the new IV can overflow and no one will notice.
// The branch block must be in the loop and one of the successors must be out
// of the loop.
assert(TheBr->isConditional() && "Can't use fcmp if not conditional");
if (!L->contains(TheBr->getParent()) ||
(L->contains(TheBr->getSuccessor(0)) &&
L->contains(TheBr->getSuccessor(1))))
return;
// If it isn't a comparison with an integer-as-fp (the exit value), we can't