Integrated: 8256368: Avoid repeated upcalls into Java to re-resolve MH/VH linkers/invokers

Vladimir Ivanov vlivanov at openjdk.java.net
Mon Feb 14 12:01:13 UTC 2022


On Thu, 10 Feb 2022 16:57:30 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

> It's another attempt to fix JDK-8256368 (previous one was #1453). 
> 
> @coleenp raised a question about resolution failure case (`indy_resolution_failed()`) and after a closer look it turned out the logic is broken there. 
> 
> After thinking more about it, I decided to completely drop resolution failure case handling and always perform re-resolution.
> For MethodHandle/VarHandle invokers resolution failure is very uncommon, so going through re-resolution step seems well-justified.
> 
> Original description:
> 
> Method linkage of invokehandle instructions involve an upcall into Java
> (MethodHandleNatives::linkMethod), but the result is not cached. Unless the
> upcall behaves idempotently (which is highly desirable, but not guaranteed),
> repeated invokehandle resolution attempts enter a vicious cycle in tiered mode:
> switching to a higher tier involves call site re-resolution in generated code,
> but re-resolution installs a fresh method which puts execution back into
> interpreter.
> 
> (Another prerequisite is no inlining through a invokehandle which doesn't
> normally happen in practice - relevant methods are marked w/ @ForceInline -
> except some testing modes, -Xcomp in particular.)
> 
> Proposed fix is to inspect ConstantPoolCache first. Previous resolution
> attempts from interpreter and C1 records their results there and it stabilises
> the execution.
> 
> Testing: hs-tier1 - hs-tier4

This pull request has now been integrated.

Changeset: 534e5578
Author:    Vladimir Ivanov <vlivanov at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/534e557874274255c55086b4f6128063cbd9cc58
Stats:     47 lines in 5 files changed: 22 ins; 12 del; 13 mod

8256368: Avoid repeated upcalls into Java to re-resolve MH/VH linkers/invokers

Reviewed-by: dlong, kvn

-------------

PR: https://git.openjdk.java.net/jdk/pull/7429


More information about the hotspot-compiler-dev mailing list