RFR: 8360520: RISC-V: C1: Fix primitive array clone intrinsic regression after JDK-8333154 [v7]

Feilong Jiang fjiang at openjdk.org
Wed Jul 23 05:59:36 UTC 2025


> Hi, please consider.
> [JDK-8333154](https://bugs.openjdk.org/browse/JDK-8333154) Implemented C1 clone intrinsic that reuses arraycopy code for primitive arrays for RISC-V.
> The new instruction flag `OmitChecksFlag` (introduced by [JDK-8302850](https://bugs.openjdk.org/browse/JDK-8302850)) is used to avoid instantiation of array copy stubs for primitive array clones.
> If `OmitChecksFlag` is set, all flags (including the `unaligned` flag) will be cleared before generating the `LIR_OpArrayCopy` node.
> This may lead to incorrect selection of the arraycopy function when `-XX:+UseCompactObjectHeaders` is enabled, causing the `unaligned` flag to be set for arraycopy.
> We observed performance regression on P550 SBC through the corresponding JMH tests when COH is enabled.
> 
> This pr keeps the `unaligned` flag on RISC-V to ensure the arraycopy function is selected correctly. 
> The other platforms are not affected as the flag is always `0` when `OmitChecksFlag` is true. 
> 
> Test on linux-riscv64:
> - [x] Tier1-3
> 
> JMH data on P550 SBC for reference (w/o and w/ the patch):
> 
> Before:
> 
> Without COH:
> 
> Benchmark                 (size)  Mode  Cnt     Score   Error  Units
> ArrayClone.byteArraycopy       0  avgt   15    50.854 ± 0.379  ns/op
> ArrayClone.byteArraycopy      10  avgt   15    74.294 ± 0.449  ns/op
> ArrayClone.byteArraycopy     100  avgt   15    81.847 ± 0.082  ns/op
> ArrayClone.byteArraycopy    1000  avgt   15   480.106 ± 0.369  ns/op
> ArrayClone.byteClone           0  avgt   15    90.146 ± 0.299  ns/op
> ArrayClone.byteClone          10  avgt   15   130.525 ± 0.384  ns/op
> ArrayClone.byteClone         100  avgt   15   251.942 ± 0.122  ns/op
> ArrayClone.byteClone        1000  avgt   15   407.580 ± 0.318  ns/op
> ArrayClone.intArraycopy        0  avgt   15    49.984 ± 0.436  ns/op
> ArrayClone.intArraycopy       10  avgt   15    76.302 ± 1.388  ns/op
> ArrayClone.intArraycopy      100  avgt   15   267.487 ± 0.329  ns/op
> ArrayClone.intArraycopy     1000  avgt   15  1157.444 ± 1.588  ns/op
> ArrayClone.intClone            0  avgt   15    90.130 ± 0.257  ns/op
> ArrayClone.intClone           10  avgt   15   183.619 ± 0.588  ns/op
> ArrayClone.intClone          100  avgt   15   296.491 ± 0.246  ns/op
> ArrayClone.intClone         1000  avgt   15   828.695 ± 1.501  ns/op
> 
> -------------------------------------------------------------------------
> With COH:
> 
> Benchmark                 (size)  Mode  Cnt       Score      Error  Units
> ArrayClone.byteArraycopy       0  avgt   15      50.667 ±    0.622  ns/op
> Arra...

Feilong Jiang has updated the pull request incrementally with one additional commit since the last revision:

  fix build

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/25976/files
  - new: https://git.openjdk.org/jdk/pull/25976/files/cc2a329f..657f92f9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=25976&range=06
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=25976&range=05-06

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/25976.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25976/head:pull/25976

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


More information about the hotspot-compiler-dev mailing list