RFR: 8285487: Do not generate trampolines for runtime calls if they are not needed [v3]
Andrew Haley
aph at openjdk.java.net
Fri Apr 29 12:49:46 UTC 2022
On Thu, 28 Apr 2022 21:55:25 GMT, Evgeny Astigeevich <duke at openjdk.java.net> wrote:
>> [JDK-8280872](https://bugs.openjdk.java.net/browse/JDK-8280872) put the non-nmethod segment between two others. It made trampolines for runtime calls redundant in most cases.
>>
>> This PR uses `target_needs_far_branch()` for runtime calls to check whether they need trampolines. Trampolines are not generated if they are not needed.
>>
>> Testing:
>> - `tier1`...`tier4`: Passed
>> - `compiler/c2/aarch64/TestTrampoline.java`: Passed
>>
>> Note: `compiler/c2/aarch64/TestTrampoline.java` requires the release build. This is because debug builds have the branch range set to 2M which causes always generation of trampolines.
>
> Evgeny Astigeevich has updated the pull request incrementally with one additional commit since the last revision:
>
> Move code of target_needs_trampoline inside trampoline_call
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 578:
> 576: // If CodeCache size > 128M, such Java calls must have reserved trampolines for cases
> 577: // when a new callee address out of 128M range.
> 578: bool need_trampoline = (entry.rspec().type() == relocInfo::runtime_call_type) ?
This isn't clear. Are you trying to prove that, even if the caller is moved as far as it possibly can be from the runtime target, the branch will still be in range? That is to say, all of the code in the current CodeHeap is within 128M of the target?
-------------
PR: https://git.openjdk.java.net/jdk/pull/8403
More information about the hotspot-dev
mailing list