RFR (S) 8131782: C1 Class.cast optimization breaks when Class is loaded from static final

Aleksey Shipilev aleksey.shipilev at oracle.com
Mon Jul 20 13:52:15 UTC 2015


Hi,

On the road from Unsafe to VarHandles lies a small deficiency in C1
Class.cast/isInstance optimization: the canonicalizer folds constant
class perfectly when it is coming from "inlined" constant, but not from
static final, because the constant "shapes" are different:
  https://bugs.openjdk.java.net/browse/JDK-8131782

And here is the fix:
  http://cr.openjdk.java.net/~shade/8131782/webrev.01/

(There is another ClassConstant shape, which is, AFAIU, the constant
"receiver" class as discovered within the static method. It does not
seem to appear in current java.lang.Class, and there seems to be no way
for users to stumble upon such a pattern. Which also means I can't do a
targeted test for it.)

Testing:
  * JPRT -testset hotspot on all open platforms;
  * Targeted benchmarks (see JIRA ticket)

Thanks,
-Aleksey

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150720/87c60161/signature.asc>


More information about the hotspot-compiler-dev mailing list