RFR(S): ZGC: C2: Oop instance cloning causing skipped compiles
Nils Eliasson
nils.eliasson at oracle.com
Wed Nov 20 14:25:54 UTC 2019
Hi,
I found a few bugs after the enabling of the clone intrinsic in ZGC.
1) The arraycopy clone_basic has the parameters adjusted to work as a
memcopy. For an oop the src is pointing inside the oop to where we want
to start copying. But when we want to do a runtime call to clone - the
parameters are supposed to be the actual src oop and dst oop, and the
size should be the instance size.
For now I have made a workaround. What should be done later is using the
offset in the arraycopy node to encode where the payload is, so that the
base pointers are always correct. But that would require changes to the
BarrierSet classes of all GCs. So I leave that for next release.
2) The size parameter of the TypeFunc for the runtime call has the wrong
type. It was originally Long but missed the upper Half, it was fixed to
INT (JDK-8233834), but that is wrong and causes the compiles to be
skipped. We didn't notice that since they failed silently. That is also
why we didn't notice problem #1 too.
https://bugs.openjdk.java.net/browse/JDK-8234520
http://cr.openjdk.java.net/~neliasso/8234520/webrev.01/
Please review!
Nils
More information about the hotspot-compiler-dev
mailing list