mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-20 02:34:48 +00:00
When inserting new instructions, use getFirstInsertionPt instead of
getFirstNonPHI so that it will skip over the landingpad instructions as well. llvm-svn: 138537
This commit is contained in:
parent
6c89acc6d1
commit
bc21b6ec6d
@ -1145,7 +1145,7 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
|
||||
// If this is an invoke instruction, we should insert it after the first
|
||||
// non-phi, instruction in the normal successor block.
|
||||
if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) {
|
||||
BasicBlock::iterator I = II->getNormalDest()->getFirstNonPHI();
|
||||
BasicBlock::iterator I = II->getNormalDest()->getFirstInsertionPt();
|
||||
InsertNewInstBefore(NC, *I);
|
||||
} else {
|
||||
// Otherwise, it's a call, just insert cast right after the call.
|
||||
|
@ -909,7 +909,7 @@ BasicBlock::iterator PathProfiler::getInsertionPoint(BasicBlock* block, Value*
|
||||
pathNumber) {
|
||||
if(pathNumber == NULL || isa<ConstantInt>(pathNumber)
|
||||
|| (((Instruction*)(pathNumber))->getParent()) != block) {
|
||||
return(block->getFirstNonPHI());
|
||||
return(block->getFirstInsertionPt());
|
||||
} else {
|
||||
Instruction* pathNumberInst = (Instruction*) (pathNumber);
|
||||
BasicBlock::iterator insertPoint;
|
||||
@ -930,7 +930,7 @@ BasicBlock::iterator PathProfiler::getInsertionPoint(BasicBlock* block, Value*
|
||||
// A PHINode is created in the node, and its values initialized to -1U.
|
||||
void PathProfiler::preparePHI(BLInstrumentationNode* node) {
|
||||
BasicBlock* block = node->getBlock();
|
||||
BasicBlock::iterator insertPoint = block->getFirstNonPHI();
|
||||
BasicBlock::iterator insertPoint = block->getFirstInsertionPt();
|
||||
pred_iterator PB = pred_begin(node->getBlock()),
|
||||
PE = pred_end(node->getBlock());
|
||||
PHINode* phi = PHINode::Create(Type::getInt32Ty(*Context),
|
||||
@ -999,7 +999,7 @@ void PathProfiler::insertNumberIncrement(BLInstrumentationNode* node,
|
||||
BasicBlock::iterator insertPoint;
|
||||
|
||||
if( atBeginning )
|
||||
insertPoint = block->getFirstNonPHI();
|
||||
insertPoint = block->getFirstInsertionPt();
|
||||
else
|
||||
insertPoint = block->getTerminator();
|
||||
|
||||
@ -1139,7 +1139,7 @@ void PathProfiler::insertInstrumentationStartingAt(BLInstrumentationEdge* edge,
|
||||
}
|
||||
|
||||
BasicBlock::iterator insertPoint = atBeginning ?
|
||||
instrumentNode->getBlock()->getFirstNonPHI() :
|
||||
instrumentNode->getBlock()->getFirstInsertionPt() :
|
||||
instrumentNode->getBlock()->getTerminator();
|
||||
|
||||
// add information from the bottom edge, if it exists
|
||||
@ -1171,7 +1171,7 @@ void PathProfiler::insertInstrumentationStartingAt(BLInstrumentationEdge* edge,
|
||||
// Insert instrumentation if this is a normal edge
|
||||
else {
|
||||
BasicBlock::iterator insertPoint = atBeginning ?
|
||||
instrumentNode->getBlock()->getFirstNonPHI() :
|
||||
instrumentNode->getBlock()->getFirstInsertionPt() :
|
||||
instrumentNode->getBlock()->getTerminator();
|
||||
|
||||
if( edge->isInitialization() ) { // initialize path number
|
||||
@ -1232,7 +1232,7 @@ void PathProfiler::insertInstrumentation(
|
||||
end = callEdges.end(); edge != end; edge++ ) {
|
||||
BLInstrumentationNode* node =
|
||||
(BLInstrumentationNode*)(*edge)->getSource();
|
||||
BasicBlock::iterator insertPoint = node->getBlock()->getFirstNonPHI();
|
||||
BasicBlock::iterator insertPoint = node->getBlock()->getFirstInsertionPt();
|
||||
|
||||
// Find the first function call
|
||||
while( ((Instruction&)(*insertPoint)).getOpcode() != Instruction::Call )
|
||||
|
@ -107,7 +107,7 @@ void llvm::InsertProfilingInitCall(Function *MainFn, const char *FnName,
|
||||
void llvm::IncrementCounterInBlock(BasicBlock *BB, unsigned CounterNum,
|
||||
GlobalValue *CounterArray, bool beginning) {
|
||||
// Insert the increment after any alloca or PHI instructions...
|
||||
BasicBlock::iterator InsertPos = beginning ? BB->getFirstNonPHI() :
|
||||
BasicBlock::iterator InsertPos = beginning ? BB->getFirstInsertionPt() :
|
||||
BB->getTerminator();
|
||||
while (isa<AllocaInst>(InsertPos))
|
||||
++InsertPos;
|
||||
|
@ -3621,10 +3621,11 @@ void LSRInstance::RewriteForPHI(PHINode *PN,
|
||||
// users.
|
||||
if (e != 1 && BB->getTerminator()->getNumSuccessors() > 1 &&
|
||||
!isa<IndirectBrInst>(BB->getTerminator())) {
|
||||
Loop *PNLoop = LI.getLoopFor(PN->getParent());
|
||||
if (!PNLoop || PN->getParent() != PNLoop->getHeader()) {
|
||||
BasicBlock *Parent = PN->getParent();
|
||||
Loop *PNLoop = LI.getLoopFor(Parent);
|
||||
if (!PNLoop || Parent != PNLoop->getHeader()) {
|
||||
// Split the critical edge.
|
||||
BasicBlock *NewBB = SplitCriticalEdge(BB, PN->getParent(), P);
|
||||
BasicBlock *NewBB = SplitCriticalEdge(BB, Parent, P);
|
||||
|
||||
// If PN is outside of the loop and BB is in the loop, we want to
|
||||
// move the block to be immediately before the PHI block, not
|
||||
|
@ -2687,8 +2687,8 @@ void ObjCARCOpt::MoveCalls(Value *Arg,
|
||||
// The invoke's return value isn't available in the unwind block,
|
||||
// but our releases will never depend on it, because they must be
|
||||
// paired with retains from before the invoke.
|
||||
InsertPts[0] = II->getNormalDest()->getFirstNonPHI();
|
||||
InsertPts[1] = II->getUnwindDest()->getFirstNonPHI();
|
||||
InsertPts[0] = II->getNormalDest()->getFirstInsertionPt();
|
||||
InsertPts[1] = II->getUnwindDest()->getFirstInsertionPt();
|
||||
} else {
|
||||
// Insert code immediately after the last use.
|
||||
InsertPts[0] = llvm::next(BasicBlock::iterator(LastUse));
|
||||
|
@ -240,14 +240,14 @@ void LowerInvoke::rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo,
|
||||
CallInst* StackSaveRet = CallInst::Create(StackSaveFn, "ssret", II);
|
||||
new StoreInst(StackSaveRet, StackPtr, true, II); // volatile
|
||||
|
||||
BasicBlock::iterator NI = II->getNormalDest()->getFirstNonPHI();
|
||||
BasicBlock::iterator NI = II->getNormalDest()->getFirstInsertionPt();
|
||||
// nonvolatile.
|
||||
new StoreInst(Constant::getNullValue(Type::getInt32Ty(II->getContext())),
|
||||
InvokeNum, false, NI);
|
||||
|
||||
Instruction* StackPtrLoad = new LoadInst(StackPtr, "stackptr.restore", true,
|
||||
II->getUnwindDest()->getFirstNonPHI()
|
||||
);
|
||||
Instruction* StackPtrLoad =
|
||||
new LoadInst(StackPtr, "stackptr.restore", true,
|
||||
II->getUnwindDest()->getFirstInsertionPt());
|
||||
CallInst::Create(StackRestoreFn, StackPtrLoad, "")->insertAfter(StackPtrLoad);
|
||||
|
||||
// Add a switch case to our unwind block.
|
||||
|
Loading…
x
Reference in New Issue
Block a user