<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, Jun 30, 2016 at 9:13 PM Xinliang David Li via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span style="line-height:1.5">However when the CG is mutated, what is the definition of 'current' SCC and current RefSCC? What is the incremental update algorithm?</span></div></div></div></blockquote><div><br></div><div>Note that this patch *does* contain code and comments that I think give detailed answers here. Not sure it makes sense to hypothesize the algorithm rather than examining an implementation of the algorithm.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><br></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Just some random thoughts: can we assume ref-edges never gets deleted or added? Can we assume any newly created/exposed call (non-ref) edges always have corresponding ref edges?  If the above conditions are true, then the refSCC DAG (DAG with collapsed refSCCs as nodes) can not be mutated. There is another condition that needs to be met in order for refSCC DAG become 'immutable': a ref edge needs to be introduced for any back edge in CG (if it is not already a ref edge). This means no new refSCC can appear via splitting or merging when CG is changed.</div><div><br></div><div>If we can guarantee RefSCC DAG is non-mutable,  the incremental update may be simplified: the SCC update is now guaranteed to be 'intra'-RefSCC (the current one). Rebuilding SCC within a refSCC could be cheap enough (assuming refSCCs are not large).</div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>David</div><div> </div></div></div></div>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>