RFR: 8359359: AArch64: share trampolines between static calls to the same method [v6]

Mikhail Ablakatov mablakatov at openjdk.org
Thu Oct 9 17:00:05 UTC 2025


On Wed, 8 Oct 2025 17:07:28 GMT, Evgeny Astigeevich <eastigeevich at openjdk.org> wrote:

>> Mikhail Ablakatov has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 10 commits:
>> 
>>  - Merge commit '41520998aa8808452ee384b213b2a77c7bad668d'
>>  - remove implementation-dependent logic from emit_shared_trampolines()
>>  - cleanup: update copyright headers
>>  - Make the value type of the dictionary a struct instead of Pair typedef
>>  - Remove share_rc_trampoline_for and share_sc_trampoline_for
>>  - Merge branch 'master'
>>  - Address review comments from @theRealAph and @eastig
>>    - use relocInfo::relocType instead of TrampolineCallKind
>>    - move rtype from keys to values; reduce the footprint of the patch
>>  - Lift the vm.opt.TieredCompilation == null requirement from the tests
>>  - Combine the two shared trampoline request hash tables
>>  - 8359359: AArch64: share trampolines between static calls to the same method
>>    
>>    Modify the C2 compiler to share trampoline stubs between static calls
>>    that resolve to the same callee method. Since the relocation target for
>>    all static calls is initially set to the static call resolver stub, the
>>    call's target alone cannot be used to distinguish between different
>>    static method calls. Instead, trampoline stubs should be shared based
>>    on the actual callee.
>>    
>>    The `SharedTrampolineTest.java` was designed to verify the sharing of
>>    trampolines among static calls. However, due to imprecise log analysis,
>>    the test currently passes even when trampolines are not shared.
>>    Additionally, comments within the test suggest ambiguity regarding
>>    whether it was intended to assess trampoline sharing for static calls
>>    or runtime calls. To address these issues and eliminate ambiguity, this
>>    patch renames and updates the existing test. Furthermore, a new test is
>>    introduced, using the existing one as a foundation, to accurately
>>    evaluate trampoline sharing for both static and runtime calls.
>
> src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 908:
> 
>> 906:       // code during its branch shortening phase.
>> 907:       if (entry.rspec().type() == relocInfo::runtime_call_type) {
>> 908:         assert(CodeBuffer::supports_shared_stubs(), "must support shared stubs");
> 
> `assert(callee == nullptr, "Runtime calls must not have Method");`

Sure, this shouldn't be a problem, thanks.

> src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp line 1339:
> 
>> 1337:   // Trampolines may be emitted immediately or deferred until stub finalization,
>> 1338:   // enabling reuse across call sites to reduce code size.
>> 1339:   // Runtime call trampolines are shared based on the entry value.
> 
> ... on entry value -> ... on entry target

Here "value" is used as a "value of a parameter". I'll rephrase it so it's less ambiguous , thanks.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25954#discussion_r2417393474
PR Review Comment: https://git.openjdk.org/jdk/pull/25954#discussion_r2417392300


More information about the hotspot-dev mailing list