-
Type:
Sub-task
-
Resolution: Fixed
-
Priority:
P4
-
Affects Version/s: repo-valhalla
-
Component/s: hotspot
-
None
Implement Method::verified_entry and Method::verified_value_ro_entry for C1-compiled methods. This will take multiple steps.
For this step, support the passing of scalarized oop parameters. E.g.,
inline class V {
Object x = null, y = null;
}
class Test {
static void test(V v1, V v2) {...}
}
When C2 calls Test.test, it scalarizes the outgoing parameters to
param0 = v1.x
param1 = v1.y
param2 = v2.x
param3 = v2.y
If the method is compiled by C1, it expects the incoming parameters to be
param0 = v1
param1 = v2
So we need to shuffle the parameters like
V tmp = new V();
tmp.x = param0; // GC barrier!
tmp.y = param1; // GC barrier!
param0 = tmp;
tmp = new V();
tmp.x = param2; // GC barrier!
tmp.y = param3; // GC barrier!
param1 = tmp;
Note that GC barrier operations need to be applied when the oop fields of the tmp object are modified.
For this step, support the passing of scalarized oop parameters. E.g.,
inline class V {
Object x = null, y = null;
}
class Test {
static void test(V v1, V v2) {...}
}
When C2 calls Test.test, it scalarizes the outgoing parameters to
param0 = v1.x
param1 = v1.y
param2 = v2.x
param3 = v2.y
If the method is compiled by C1, it expects the incoming parameters to be
param0 = v1
param1 = v2
So we need to shuffle the parameters like
V tmp = new V();
tmp.x = param0; // GC barrier!
tmp.y = param1; // GC barrier!
param0 = tmp;
tmp = new V();
tmp.x = param2; // GC barrier!
tmp.y = param3; // GC barrier!
param1 = tmp;
Note that GC barrier operations need to be applied when the oop fields of the tmp object are modified.
- relates to
-
JDK-8223390 [lworld] Shenandoah build broken since 8222989
-
- Resolved
-