(original) (raw)
Hi Vladimir,
Thank you for your reviews, Vladimir.
I've removed the bogus comment and updated the webrev in place:�http://cr.openjdk.java.net/\~kmo/8003585/webrev.02/
Could someone on the compiler team run JPRT tests and push for me?
Thanks,
Kris
On Fri, Feb 14, 2014 at 11:10 AM, Vladimir Kozlov <vladimir.kozlov@oracle.com> wrote:
Hi Kris,
Changes are good.
Next comment does not describe the following optimization correctly:
\+ �// Integer expressions which perform bitwise and can be proven to
\+ �// be less than or equal (unsigned) to either operand, as long as the
\+ �// compared operand is non-negative.
originally it was for "(x & m) <= m, if and only if (m >= 0)".
Thanks,
Vladimir
On 2/13/14 7:57 PM, Krystal Mok wrote:
Hi all,
I've updated the patch again,
Webrev: http://cr.openjdk.java.net/\~kmo/8003585/webrev.02/
This version slightly differs from the original equivalence patterns as
stated in the bug report, in that it doesn't transform the following:
� �(x & array.length) < array.length
to:
� �array.length != 0
and instead transforms it to:
� �array.length u> 0
which are semantically the same.
This is done to better align with the code pattern that C2 generates for
array range checks, so that the logic in IfNode::Ideal() can better
remove redundant range checks.
Also, I've added one more pattern matching to transform:
� �array.length > 0
to:
� �array.length u> 0
(the actually code implements it inverted)
This is safe because array lengths are always >= 0, while changing the
form makes them more likely to get optimized by IfNode::Ideal() later.
With this patch, C2 can now elide redundant range checks in the
following two cases:
Case 1:
� array\[1\] = array\[2\]; // ensures array.length > 2
� Object o = array\[x & (array.length - 1)\];
Case 2:
� if (array.length > 0) { // this is a signed comparison
� � Object o = array\[x & (array.length - 1)\];
� }
I've tested the patch to compile java.util.HashMap.getNode(), and
confirmed that redundant array bounds checks are elided (matches Case 2
above).
Thanks,
Kris