RFR (S): 8148994: Replacing MH::invokeBasic with a direct call breaks LF customization
forax at univ-mlv.fr
Thu Feb 4 17:13:05 UTC 2016
Perhaps a stupid question, but why LF customization doesn't trigger a recompilation if invokeBasic is already compiled into a direct call ?
----- Mail original -----
> De: "Vladimir Ivanov" <vladimir.x.ivanov at oracle.com>
> À: "hotspot compiler" <hotspot-compiler-dev at openjdk.java.net>
> Envoyé: Jeudi 4 Février 2016 17:32:33
> Objet: Re:  RFR (S): 8148994: Replacing MH::invokeBasic with a direct call breaks LF customization
> 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:
> > http://cr.openjdk.java.net/~vlivanov/8148994/webrev.00
> > https://bugs.openjdk.java.net/browse/JDK-8148994
> > 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*
> > calls"
More information about the hotspot-compiler-dev