New method BasicBlock::getFirstNonPHI.

llvm-svn: 28724
This commit is contained in:
Vladimir Prus 2006-06-08 15:46:18 +00:00
parent c944417749
commit b5b6dc49e2
2 changed files with 19 additions and 1 deletions

View File

@ -91,7 +91,14 @@ public:
///
TerminatorInst *getTerminator();
const TerminatorInst *const getTerminator() const;
/// Returns a pointer to the first instructon in this block that is not a
/// PHINode instruction. When adding instruction to the beginning of the
/// basic block, they should be added before the returned value, not before
/// the first instruction, which might be PHI.
/// Returns 0 is there's no non-PHI instruction.
Instruction* getFirstNonPHI();
/// removeFromParent - This method unlinks 'this' from the containing
/// function, but does not delete it.
///

View File

@ -121,6 +121,17 @@ const TerminatorInst *const BasicBlock::getTerminator() const {
return dyn_cast<TerminatorInst>(&InstList.back());
}
Instruction* BasicBlock::getFirstNonPHI()
{
BasicBlock::iterator i = begin(), e = end();
// All valid basic blocks should have a terminator,
// which is not a PHINode. If we have invalid basic
// block we'll get assert when dereferencing past-the-end
// iterator.
while (isa<PHINode>(i)) ++i;
return &*i;
}
void BasicBlock::dropAllReferences() {
for(iterator I = begin(), E = end(); I != E; ++I)
I->dropAllReferences();