RFR(M): 8204615: [lworld] C2 support for java.lang.Object methods on value types
Tobias Hartmann
tobias.hartmann at oracle.com
Fri Jul 6 10:26:41 UTC 2018
Hi Roland,
On 06.07.2018 10:51, Roland Westrelin wrote:
> If the method is deoptimized once the the monitor is being locked (by a
> concurrent class loading), then we would not want to reexecute the
> bytecode. Not sure if we can have a single bytecode where sometimes we
> want to reexecute the bytecode, sometimes not.
Yes, we would need to be able to control re-execution from the runtime and only re-execute if we
deoptimize due to an exception when trying to lock on a value type. Sounds complicated.
> Sure. The thing I still don't understand is why the bci of the
> monitorenter, given it can throw, is not included in the range covered
> by the exception handler. Shouldn't it be?
I'm not sure either but if I don't increment the bci, for example test76 fails with:
Caused by: java.lang.IllegalMonitorStateException
at compiler.valhalla.valuetypes.TestLWorld.test76(TestLWorld.java:2066)
at compiler.valhalla.valuetypes.TestLWorld.test76_verifier(TestLWorld.java:2073)
... 6 more
In the interpreter, we increment rbcp as well before locking the object which may throw:
// Increment bcp to point to the next bytecode, so exception
// handling for async. exceptions work correctly.
// The object has already been poped from the stack, so the
// expression stack looks correct.
__ increment(rbcp);
[...]
__ lock_object(rmon);
http://hg.openjdk.java.net/valhalla/valhalla/file/afd996f10a3b/src/hotspot/cpu/x86/templateTable_x86.cpp#l4788
But I'm not sure why that is necessary..
Best regards,
Tobias
More information about the valhalla-dev
mailing list