diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp index 5afcd70bd91f..a823e14c0db5 100644 --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -156,13 +156,12 @@ void DSE::DeleteDeadInstructionChains(Instruction *I, // See if this made any operands dead. We do it this way in case the // instruction uses the same operand twice. We don't want to delete a // value then reference it. - while (unsigned NumOps = I->getNumOperands()) { - Instruction *Op = dyn_cast(I->getOperand(NumOps-1)); - I->op_erase(I->op_end()-1); // Drop from the operand list. - - if (Op) DeadInsts.insert(Op); // Attempt to nuke it later. + for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { + if (Instruction *Op = dyn_cast(I->getOperand(i))) + DeadInsts.insert(Op); // Attempt to nuke it later. + I->setOperand(i, 0); // Drop from the operand list. } - I->getParent()->getInstList().erase(I); + I->eraseFromParent(); ++NumOther; } diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index f56fe817ab03..a65b83449547 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -575,7 +575,7 @@ Instruction *InstCombiner::FoldOpIntoPhi(Instruction &I) { // Okay, we can do the transformation: create the new PHI node. PHINode *NewPN = new PHINode(I.getType(), I.getName()); I.setName(""); - NewPN->op_reserve(PN->getNumOperands()); + NewPN->reserveOperandSpace(PN->getNumOperands()/2); InsertNewInstBefore(NewPN, *PN); // Next, add all of the operands to the PHI. @@ -4142,7 +4142,7 @@ Instruction *InstCombiner::FoldPHIArgOpIntoPHI(PHINode &PN) { // correct type, and PHI together all of the LHS's of the instructions. PHINode *NewPN = new PHINode(FirstInst->getOperand(0)->getType(), PN.getName()+".in"); - NewPN->op_reserve(PN.getNumOperands()); + NewPN->reserveOperandSpace(PN.getNumOperands()/2); Value *InVal = FirstInst->getOperand(0); NewPN->addIncoming(InVal, PN.getIncomingBlock(0)); diff --git a/llvm/lib/Transforms/Scalar/LoopSimplify.cpp b/llvm/lib/Transforms/Scalar/LoopSimplify.cpp index c7b92bbdda4b..b5517cb886cf 100644 --- a/llvm/lib/Transforms/Scalar/LoopSimplify.cpp +++ b/llvm/lib/Transforms/Scalar/LoopSimplify.cpp @@ -575,7 +575,7 @@ void LoopSimplify::InsertUniqueBackedgeBlock(Loop *L) { PHINode *PN = cast(I); PHINode *NewPN = new PHINode(PN->getType(), PN->getName()+".be", BETerminator); - NewPN->op_reserve(2*BackedgeBlocks.size()); + NewPN->reserveOperandSpace(BackedgeBlocks.size()); // Loop over the PHI node, moving all entries except the one for the // preheader over to the new PHI node. @@ -604,7 +604,9 @@ void LoopSimplify::InsertUniqueBackedgeBlock(Loop *L) { PN->setIncomingValue(0, PN->getIncomingValue(PreheaderIdx)); PN->setIncomingBlock(0, PN->getIncomingBlock(PreheaderIdx)); } - PN->op_erase(PN->op_begin()+2, PN->op_end()); + // Nuke all entries except the zero'th. + for (unsigned i = 0, e = PN->getNumIncomingValues()-1; i != e; ++i) + PN->removeIncomingValue(e-i, false); // Finally, add the newly constructed PHI node as the entry for the BEBlock. PN->addIncoming(NewPN, BEBlock);