RFR: 8357551: RISC-V: support CMoveF/D vectorization

Hamlin Li mli at openjdk.org
Thu Nov 13 21:42:18 UTC 2025


Hi,

This pr add CMoveF/D on riscv, which enable vectorization of statement like: `op_1 bop op_2 ? res_f_d_1 : res_f_d_2 in a loop`.

This pr is also a preparation for further vectorization in https://github.com/openjdk/jdk/pull/28231.

Previously it's https://github.com/openjdk/jdk/pull/25341, but at that time, C2 SLP has some issue with unsigned comparison, which is now fixed, so it's good to continue the work.

# Test
## Jtreg

in progress...

## Performance

Column names meanings:
* p: with patch
* p+v: with patch, `-XX:+UseVectorCmov -XX:+UseCMoveUnconditionally` turned on
* m: without patch
* m+v: without patch, `-XX:+UseVectorCmov -XX:+UseCMoveUnconditionally` turned on

#### Average improvement

NOTE: With only this PR, it brings performance benefit in case of `CMoveF+CmpF`, `CMoveD+ComD`, `CMoveF+CmpI`, `CMoveD+CmpL`. The data below is based on fullly implmenting the vectorization of `CMoveI/L/F/D+CmpI/L/F/D`, which will be achieved by https://github.com/openjdk/jdk/pull/28231.

For details, check the performance data in https://github.com/openjdk/jdk/pull/25341 on riscv.
<google-sheets-html-origin style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">
Opt (m/p) | Opt (m+v/p+v) | Opt (p/p+v) | Opt (m/p+v)
-- | -- | -- | --
1.022782609 | 2.198717391 | 2.162673913 | 2.199

</google-sheets-html-origin>

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

Commit messages:
 - remove unused test code
 - revert unrelated test change
 - revert unrelated vmaskcmp change
 - typo
 - typo
 - disable vectorization of CMoveFD by removing share code change
 - remove Zicond code for CMoveFD
 - clean stop
 - Merge branch 'vectorize-CMove-Bool' into vectorize-CMove-Bool-riscv-CMoveF-D
 - Merge branch 'master' into vectorize-CMove-Bool
 - ... and 38 more: https://git.openjdk.org/jdk/compare/405d5f7a...ec0d8cc4

Changes: https://git.openjdk.org/jdk/pull/28309/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28309&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8357551
  Stats: 4581 lines in 13 files changed: 4446 ins; 50 del; 85 mod
  Patch: https://git.openjdk.org/jdk/pull/28309.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28309/head:pull/28309

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


More information about the core-libs-dev mailing list