forked from OSchip/llvm-project
parent
c944417749
commit
b5b6dc49e2
|
@ -92,6 +92,13 @@ 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.
|
||||
///
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue