diff options
author | Owen Anderson <resistor@mac.com> | 2008-05-06 20:55:16 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2008-05-06 20:55:16 +0000 |
commit | 0e1ab4a9be14acbeecff7276754fa8b05f8ea241 (patch) | |
tree | 083c455dbed0ecaf557e8841af52925a62c4f912 | |
parent | 243d5cd2833cd124ffda807189f17eb8ca3442e7 (diff) | |
download | bcm5719-llvm-0e1ab4a9be14acbeecff7276754fa8b05f8ea241.tar.gz bcm5719-llvm-0e1ab4a9be14acbeecff7276754fa8b05f8ea241.zip |
We need to update PHIs containing the exiting block, not the exit block. We really should come up with better names for these.
llvm-svn: 50770
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopDeletion.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp index 763060c092c..1ea2f6ac9ea 100644 --- a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp +++ b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp @@ -192,8 +192,9 @@ bool LoopDeletion::runOnLoop(Loop* L, LPPassManager& LPM) { return false; // Now that we know the removal is safe, remove the loop by changing the - // branch from the preheader to go to the single exiting block. + // branch from the preheader to go to the single exit block. BasicBlock* exitBlock = exitBlocks[0]; + BasicBlock* exitingBlock = exitingBlocks[0]; // Because we're deleting a large chunk of code at once, the sequence in which // we remove things is very important to avoid invalidation issues. Don't @@ -218,7 +219,7 @@ bool LoopDeletion::runOnLoop(Loop* L, LPPassManager& LPM) { // the preheader instead of the exiting block. BasicBlock::iterator BI = exitBlock->begin(); while (PHINode* P = dyn_cast<PHINode>(BI)) { - P->replaceUsesOfWith(exitBlock, preheader); + P->replaceUsesOfWith(exitingBlock, preheader); BI++; } @@ -253,8 +254,12 @@ bool LoopDeletion::runOnLoop(Loop* L, LPPassManager& LPM) { // NOTE: This iteration is safe because erasing the block does not remove its // entry from the loop's block list. We do that in the next section. for (Loop::block_iterator LI = L->block_begin(), LE = L->block_end(); - LI != LE; ++LI) + LI != LE; ++LI) { + for (Value::use_iterator UI = (*LI)->use_begin(), UE = (*LI)->use_end(); + UI != UE; ++UI) + (*UI)->dump(); (*LI)->eraseFromParent(); + } // Finally, the blocks from loopinfo. This has to happen late because // otherwise our loop iterators won't work. |