<div dir="ltr">Hi Dan,<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><br></span><div>So can you explain how you aren't doing this?<br><br></div><div>It looksl ike you think the lattice goes</div><div>undefined</div><div>overdefined</div><div>constant</div><div><br></div><div>That should 100% not be the case</div><div>the lattice order should be</div><div>undefined</div><div>constant</div><div>overdefined</div><div><br></div><div>undefined means you don't know</div><div>constant means it has one value.</div><div>overdefined means it has too many values<br></div><div><br></div><div>This is a traditional value range lattice (though sometimes there are more things in the middle).</div><div>There is no way you should go from overdefined back to constant.</div><span class=""><div><br></div></span></div></div></div></blockquote><div>Ah, I see. Thanks for your explanation! I think you are absolutely correct, and I misunderstood lattice value 'overdefined'. The original code is like this,</div><div><br></div><div>  if ((!BBLV.isUndefined() {<br></div><div>     ...</div><div>     return;</div><div>  }</div><div><br></div><div><div>  // Otherwise, this is the first time we're seeing this block.  Reset the</div><div>  // lattice value to overdefined, so that cycles will terminate and be</div><div>  // conservatively correct.</div><div>  BBLV.markOverdefined();</div></div><div><br></div><div>So this algorithm is really conservative. I think the solution might be removing this lowering or adding threshold control for this lowering. Do you have any suggestions?</div><div><br></div><div>Thanks,</div><div>-Jiangning </div></div></div></div>