[9] RFR(S): 8158228: C1 incorrectly folds mismatched loads from stable arrays

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Jun 3 10:26:09 UTC 2016

>>> Like this we still have optimal code. What do you think?
>> I suggest to completely disable constant folding in Canonicalizer::do_LoadIndexed if LoadIndexed node is marked as mismatched.
>> Please, leave ciArray::element_value_impl as is.
> Okay, I noticed that C2 also does not fold mismatched accesses. Could you please explain why that is?

Primarily to keep the code sane :-) Unsafe accesses are the source of 
mismatched accesses and additional checks are required to filter out all 
problematic cases. So, I decided to leave them out when enabled constant 
folding of unsafe loads. My main motivation for the change was to make 
method handles for field / array element accesses as fast as using 
bytecode, and mismatched accesses didn't justify all the complications 
they cause.

> Here's the new webrev:
> http://cr.openjdk.java.net/~thartmann/8158228/webrev.02/

Looks good.

Best regards,
Vladimir Ivanov

More information about the hotspot-compiler-dev mailing list