diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-10-20 20:27:49 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-10-20 20:27:49 +0000 |
| commit | 7f903681acbc5212a86f4e45283213ccfb22e05b (patch) | |
| tree | f5c7340625e6cb68f274186fd9e09f91c3fc0502 /llvm/lib/Transforms/Utils | |
| parent | f3a2b6499e8c84f53d0b33397269820162bdc8bb (diff) | |
| download | bcm5719-llvm-7f903681acbc5212a86f4e45283213ccfb22e05b.tar.gz bcm5719-llvm-7f903681acbc5212a86f4e45283213ccfb22e05b.zip | |
alternate fix for PR5258 which avoids worklist problems, with reduced testcase.
llvm-svn: 84667
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SSAUpdater.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/llvm/lib/Transforms/Utils/SSAUpdater.cpp b/llvm/lib/Transforms/Utils/SSAUpdater.cpp index ed9c0ee6c70..8a07c35f352 100644 --- a/llvm/lib/Transforms/Utils/SSAUpdater.cpp +++ b/llvm/lib/Transforms/Utils/SSAUpdater.cpp @@ -177,19 +177,14 @@ Value *SSAUpdater::GetValueInMiddleOfBlock(BasicBlock *BB) { /// which use their value in the corresponding predecessor. void SSAUpdater::RewriteUse(Use &U) { Instruction *User = cast<Instruction>(U.getUser()); - BasicBlock *UseBB = User->getParent(); - PHINode *UserPN = dyn_cast<PHINode>(User); - if (UserPN) - UseBB = UserPN->getIncomingBlock(U); + + Value *V; + if (PHINode *UserPN = dyn_cast<PHINode>(User)) + V = GetValueAtEndOfBlock(UserPN->getIncomingBlock(U)); + else + V = GetValueInMiddleOfBlock(User->getParent()); - Value *V = GetValueInMiddleOfBlock(UseBB); U.set(V); - if (UserPN) { - // Incoming value from the same BB must be consistent - for (unsigned i=0;i<UserPN->getNumIncomingValues();i++) - if (UserPN->getIncomingBlock(i) == UseBB) - UserPN->setIncomingValue(i, V); - } } |

