[9] RFR (S): 8148994: Replacing MH::invokeBasic with a direct call breaks LF customization

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Thu Feb 4 16:32:33 UTC 2016


FYI I was asked to keep the tests intact until Jigsaw is integrated.

Removed test changes from the webrev (updated in place) and filed 
JDK-8149040 [1] to clean up the tests later.

Best regards,
Vladimir Ivanov

[1] https://bugs.openjdk.java.net/browse/JDK-8149040

On 2/4/16 6:51 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8148994/webrev.00
> https://bugs.openjdk.java.net/browse/JDK-8148994
>
> JDK-8072008 [1] introduced an optimization to bypass linker calls in
> generated code when target method can't be inlined.
>
> Unfortunately, it doesn't work well with MH::invokeBasic(), because it
> clashes with LambdaForm customization: if a call is not inlined, it is
> important for performance to update (customize) corresponding LambdaForm
> on-the-fly. MH::invokeBasic() linker does MH -> LF -> Method* ->
> _from_compiled_entry traversal on every invocation, while direct call
> points right to the _from_compiled_entry. So, any LambdaForm updates
> aren't visible until recompilation.
>
> The fix is to keep MH::invokeBasic linker, so up-to-date LambdaForm
> instance is used on every invocation.
>
> Also, cleaned up relevant tests a bit.
>
> Testing: octane, JPRT.
>
> Best regards,
> Vladimir Ivanov
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8072008
>      "Emit direct call instead of linkTo* for recursive indy/MH.invoke*
> calls"


More information about the hotspot-compiler-dev mailing list