RFR: 8362504: AArch64: Replace MOVZ+MOVK+MOVK with ADRP+ADD [v2]
Andrew Haley
aph at openjdk.org
Tue Aug 19 13:22:46 UTC 2025
On Tue, 19 Aug 2025 10:44:12 GMT, Fei Gao <fgao at openjdk.org> wrote:
>> If the relocation or target address is guaranteed to reside within the CodeCache, we can safely replace a `movz + movk + movk` sequence with a more compact and efficient `adrp + add` instruction pair.
>>
>> In `MacroAssembler::mov(Register r, Address dest)`, this replacement can be applied if any of the following rules hold:
>>
>> 1. The relocation type indicates that the address resides within the CodeCache and the necessary patching logic is provided in `fix_relocation_after_move()`.
>> 2. The target address is fixed (i.e., does not require relocation) and is within the reachable range for `adrp`.
>>
>> The patch performs the filtering in `is_relocated_within_codecache()` and `is_adrp_reachable()` to ensure this optimization is applied safely and selectively.
>
> Fei Gao has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision:
>
> - Disable reachability-based optimization during AOT code dumping
> - Merge branch 'master' into replace-mov-with-adrp
> - 8362504: AArch64: Replace MOVZ+MOVK+MOVK with ADRP+ADD
>
> If the relocation or target address is guaranteed to reside within
> the CodeCache, we can safely replace a `movz + movk + movk`
> sequence with a more compact and efficient `adrp + add`
> instruction pair.
>
> In `MacroAssembler::mov(Register r, Address dest)`, this
> replacement can be applied if any of the following rules hold:
>
> 1. The relocation type indicates that the address resides within
> the CodeCache and the necessary patching logic is provided in
> `fix_relocation_after_move()`.
> 2. The target address is fixed (i.e., does not require relocation)
> and is within the reachable range for `adrp`.
>
> The patch performs the filtering in `is_relocated_within_codecache()`
> and `is_adrp_reachable()` to ensure this optimization is applied
> safely and selectively.
src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp line 1511:
> 1509: address read_polling_page(Register r, relocInfo::relocType rtype);
> 1510: void get_polling_page(Register dest, relocInfo::relocType rtype);
> 1511: static bool should_relocate_to_codecache(relocInfo::relocType rtype);
Suggestion:
static bool must_relocate_to_codecache(relocInfo::relocType rtype);
I think this is true for every "should_" in this patch.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26653#discussion_r2285255870
More information about the hotspot-dev
mailing list