Request for review (S): C2 should recognize "obj.getClass() == A.class" code pattern
Krystal Mok
rednaxelafx at gmail.com
Tue Apr 24 09:16:07 PDT 2012
Hi all,
https://gist.github.com/2481025
Could I get some reviews for this patch, please? Any comments and
suggestions are welcomed.
I'm still pretty new to C2, and I'm taking this as an exercise to get more
familiar with the implementation details.
The idea is to optimize this code pattern:
x.getClass() == A.class
into
x._klass == klassof(A)
which shortens the original pattern by 1 load.
A scenario where this might be useful is the following code pattern:
if (x.getClass() == A.class) {
A a = (A) x; // checkcast
a.m(); // ... use a ...
}
Before this change, there would be redundant exact type check in the
generated code, as mentioned in an earlier thread [1].
After this change, the redundant check gets optimized away, because the new
pattern is the same as the one used in the fast path of
instanceof/Class.isInstance()/checkcast.
It's probably rare to see this pattern in normal Java code, where normal
virtual dispatch should be favored instead. But it might be a common
pattern in dynamic language runtime implementations.
I'll leave it to Remi to explain the original motivation for optimizing
this code pattern :-)
Tested with CTW -XX:+VerifyIterativeGVN, and SPECjvm2008.
The composite result in SPECjvm2008 seems to have dropped a little bit, I'm
not sure if that's caused by this change or by some variance on my test
machine.
Regards,
Kris
[1]:
http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2012-April/007568.html
SPECjvm2008 results:
JDK8-b35/HS24-b07 without change:
================================
compiler 668.38
compress 339.67
crypto 342.78
derby 679
mpegaudio 214.92
scimark.large 63.42
scimark.small 388.48
serial 262.37
startup 26.89
sunflow 129.93
xml 785.47
Composite result: 246.2 SPECjvm2008 Base ops/m
================================
JDK8-b35/HS24-b07 with change:
================================
compiler 629.35
compress 337.61
crypto 342.02
derby 689.93
mpegaudio 216.66
scimark.large 60.33
scimark.small 387.42
serial 233.34
startup 26.41
sunflow 131.64
xml 780.32
Composite result: 241.2 SPECjvm2008 Base ops/m
================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20120425/816e8ec4/attachment.html
More information about the hotspot-compiler-dev
mailing list