//
PHINode *PHI = 0;
if (CalledFunc->getReturnType() != Type::VoidTy) {
- PHI = new PHINode(CalledFunc->getReturnType(), CI->getName());
-
// The PHI node should go at the front of the new basic block to merge all
// possible incoming values.
//
- NewBB->getInstList().push_front(PHI);
+ PHI = new PHINode(CalledFunc->getReturnType(), CI->getName(),
+ NewBB->begin());
// Anything that used the result of the function call should now use the PHI
// node as their operand.
}
// Add a branch to the code that was after the original Call.
- IBB->getInstList().push_back(new BranchInst(NewBB));
+ new BranchInst(NewBB, IBB->end());
break;
}
case Instruction::Br:
if (F.getReturnType() != Type::VoidTy) {
// If the function doesn't return void... add a PHI node to the block...
- PHINode *PN = new PHINode(F.getReturnType(), "UnifiedRetVal");
- NewRetBlock->getInstList().push_back(PN);
+ PHINode *PN = new PHINode(F.getReturnType(), "UnifiedRetVal",
+ NewRetBlock.end());
// Add an incoming element to the PHI node for every return instruction that
// is merging into this new block...
PN->addIncoming((*I)->getTerminator()->getOperand(0), *I);
// Add a return instruction to return the result of the PHI node...
- NewRetBlock->getInstList().push_back(new ReturnInst(PN));
+ new ReturnInst(PN, NewRetBlock.end());
} else {
// If it returns void, just add a return void instruction to the block
- NewRetBlock->getInstList().push_back(new ReturnInst());
+ new ReturnInst(0, NewRetBlock.end());
}
// Loop over all of the blocks, replacing the return instruction with an
for (vector<BasicBlock*>::iterator I = ReturningBlocks.begin(),
E = ReturningBlocks.end(); I != E; ++I) {
(*I)->getInstList().pop_back(); // Remove the return insn
- (*I)->getInstList().push_back(new BranchInst(NewRetBlock));
+ new BranchInst(NewRetBlock, (*I)->end());
}
ExitNode = NewRetBlock;
return true;