diff options
Diffstat (limited to 'llvm/lib/IR/BasicBlock.cpp')
-rw-r--r-- | llvm/lib/IR/BasicBlock.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp index 0a04494..b5671a6 100644 --- a/llvm/lib/IR/BasicBlock.cpp +++ b/llvm/lib/IR/BasicBlock.cpp @@ -197,7 +197,7 @@ BasicBlock::iterator BasicBlock::getFirstInsertionPt() { return end(); iterator InsertPt = FirstNonPHI; - if (isa<LandingPadInst>(InsertPt)) ++InsertPt; + if (InsertPt->isEHPad()) ++InsertPt; return InsertPt; } @@ -333,6 +333,17 @@ void BasicBlock::removePredecessor(BasicBlock *Pred, } } +bool BasicBlock::canSplitPredecessors() const { + const Instruction *FirstNonPHI = getFirstNonPHI(); + if (isa<LandingPadInst>(FirstNonPHI)) + return true; + // This is perhaps a little conservative because constructs like + // CleanupBlockInst are pretty easy to split. However, SplitBlockPredecessors + // cannot handle such things just yet. + if (FirstNonPHI->isEHPad()) + return false; + return true; +} /// This splits a basic block into two at the specified /// instruction. Note that all instructions BEFORE the specified iterator stay |