<div dir="ltr">I don't think there's a need to write out 20 different ways to do a range check -- I think nobody would expect all 20 to be covered by the optimizer.  Some of those variations may not map cleanly to Object::checkIndex either, nor is there any guarantee that people will update all their existing range checks (or even know about) to use Object::checkIndex -- some code will be left unoptimized no matter what.<div><br></div><div>But my point is the same as Andrew's, I think; instead of making checkIndex an intrinsic, simply add a pattern match against that exact bytecode shape (perhaps with basic canonicalization) and then still encourage people to use Object::checkIndex.  This is better than intrinsic (modulo profile pollution) since any other code that happens to use same pattern will match as well, and not require an update to use checkIndex.  Then, if someone comes to this list with an unoptimized example with a different bytecode shape and has a convincing argument that the code shape is "common", you guys can consider pattern matching that as well.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 6, 2016 at 2:50 PM, John Rose <span dir="ltr"><<a href="mailto:john.r.rose@oracle.com" target="_blank">john.r.rose@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
> On Jan 6, 2016, at 9:56 AM, Vitaly Davidovich <<a href="mailto:vitalyd@gmail.com">vitalyd@gmail.com</a>> wrote:<br>
><br>
> better canonicalization<br>
<br>
That's our first and most important tactic.  (Actually inlining is.)<br>
<br>
But the various idioms for checkIndex do not canonicalize easily. In this case the correct trade-off is not to invest more time and research and code into stronger canonicalization.<br>
<br>
We do have canonicalization of if-expressions. It's just that in this case strengthening it to cover range checks reliably is harder than the reasonable alternative.<br>
<span class="HOEnZb"><font color="#888888"><br>
– John<br>
</font></span><br>
PS.  I am tempted to write out a list of 20 different ways to code a range check but will leave that as a exercise.<br>
<br>
</blockquote></div><br></div>