diff options
author | Chris Lattner <sabre@nondot.org> | 2003-11-10 04:10:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-11-10 04:10:50 +0000 |
commit | d23520cd9403c3c6fe8e7ea974ae0b593772345c (patch) | |
tree | bd0fb5a67aa625640d84831e32dd68abb1b55a94 /lib/Transforms/Utils/BreakCriticalEdges.cpp | |
parent | d9c5c5e12ff2d8856da61c3fa009d0f960255029 (diff) |
Adjust to new critical edge interface
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9853 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/BreakCriticalEdges.cpp')
-rw-r--r-- | lib/Transforms/Utils/BreakCriticalEdges.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/Transforms/Utils/BreakCriticalEdges.cpp b/lib/Transforms/Utils/BreakCriticalEdges.cpp index 8f8f0eea2d..5d31016fe8 100644 --- a/lib/Transforms/Utils/BreakCriticalEdges.cpp +++ b/lib/Transforms/Utils/BreakCriticalEdges.cpp @@ -16,6 +16,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Function.h" #include "llvm/iTerminators.h" @@ -66,13 +67,14 @@ bool isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum) { return I != E; } -// SplitCriticalEdge - Insert a new node node to split the critical edge. This -// will update DominatorSet, ImmediateDominator and DominatorTree information if -// it is available, thus calling this pass will not invalidate either of them. +// SplitCriticalEdge - If this edge is a critical edge, insert a new node to +// split the critical edge. This will update DominatorSet, ImmediateDominator, +// DominatorTree, and DominatorFrontier information if it is available, thus +// calling this pass will not invalidate either of them. This returns true if +// the edge was split, false otherwise. // -void SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P) { - assert(isCriticalEdge(TI, SuccNum) && - "Cannot break a critical edge, if it isn't a critical edge"); +bool SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P) { + if (!isCriticalEdge(TI, SuccNum)) return false; BasicBlock *TIBB = TI->getParent(); BasicBlock *DestBB = TI->getSuccessor(SuccNum); @@ -100,7 +102,7 @@ void SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P) { } // If we don't have a pass object, we can't update anything... - if (P == 0) return; + if (P == 0) return true; // Now update analysis information. These are the analyses that we are // currently capable of updating... @@ -142,6 +144,7 @@ void SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P) { NewDFSet.insert(DestBB); DF->addBasicBlock(NewBB, NewDFSet); } + return true; } // runOnFunction - Loop over all of the edges in the CFG, breaking critical @@ -153,8 +156,7 @@ bool BreakCriticalEdges::runOnFunction(Function &F) { TerminatorInst *TI = I->getTerminator(); if (TI->getNumSuccessors() > 1) for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) - if (isCriticalEdge(TI, i)) { - SplitCriticalEdge(TI, i, this); + if (SplitCriticalEdge(TI, i, this)) { ++NumBroken; Changed = true; } |