On Mon, 24 Nov 2025 11:56:26 GMT, Hamlin Li <[email protected]> wrote:
>> 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> > > Hamlin Li has updated the pull request incrementally with one additional > commit since the last revision: > > fix is_unordered src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp line 2141: > 2139: case BoolTest::gt: > 2140: cmov_fp_cmp_fp_gt(op1, op2, dst, src, cmp_single, cmov_single); > 2141: log_warning(jit)("Float/Double BoolTest::gt path is not tested > well, please report the test case!"); My local tests show this does happen. Try this: `$ make test TEST="./test/jdk/javax/sound/midi/Gervill/SoftFilter/TestProcessAudio.java" TEST_VM_OPTS="-XX:-TieredCompilation"` I think this could be a good reference if you want to add some extra tests for the two cases here. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28309#discussion_r2558363671
