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 | 88a8624f8e104e1ba1ca21efa6ae23680b528a3e (patch) | |
tree | e8cfa16cbd8c20a0304d8cfa3bb4d13575f86053 /lib/Transforms/Utils/SSAUpdater.cpp | |
parent | 18ed9c9a2bd7f1f56129495b499264c58b5cc4f4 (diff) |
alternate fix for PR5258 which avoids worklist problems, with reduced testcase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84667 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/SSAUpdater.cpp')
-rw-r--r-- | lib/Transforms/Utils/SSAUpdater.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/lib/Transforms/Utils/SSAUpdater.cpp b/lib/Transforms/Utils/SSAUpdater.cpp index ed9c0ee6c7..8a07c35f35 100644 --- a/lib/Transforms/Utils/SSAUpdater.cpp +++ b/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); - } } |