diff options
Diffstat (limited to 'llvm/lib/Analysis')
| -rw-r--r-- | llvm/lib/Analysis/CFG.cpp | 11 | 
1 files changed, 9 insertions, 2 deletions
| diff --git a/llvm/lib/Analysis/CFG.cpp b/llvm/lib/Analysis/CFG.cpp index 18b83d6838c..8215b4ecbb0 100644 --- a/llvm/lib/Analysis/CFG.cpp +++ b/llvm/lib/Analysis/CFG.cpp @@ -87,11 +87,18 @@ unsigned llvm::GetSuccessorNumber(const BasicBlock *BB,  /// with multiple predecessors.  bool llvm::isCriticalEdge(const Instruction *TI, unsigned SuccNum,                            bool AllowIdenticalEdges) { -  assert(TI->isTerminator() && "Must be a terminator to have successors!");    assert(SuccNum < TI->getNumSuccessors() && "Illegal edge specification!"); +  return isCriticalEdge(TI, TI->getSuccessor(SuccNum), AllowIdenticalEdges); +} + +bool llvm::isCriticalEdge(const Instruction *TI, const BasicBlock *Dest, +                          bool AllowIdenticalEdges) { +  assert(TI->isTerminator() && "Must be a terminator to have successors!");    if (TI->getNumSuccessors() == 1) return false; -  const BasicBlock *Dest = TI->getSuccessor(SuccNum); +  assert(find(predecessors(Dest), TI->getParent()) != pred_end(Dest) && +         "No edge between TI's block and Dest."); +    const_pred_iterator I = pred_begin(Dest), E = pred_end(Dest);    // If there is more than one predecessor, this is a critical edge... | 

