diff options
| author | Devang Patel <dpatel@apple.com> | 2008-02-13 22:23:07 +0000 |
|---|---|---|
| committer | Devang Patel <dpatel@apple.com> | 2008-02-13 22:23:07 +0000 |
| commit | 0ecb76d8204702c85c0471520696bf72b5ae757f (patch) | |
| tree | 293968e3ece93f80c02ac296553cde6844af863c /llvm/lib/Transforms | |
| parent | 63705ecefdf22ec6585da4d177dd91b71a798efa (diff) | |
| download | bcm5719-llvm-0ecb76d8204702c85c0471520696bf72b5ae757f.tar.gz bcm5719-llvm-0ecb76d8204702c85c0471520696bf72b5ae757f.zip | |
A loop latch phi node may have uses inside loop, not just in loop header.
llvm-svn: 47093
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp b/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp index 383415b228b..a0bfe4f0822 100644 --- a/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp +++ b/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp @@ -151,7 +151,7 @@ namespace { /// Update ExitBB PHINodes' to reflect this change. void updatePHINodes(BasicBlock *ExitBB, BasicBlock *Latch, BasicBlock *Header, - PHINode *IV, Instruction *IVIncrement); + PHINode *IV, Instruction *IVIncrement, Loop *LP); /// moveExitCondition - Move exit condition EC into split condition block CondBB. void moveExitCondition(BasicBlock *CondBB, BasicBlock *ActiveBB, @@ -1597,7 +1597,7 @@ void LoopIndexSplit::moveExitCondition(BasicBlock *CondBB, BasicBlock *ActiveBB, new BranchInst(OrigDestBB, ExitingBB); // Update PHINodes - updatePHINodes(ExitBB, ExitingBB, CondBB, IV, IVAdd); + updatePHINodes(ExitBB, ExitingBB, CondBB, IV, IVAdd, LP); // Fix dominator info. // ExitBB is now dominated by CondBB @@ -1637,7 +1637,8 @@ void LoopIndexSplit::moveExitCondition(BasicBlock *CondBB, BasicBlock *ActiveBB, /// Update ExitBB PHINodes' to reflect this change. void LoopIndexSplit::updatePHINodes(BasicBlock *ExitBB, BasicBlock *Latch, BasicBlock *Header, - PHINode *IV, Instruction *IVIncrement) { + PHINode *IV, Instruction *IVIncrement, + Loop *LP) { for (BasicBlock::iterator BI = ExitBB->begin(), BE = ExitBB->end(); BI != BE; ++BI) { @@ -1653,7 +1654,7 @@ void LoopIndexSplit::updatePHINodes(BasicBlock *ExitBB, BasicBlock *Latch, for (Value::use_iterator UI = PHV->use_begin(), E = PHV->use_end(); UI != E; ++UI) if (PHINode *U = dyn_cast<PHINode>(*UI)) - if (U->getParent() == Header) { + if (LP->contains(U->getParent())) { NewV = U; break; } |

