RFR/RFC calling convention change for value types in compiled code

Tobias Hartmann tobias.hartmann at oracle.com
Tue Dec 13 08:54:48 UTC 2016


Hi Roland,

On 13.12.2016 09:44, Roland Westrelin wrote:
> Here it is rebased:
> 
> http://cr.openjdk.java.net/~roland/valhalla/callingconvention/webrev.02/

Looks good to me!

> I also had to make the fix below to collect all value type fields at
> a safepoint.

Good catch, I think I screwed that up when removing the double-loop.

Thanks,
Tobias

> Roland.
> 
> diff --git a/src/share/vm/opto/valuetypenode.cpp b/src/share/vm/opto/valuetypenode.cpp
> --- a/src/share/vm/opto/valuetypenode.cpp
> +++ b/src/share/vm/opto/valuetypenode.cpp
> @@ -298,7 +298,7 @@
>  void ValueTypeNode::make_scalar_in_safepoints(Compile* C) {
>    const TypeValueTypePtr* res_type = TypeValueTypePtr::make(bottom_type()->isa_valuetype(), TypePtr::NotNull);
>    ciValueKlass* vk = value_klass();
> -  uint nfields = vk->field_count();
> +  uint nfields = vk->flattened_field_count();
>    for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
>      Node* u = fast_out(i);
>      if (u->is_SafePoint() && (!u->is_Call() || u->as_Call()->has_debug_use(this))) {
> 



More information about the valhalla-dev mailing list