C2 support for method invocations on value types

Zoltán Majó zoltan.majo at oracle.com
Fri Nov 4 15:38:39 UTC 2016

Hi Roland,

thank you for looking at the suggested change.

On 11/04/2016 04:13 PM, Roland Westrelin wrote:
> Hi Zoltan,
>> http://cr.openjdk.java.net/~zmajo/valhalla/00.invokedirect.webrev.00/
> Why is the change in Parse::create_entry_map() needed?

That change needed to avoid checking if the receiver is null with 
null_check_receiver_before_call()(we don't need to "fake" the null check 
if the callee method is inlined, I think; as value type fields are 
anyway used "directly").

But what I suggest is a bit too much: Theallocation of the oop for the 
valutype (as below) is not required, because only its fields are used 

1117 if (kit.argument(0)->is_ValueType()) {
1118 ValueTypeNode* vt = kit.argument(0)->as_ValueType();
1119 vt->store_to_memory(&kit);
1120 } else {
1121       kit.null_check_receiver_before_call(method());
1122 }

So it's probably best to just skip it. Here is what I suggest to do in 
the updated webrev [1]:

1117 if (!kit.argument(0)->is_ValueType()) {
1118       kit.null_check_receiver_before_call(method());
1119 }
1120     _caller = kit.transfer_exceptions_into_jvms();

Does that make more sense to you?

Thank you and best regards,


[1] http://cr.openjdk.java.net/~zmajo/valhalla/00.invokedirect.webrev.01/

> Roland.

More information about the valhalla-dev mailing list