On Wed, 9 Apr 2025 06:41:51 GMT, Fei Yang <[email protected]> wrote:
> Sorry for not being clear enough. I am suggesting this:
if (UseZicond) {
FLAG_SET_DEFAULT(ConditionalMoveLimit, 3);
}
I think this depends on whether we should enable ConditionalMoveLimit based on
`UseZicond`? So, I'll leave it until we have a dicision about the following
discussion.
> Without Zicond extension, conditional moves composed by C2 are simply
> emulated with regular conditional branches on riscv, which I think is not
> good in respect of performance.
Yes, when Zicond is not supported (or turned off), C2 use the alternative path
which is `branch + mv`. When Zicond was introduced
(https://github.com/openjdk/jdk/pull/22386), the rational behind it is that
brach bring regression, but I think it's based on the fact that code size is
the same. But in cmove case, the size is increased, and in particular when C2
unrolls a loop, it can increase the code size a lot, which is not good for
cache. And the jmh test result shows that brach version is better than patch
with Zicond and master with/wo Zicond in most of test cases.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24490#discussion_r2034819606