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

Roland Westrelin rwestrel at redhat.com
Tue Dec 13 08:44:49 UTC 2016


Hi Tobias,

> Zoltan recently pushed a change that removed the dependencies on the value factory method (which is not there for a DVT):
> http://hg.openjdk.java.net/valhalla/valhalla/hotspot/rev/4be6e6ebc443
>
> I think you need to rebase your changes accordingly.

Here it is rebased:

http://cr.openjdk.java.net/~roland/valhalla/callingconvention/webrev.02/

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

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