RFR: 8362504: AArch64: Replace MOVZ+MOVK+MOVK with ADRP+ADD [v2]
Fei Gao
fgao at openjdk.org
Tue Aug 19 10:44:12 UTC 2025
> 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.
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/26653/files
- new: https://git.openjdk.org/jdk/pull/26653/files/3ca70c87..3540e45d
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=26653&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=26653&range=00-01
Stats: 15535 lines in 447 files changed: 8407 ins; 5296 del; 1832 mod
Patch: https://git.openjdk.org/jdk/pull/26653.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/26653/head:pull/26653
PR: https://git.openjdk.org/jdk/pull/26653
More information about the hotspot-dev
mailing list