<div dir="ltr">Hi Vladimir,<div><br></div><div>Thanks for looking at it. I added the other cases and added a missing condition check.</div><div>The patch is updated in place:&nbsp;<a href="https://gist.github.com/rednaxelafx/8964030">https://gist.github.com/rednaxelafx/8964030</a></div>
<div><br></div><div>Ran a few small cases on case 1 and 3 manually and the resulting IR graphs were right. I wasn&#39;t able to check the case 2 (&quot;Change ((x &amp; m) u&lt;= m) to always true&quot;) though, I don&#39;t know what Java code could be compiled into that pattern.</div>
<div><br></div><div>Thanks,</div><div>Kris</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Feb 12, 2014 at 2:00 PM, Vladimir Kozlov <span dir="ltr">&lt;<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@oracle.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Looks reasonable. Kris, you need also look for other patterns listed in JDK-8003585.<br>
<br>
Thanks,<br>
Vladimir<div class="im"><br>
<br>
On 2/12/14 12:39 PM, Krystal Mok wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
Hi Martin and John,<br>
<br>
I did a quick-and-dirty patch and it seems to work:<br>
<a href="https://gist.github.com/rednaxelafx/8964030" target="_blank">https://gist.github.com/<u></u>rednaxelafx/8964030</a><br>
If it looks right then I&#39;ll refactor that code a little bit and send it<br>
in for official review.<br>
<br>
- Kris<br>
<br>
<br>
On Wed, Feb 12, 2014 at 11:17 AM, John Rose &lt;<a href="mailto:john.r.rose@oracle.com" target="_blank">john.r.rose@oracle.com</a><br></div><div class="im">
&lt;mailto:<a href="mailto:john.r.rose@oracle.com" target="_blank">john.r.rose@oracle.com</a><u></u>&gt;&gt; wrote:<br>
<br>
&nbsp; &nbsp; It&#39;s totally reasonable, and is already filed as an RFE (please<br>
&nbsp; &nbsp; comment on it!):<br>
<br>
&nbsp; &nbsp; <a href="https://bugs.openjdk.java.net/browse/JDK-8003585" target="_blank">https://bugs.openjdk.java.net/<u></u>browse/JDK-8003585</a><br>
<br>
&nbsp; &nbsp; &mdash; John<br>
<br>
&nbsp; &nbsp; On Feb 12, 2014, at 9:40 AM, Martin Grajcar &lt;<a href="mailto:maaartinus@gmail.com" target="_blank">maaartinus@gmail.com</a><br></div>
&nbsp; &nbsp; &lt;mailto:<a href="mailto:maaartinus@gmail.com" target="_blank">maaartinus@gmail.com</a>&gt;&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
&nbsp; &nbsp; Most hash tables are power-of-two sized so that they can use<br>
&nbsp; &nbsp; masking for the access. It looks like the bounds check doesn&#39;t get<br>
&nbsp; &nbsp; eliminated, although it could be.<br>
<br>
&nbsp; &nbsp; Based on the equivalence |a[x &amp; (a.length - 1)]| throws if and<br></div>
&nbsp; &nbsp; only if |a.length == 0|, I&#39;m proposing this simple algorithm:<br>
<br>
&nbsp; &nbsp; &nbsp; * For each array access, check if the index has been computed<br>
&nbsp; &nbsp; &nbsp; &nbsp; via a bitwise and.<br>
&nbsp; &nbsp; &nbsp; * If so, check if either of the operands was computed as length<br>
&nbsp; &nbsp; &nbsp; &nbsp; minus one.<br>
&nbsp; &nbsp; &nbsp; * If so, replace the bounds check by a zero-length check.<div class="im"><br>
<br>
&nbsp; &nbsp; This zero-length check can then be easily moved out of the loop by<br>
&nbsp; &nbsp; the existing optimizations.<br>
<br>
&nbsp; &nbsp; I hope I&#39;m not talking non-sense. For more details see<br>
&nbsp; &nbsp; <a href="http://stackoverflow.com/questions/21702939/why-the-bounds-check-doesnt-get-eliminated" target="_blank">http://stackoverflow.com/<u></u>questions/21702939/why-the-<u></u>bounds-check-doesnt-get-<u></u>eliminated</a><br>

<br>
&nbsp; &nbsp; Regards,<br>
&nbsp; &nbsp; Martin.<br>
</div></blockquote>
<br>
<br>
</blockquote>
</blockquote></div><br></div>