RFR: 8285487: AArch64: Do not generate unneeded trampolines for runtime calls [v6]

Andrew Haley aph at openjdk.org
Tue Aug 16 10:09:19 UTC 2022


On Thu, 11 Aug 2022 21:19:07 GMT, Evgeny Astigeevich <duke at openjdk.org> wrote:

>> Runtime calls are calls of non-compiled methods. Non-compiled methods stay forever in CodeCache. If they are always within the branch range, they don't need trampolines.
>> 
>> This PR adds `is_always_within_branch_range(Address entry)`.
>> 
>> Results from DaCapo: the total number of eliminated trampolines per a benchmark run
>> 
>> 
>> +----------+--------+
>> | avrora   |  15491 |
>> | batik    |  75837 |
>> | biojava  |  13927 |
>> | eclipse  | 414143 |
>> | fop      | 119267 |
>> | graphchi |   7665 |
>> | jme      |   8279 |
>> | luindex  |  56061 |
>> | lusearch |  50277 |
>> | pmd      | 132719 |
>> | sunflow  |  10689 |
>> | tomcat   | 186967 |
>> | xalan    |  50349 |
>> | zxing    |  41497 |
>> +----------+--------+
>> 
>> 
>> 
>> Testing:
>> - `tier1`...`tier2`: 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:
> 
>   Clarify non-compiled method in comments

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 871:

> 869:               : CodeCache::low_bound();
> 870:       return Assembler::reachable_from_branch_at(longest_branch_start, target);
> 871:     }

When does it happen that code outside the code cache (presumably in native shared libraries) is reachable? How did you test it?

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

PR: https://git.openjdk.org/jdk/pull/8403


More information about the hotspot-compiler-dev mailing list