Add getFirstInsertionPt() method.

getFirstInsertionPt() returns an iterator to the first insertion point in a
basic block. This is after all PHIs and any other instruction which is required
to be at the top of the basic block (like LandingPadInst).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137744 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling 2011-08-16 20:42:52 +00:00
parent 23b49ba6d5
commit d2e103daf8
2 changed files with 15 additions and 0 deletions

View File

@ -145,6 +145,15 @@ public:
return const_cast<BasicBlock*>(this)->getFirstNonPHIOrDbgOrLifetime(); return const_cast<BasicBlock*>(this)->getFirstNonPHIOrDbgOrLifetime();
} }
/// getFirstInsertionPt - Returns an iterator to the first instruction in this
/// block that is suitable for inserting a non-PHI instruction. In particular,
/// it skips all PHIs and LandingPad instructions. Returns 0 if there are no
/// non-PHI instructions.
iterator getFirstInsertionPt();
const_iterator getFirstInsertionPt() const {
return const_cast<BasicBlock*>(this)->getFirstInsertionPt();
}
/// removeFromParent - This method unlinks 'this' from the containing /// removeFromParent - This method unlinks 'this' from the containing
/// function, but does not delete it. /// function, but does not delete it.
/// ///

View File

@ -167,6 +167,12 @@ Instruction* BasicBlock::getFirstNonPHIOrDbgOrLifetime() {
return &*i; return &*i;
} }
BasicBlock::iterator BasicBlock::getFirstInsertionPt() {
iterator InsertPt = getFirstNonPHI();
if (isa<LandingPadInst>(InsertPt)) ++InsertPt;
return InsertPt;
}
void BasicBlock::dropAllReferences() { void BasicBlock::dropAllReferences() {
for(iterator I = begin(), E = end(); I != E; ++I) for(iterator I = begin(), E = end(); I != E; ++I)
I->dropAllReferences(); I->dropAllReferences();