RFR (S): 8148994: Replacing MH::invokeBasic with a direct call breaks LF customization
vladimir.kozlov at oracle.com
Thu Feb 4 16:53:38 UTC 2016
Seems good. It is all mystery for me :)
On 2/4/16 8:32 AM, Vladimir Ivanov wrote:
> 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  to clean up the tests later.
> Best regards,
> Vladimir Ivanov
>  https://bugs.openjdk.java.net/browse/JDK-8149040
> On 2/4/16 6:51 PM, Vladimir Ivanov wrote:
>> JDK-8072008  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
>>  https://bugs.openjdk.java.net/browse/JDK-8072008
>> "Emit direct call instead of linkTo* for recursive indy/MH.invoke*
More information about the hotspot-compiler-dev