<div dir="ltr"><div class="gmail_extra">+llvmdev<br><br><div class="gmail_quote">On Fri, Mar 21, 2014 at 3:43 PM, Rui Ueyama <span dir="ltr"><<a href="mailto:ruiu@google.com" target="_blank">ruiu@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>I'm trying to debug an issue that LLD sometimes get into an infinite loop in setChainRoot() in LayoutPass.cpp. It looks like the cause is either buildPrecededByTable() handles layoutBefore edges in a wrong way or we construct a contradictory layout-before/layout-after graph.</div>


<div><br></div><div>At this point I started thinking that I'm wasting time on data structure that's more complicated than it needs to be. LayoutPass.cpp is I think the most complicated piece of code in our code base and is also hard to debug. If we can simplify it we totally should do.</div>


<div><br></div><div>So, I'm planning to remove one of layout-before or layout-after edges from the graph. Currently, in LLD, if node X has an outgoing layout-before edge to Y, Y always has an outgoing layout-after edge to X. In other words it's doubly-linked. Doubly-linked edge is useful if you need bi-directional access, however, we don't need it in LayoutPass. We only need one of two.</div>


<div><br></div><div>Removing one of layout-before/layout-after edges has three benefits:</div><div><br></div><div> 1. Reduces memory usage and runtime overhead</div><div> 2. Simpler code and algorithm</div><div> 3. No need to maintain consistency between layout-before/layout-after edges, which is often a cause of nasty bugs.</div>


<div><br></div><div>Does this sound good?</div></div>
</blockquote></div><br></div></div>