Hi Surinder,<div><br></div><div>Being "critical" is a property of an edge, rather than a node. An edge e = (n1, n2) is a critical edge if n1 has multiple successors and n2 has multiple predecessors. Once BreakCriticalEdges is run there will be no edge in the CFG with this property.</div>
<div><br></div><div>The way this works is that the BreakCriticalEdges pass will scan every edge e in the CFG. If e is critical then a new node, ne, will be inserted, along with new edges e1 = (n1, ne), and e2 = (ne, n2), and edge e will be removed. The edge e1 is not critical (it has only one successor, which is ne), and the edge e2 is not critical (it has only one predecessor, which is ne). So this eliminates the critical edge.</div>

<div><br></div><div>Cheers,</div><div>Lang.</div><div><br><div class="gmail_quote">On Tue, Feb 1, 2011 at 1:23 PM, Surinder <span dir="ltr"><<a href="mailto:surifilms@gmail.com" target="_blank">surifilms@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is the pass "Break Critical edges" acheives the same as edge-splitting<br>
SSA, i.e., a node has either multiple predecessors or multiple<br>
successors but not both.  A node with multiple predecessors and<br>
multiple successors is replaced by two consecutive nodes joined<br>
together.  The first node has multiple predecessors and second node as<br>
its only successor.  The second node has first node as its only<br>
predecessor and has mutliple successors.<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote></div><br></div>