RFR: 8294609: C2: Improve inlining of methods with unloaded signature classes
Vladimir Ivanov
vlivanov at openjdk.org
Thu Sep 29 21:33:23 UTC 2022
On Thu, 29 Sep 2022 18:42:49 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> C2 bails out an inlining attempt when the callee method mentions an unloaded
> class in its signature (either as an argument or return type).
>
> The current check is too strict (and caused problems in the past [1]) since it
> doesn't take into account whether the problematic class is loaded in the caller
> context. It's safe to relax the original check in such a way because class
> loader constratints ensure that both caller and callee agree on the signature
> classes.
>
> (I believe the aforementioned check [2] is redundant and can be removed even when
> the class is not yet loaded, but I'll explore it separately.)
>
> Testing: hs-tier1 - hs-tier4
>
> [1] https://mail.openjdk.org/pipermail/hotspot-compiler-dev/2020-June/038604.html
> [2] https://github.com/openjdk/jdk/blob/5f6ad926d7ea763bf61aa98c7be7087a7aa6089c/src/hotspot/share/opto/bytecodeInfo.cpp#L226
2 views have to be compatible and that's the whole purpose of class loader constraints. Any attempt to break the invariant (by loading/defining wrong class) will trigger an Error.
Old code uses callee's view and the new code relies on the closure over all loader constraints for the named class thus making a remotely loaded class visible in the local context.
Class loader constraints are installed during linkage and the comment before `SystemDictionary::check_signature_loaders()` enumerates the places where such constraints come from.
Since C2 does inlining only through linked call sites, all the constraints should be already in place.
-------------
PR: https://git.openjdk.org/jdk/pull/10496
More information about the hotspot-compiler-dev
mailing list