Move isCriticalEdge & SplitCritical into this file. While we're at it, change
authorChris Lattner <sabre@nondot.org>
Mon, 10 Nov 2003 04:10:27 +0000 (04:10 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 10 Nov 2003 04:10:27 +0000 (04:10 +0000)
the interface to SplitCriticalEdge so that it splits an edge if it is critical,
otherwise just returns false and noops if not.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9852 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/Utils/BasicBlockUtils.h

index 53452eb1cd781a0444cd02108ecd95489ff895ae..78e5592f44b4823e9823c563e602e517c52a01af 100644 (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