[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 17:11:42 UTC 2016
Thanks, Vladimir!
Best regards,
Vladimir Ivanov
PS: I can share some bugs with you next time, so you can get hands-on
experience in that dark corner of the JVM ;-) Just let me know.
On 2/4/16 7:53 PM, Vladimir Kozlov wrote:
> Seems good. It is all mystery for me :)
>
> Thanks,
> Vladimir K
>
> 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 [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