diff --git a/lib/Transforms/Utils/LCSSA.cpp b/lib/Transforms/Utils/LCSSA.cpp index ed02c977430..ac540c9aaac 100644 --- a/lib/Transforms/Utils/LCSSA.cpp +++ b/lib/Transforms/Utils/LCSSA.cpp @@ -155,13 +155,16 @@ void LCSSA::processInstruction(Instruction* Instr, std::vector workList; for (std::vector::const_iterator BBI = exitBlocks.begin(), - BBE = exitBlocks.end(); BBI != BBE; ++BBI) - if (DT->getNode(Instr->getParent())->dominates(DT->getNode(*BBI))) { - PHINode *phi = new PHINode(Instr->getType(), Instr->getName()+".lcssa", + BBE = exitBlocks.end(); BBI != BBE; ++BBI) { + Instruction*& phi = Phis[*BBI]; + if (phi == 0 && + DT->getNode(Instr->getParent())->dominates(DT->getNode(*BBI))) { + phi = new PHINode(Instr->getType(), Instr->getName()+".lcssa", (*BBI)->begin()); - workList.push_back(phi); + workList.push_back(cast(phi)); Phis[*BBI] = phi; } + } // Phi nodes that need to have their incoming values filled. std::vector needIncomingValues;