diff options
Diffstat (limited to 'lib/Transforms/Utils/BasicBlockUtils.cpp')
| -rw-r--r-- | lib/Transforms/Utils/BasicBlockUtils.cpp | 29 | 
1 files changed, 18 insertions, 11 deletions
diff --git a/lib/Transforms/Utils/BasicBlockUtils.cpp b/lib/Transforms/Utils/BasicBlockUtils.cpp index 7bc4fcdf368b..1f62dabb2014 100644 --- a/lib/Transforms/Utils/BasicBlockUtils.cpp +++ b/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -274,24 +274,31 @@ void llvm::RemoveSuccessor(TerminatorInst *TI, unsigned SuccNum) {      ReplaceInstWithInst(TI, NewTI);  } -/// SplitEdge -  Split the edge connecting specified block. Pass P must  -/// not be NULL.  -BasicBlock *llvm::SplitEdge(BasicBlock *BB, BasicBlock *Succ, Pass *P) { -  TerminatorInst *LatchTerm = BB->getTerminator(); -  unsigned SuccNum = 0; +/// GetSuccessorNumber - Search for the specified successor of basic block BB +/// and return its position in the terminator instruction's list of +/// successors.  It is an error to call this with a block that is not a +/// successor. +unsigned llvm::GetSuccessorNumber(BasicBlock *BB, BasicBlock *Succ) { +  TerminatorInst *Term = BB->getTerminator();  #ifndef NDEBUG -  unsigned e = LatchTerm->getNumSuccessors(); +  unsigned e = Term->getNumSuccessors();  #endif    for (unsigned i = 0; ; ++i) {      assert(i != e && "Didn't find edge?"); -    if (LatchTerm->getSuccessor(i) == Succ) { -      SuccNum = i; -      break; -    } +    if (Term->getSuccessor(i) == Succ) +      return i;    } +  return 0; +} + +/// SplitEdge -  Split the edge connecting specified block. Pass P must  +/// not be NULL.  +BasicBlock *llvm::SplitEdge(BasicBlock *BB, BasicBlock *Succ, Pass *P) { +  unsigned SuccNum = GetSuccessorNumber(BB, Succ);    // If this is a critical edge, let SplitCriticalEdge do it. -  if (SplitCriticalEdge(BB->getTerminator(), SuccNum, P)) +  TerminatorInst *LatchTerm = BB->getTerminator(); +  if (SplitCriticalEdge(LatchTerm, SuccNum, P))      return LatchTerm->getSuccessor(SuccNum);    // If the edge isn't critical, then BB has a single successor or Succ has a  | 
