diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/Local.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 22 | 
1 files changed, 10 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 0046945..b1dd733 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -536,9 +536,9 @@ static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {  /// TryToSimplifyUncondBranchFromEmptyBlock - BB is known to contain an  /// unconditional branch, and contains no instructions other than PHI nodes, -/// potential side-effect free intrinsics and the branch.  If possible, -/// eliminate BB by rewriting all the predecessors to branch to the successor -/// block and return true.  If we can't transform, return false. +/// potential debug intrinsics and the branch.  If possible, eliminate BB by +/// rewriting all the predecessors to branch to the successor block and return +/// true.  If we can't transform, return false.  bool llvm::TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB) {    assert(BB != &BB->getParent()->getEntryBlock() &&           "TryToSimplifyUncondBranchFromEmptyBlock called on entry block!"); @@ -613,15 +613,13 @@ bool llvm::TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB) {      }    } -  if (Succ->getSinglePredecessor()) { -    // BB is the only predecessor of Succ, so Succ will end up with exactly -    // the same predecessors BB had. - -    // Copy over any phi, debug or lifetime instruction. -    BB->getTerminator()->eraseFromParent(); -    Succ->getInstList().splice(Succ->begin(), BB->getInstList()); -  } else { -    while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) { +  while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) { +    if (Succ->getSinglePredecessor()) { +      // BB is the only predecessor of Succ, so Succ will end up with exactly +      // the same predecessors BB had. +      Succ->getInstList().splice(Succ->begin(), +                                 BB->getInstList(), BB->begin()); +    } else {        // We explicitly check for such uses in CanPropagatePredecessorsForPHIs.        assert(PN->use_empty() && "There shouldn't be any uses here!");        PN->eraseFromParent();  | 
