RFR 8166972: [JVMCI] reduce size of interpreter when JVMCI is enabled
Tom Rodriguez
tom.rodriguez at oracle.com
Mon Oct 10 20:39:22 UTC 2016
http://cr.openjdk.java.net/~never/8166972/webrev
https://bugs.openjdk.java.net/browse/JDK-8166972
While investigating the size of the generated interpreter with -XX:+UseJVMCICompiler we noticed that the deopt entry points had gotten significantly larger. JVMCI adds a relatively small amount of code to that entry point but it turns out there are 100 copies of this code being emitted, the 10 TOS types times 10 step values. The extra code is only needed for the execution of the first bci, which is vtos with a 0 step. The extra space had put us on the edge of the space limit for the interpreter.
Tested with Graal and also a JPRT test submission where this assembler logic was on by default in builds that define INCLUDE_JVMCI. Basically I replaced the UseJVMCICompiler tests in this webrev with true.
As an aside, there are way too many deopt entry points. In a stock JDK, the interpreter takes up 137K, of which 30K are the deopt entry points. This is from -XX:+UnlockDiagnosticVMOptions -XX:+PrintInterpreter -version for 8u92. All the sub word types are smeared into itos but are generated separately, so there are really only 6 types instead of 10. And I think step values above 5 are unnecessary too since that’s the longest fixed length encoding and the deopt machinery doesn’t appear to be prepared to handle a variable length byte code step value. It probably doesn’t matter in the end but I was very surprised by this.
More information about the hotspot-compiler-dev
mailing list