From e09e98c2de28a7dbbc4d3712c174596443a7a3f1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 9 Dec 2009 00:18:13 +0000 Subject: [PATCH] fix PHI translation to take the PHI out of the instinputs set and add the translated value back to it if an instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90909 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/PHITransAddr.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/Analysis/PHITransAddr.cpp b/lib/Analysis/PHITransAddr.cpp index 2dbdb1981a0..04f3f5dcfc9 100644 --- a/lib/Analysis/PHITransAddr.cpp +++ b/lib/Analysis/PHITransAddr.cpp @@ -164,22 +164,20 @@ Value *PHITransAddr::PHITranslateSubExpr(Value *V, BasicBlock *CurBB, // input. return Inst; } - - // If 'Inst' is defined in this block, it must be an input that needs to be - // phi translated or an intermediate expression that needs to be incorporated - // into the expression. - + + // If 'Inst' is defined in this block and is an input that needs to be phi + // translated, we need to incorporate the value into the expression or fail. + // If this is a PHI, go ahead and translate it. if (PHINode *PN = dyn_cast(Inst)) - return PN->getIncomingValueForBlock(PredBB); - + return ReplaceInstWithValue(PN, PN->getIncomingValueForBlock(PredBB)); // If this is a non-phi value, and it is analyzable, we can incorporate it // into the expression by making all instruction operands be inputs. if (!CanPHITrans(Inst)) return 0; - - // Okay, we can incorporate it, this instruction is no longer an input. + + // The instruction itself isn't an input any longer. InstInputs.erase(std::find(InstInputs.begin(), InstInputs.end(), Inst)); // All instruction operands are now inputs (and of course, they may also be