RFR(S): 8207773: [lworld] C2 should not allocate when returning a value type as Object from an inlined method
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Jul 18 11:29:15 UTC 2018
Hi,
please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8207773
http://cr.openjdk.java.net/~thartmann/8207773/webrev.00/
When inlining a method that returns a value type as java.lang.Object, C2 will allocate the value
type in the scope of the inlined method (see TestLWorld::test83). If the caller casts the return
value back to a value type, the now unnecessary allocation might stay and affect performance.
We should not allocate the returned value type when inlining but only if we return from the root
method (this is handled in parse1.cpp:2339). If required, caller will take care of the allocation.
Thanks a lot to Remi Forax for reporting this issue and helping with reproducing!
Here are the results of Remi's benchmark with the patched JVM:
Benchmark Mode Cnt Score Error Units
ReifiedListBenchMark.arraylist_integer_get avgt 9 0.065 ± 0.010 ms/op
ReifiedListBenchMark.reifiedlist_intbox_get avgt 9 593.495 ± 106.121 ms/op
ReifiedListBenchMark.valuelist_intbox_get avgt 9 0.033 ± 0.007 ms/op
ReifiedListBenchMark.valuelist_intbox_inlined_reduce avgt 9 0.030 ± 0.002 ms/op
ReifiedListBenchMark.valuelist_intbox_innervalue_inlined_reduce avgt 9 0.029 ± 0.001 ms/op
ReifiedListBenchMark.valuelist_intbox_reduce avgt 9 0.033 ± 0.009 ms/op
Best regards,
Tobias
More information about the valhalla-dev
mailing list