RFR(S): 8207773: [lworld] C2 should not allocate when returning a value type as Object from an inlined method (original) (raw)

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