RFR: 8359270: C2: alignment check should consider base offset when emitting arraycopy runtime call [v4]

Fei Yang fyang at openjdk.org
Thu Jun 19 11:36:27 UTC 2025


> Hi, please consider this change fixing alignment check when emitting arraycopy runtime call.
> 
> There are currently four callsites of `StubRoutines::select_arraycopy_function` in hotspot C2 shared code where we emit arraycopy runtime calls [1-4]. Three of them [2-4] missed base offset when calculation alignment for both source and destination array addresses. Seems they assume a base offset of 8 bytes, which is not always true. Base offset becomes 4 bytes under either `-XX:+UseCompactObjectHeaders` or `-XX:-UseCompressedClassPointers`.
> 
> And `StubRoutines::select_arraycopy_function` selects the right arraycopy runtime call based on this alignment. As a result, it could see an incorrect `aligned` param about the array addresses and thus a wrong arraycopy runtime call is selected. This is causing performance regressions (like Dacapo Spring) on some linux-riscv64 platforms like Sifive Unmatched or Premier P550 SBCs where misaligned memory access is very slow.
> 
> Proposed change fixes this issue by taking base offset into account when checking the alignment, which is very similar to [1].
> 
> Testing:
> - [x] Tier1-3 on linux-x64 (release & fastdebug)
> - [x] Tier1-3 on linux-aarch64 (release & fastdebug)
> - [x] Tier1-3 on linux-riscv64 (release)
> - [x] Dacapo spring performance test on linux-riscv64 (w/wo `-XX:+UseCompactObjectHeaders` / `-XX:-UseCompressedClassPointers`)
> 
> [1] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/macroArrayCopy.cpp#L341
> [2] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/library_call.cpp#L1584
> [3] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/library_call.cpp#L1666
> [4] https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/stringopts.cpp#L1481

Fei Yang has updated the pull request incrementally with one additional commit since the last revision:

  review

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/25765/files
  - new: https://git.openjdk.org/jdk/pull/25765/files/9dbc4ae9..29ef3b2b

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=25765&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=25765&range=02-03

  Stats: 13 lines in 1 file changed: 9 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/25765.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25765/head:pull/25765

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


More information about the hotspot-compiler-dev mailing list