This is an updated version of the patch per Owen's review:<div> * all queues merged into one block queue!</div><div> * the two pred_iterator walks folded back into one. Win!</div><div> * hasEdgeValue removed. getEdgeValue will now enqueue blocks as needed.</div>

<div><br></div><div>Nick<br><br><div class="gmail_quote">On 16 December 2010 16:22, Nick Lewycky <span dir="ltr"><<a href="mailto:nlewycky@google.com">nlewycky@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

This patch removes all recursion from LazyValueInfo by breaking it up into five queues and many helper functions. In this patch<div> * getValue{InBlock,OnEdge} are now purely externally facing and their short-circuit cases were sunk</div>


<div> * getEdgeValue was cloned into hasEdgeValue which has the surprising side-effect of queueing the blocks we need in order to solve the edge (if applicable)</div><div> * Having both hasEdgeValue and getEdgeValue means that we use pred_iterator twice instead of once per edge query. In exchange, I rigged the getBlockValue queries on PHINodes to use the phi node's list of predecessors directly instead of pred_iterator.</div>


<div> * getBlockValue now does a retrieval of the cached value and nothing more, the compute was broken into four solveBlockValue* methods.</div><div><br></div><div>The good news is that it passes make check, a nightly test, and my own internal testcase (yay!). Please review!</div>


<div><br></div><font color="#888888"><div>Nick</div><div><br></div>
</font></blockquote></div><br></div>