RFR: 8285487: Do not generate trampolines for runtime calls if they are not needed
Boris Ulasevich
bulasevich at openjdk.java.net
Wed Apr 27 08:47:33 UTC 2022
On Tue, 26 Apr 2022 16:14:44 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.
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 406:
> 404: // If CodeCache size > 128M, such calls must have reserved trampolines for the case:
> 405: // C2 compiled method calls C1 compiled method.
> 406: return (entry.rspec().type() == relocInfo::runtime_call_type) ? target_needs_far_branch(entry.target())
Why is target_needs_far_branch() applied for runtime_call_type only?
test/hotspot/jtreg/compiler/c2/aarch64/TestTrampoline.java line 57:
> 55: // As the non-nmethod segment is put between other two segments,
> 56: // ReservedCodeCacheSize=240M guarantees no trampolines for runtime calls to the non-nmethod segment.
> 57: command.add("-XX:ReservedCodeCacheSize=240M");
To reduce memory load on the test machines, I would reduce the ReservedCodeCacheSize to 140M.
Minor stylistic comment: let us remove empty lines 59, 61, 63, 65, 67 below.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8403
More information about the hotspot-dev
mailing list