Move isCriticalEdge & SplitCritical into this file. While we're at it, change

the interface to SplitCriticalEdge so that it splits an edge if it is critical,
otherwise just returns false and noops if not.

llvm-svn: 9852
This commit is contained in:
Chris Lattner 2003-11-10 04:10:27 +00:00
parent a5397c883a
commit f650861760
1 changed files with 16 additions and 0 deletions

View File

@ -19,6 +19,7 @@
#include "llvm/BasicBlock.h"
class Instruction;
class Pass;
// ReplaceInstWithValue - Replace all uses of an instruction (specified by BI)
// with a value, then remove and delete the original instruction.
@ -48,4 +49,19 @@ void ReplaceInstWithInst(Instruction *From, Instruction *To);
//
void RemoveSuccessor(TerminatorInst *TI, unsigned SuccNum);
/// isCriticalEdge - Return true if the specified edge is a critical edge.
/// Critical edges are edges from a block with multiple successors to a block
/// with multiple predecessors.
///
bool isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum);
/// 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.
///
bool SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P = 0);
#endif