From 88a8624f8e104e1ba1ca21efa6ae23680b528a3e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 20 Oct 2009 20:27:49 +0000 Subject: 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 --- lib/Transforms/Utils/SSAUpdater.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'lib/Transforms/Utils/SSAUpdater.cpp') 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(U.getUser()); - BasicBlock *UseBB = User->getParent(); - PHINode *UserPN = dyn_cast(User); - if (UserPN) - UseBB = UserPN->getIncomingBlock(U); + + Value *V; + if (PHINode *UserPN = dyn_cast(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;igetNumIncomingValues();i++) - if (UserPN->getIncomingBlock(i) == UseBB) - UserPN->setIncomingValue(i, V); - } } -- cgit v1.2.3