[PATCH] ifcvt: Improve `cmp?a&b:a` to try with -1 [PR123312]
Jeffrey Law
jeffrey.law@oss.qualcomm.com
Tue Jan 13 15:29:54 GMT 2026
On 1/10/2026 6:44 AM, Andrew Pinski wrote:
> After the current improvements to ifcvt, on some targets for
> cmp?a&b:a it is better to produce `(cmp?b:-1) & a` rather than
> `(!cmp?a:0)|(a & b)`. So this extends noce_try_cond_zero_arith (with
> a rename to noce_try_cond_arith) to see if `cmp ? a : -1` is cheaper than
> `!cmp?a:0`.
>
> Bootstrapped and tested on x86_64-linux-gnu.
>
> gcc/ChangeLog:
>
> * ifcvt.cc (noce_try_cond_zero_arith): Rename to ...
> (noce_try_cond_arith): This. For AND try `cmp ? a : -1`
> also to see which one cost less.
> (noce_process_if_block): Handle the rename.
>
> Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
So on a testing note, I threw this into my tester overnight, so it's
been bootstrapped and regression tested on riscv and tested on most of
our embedded platforms without any regressions. I was briefly concerned
about the store-merging failures, but those were from a different patch
that went onto the trunk and were expected to flip behavior.
Some of the sequence juggling is annoying, but likely unavoidable to a
large extent. But I'm happy with the overall approach of just costing
the two approaches and selecting one.
OK for the trunk.
Thanks again for picking this up -- I had expected to cover it myself.
Jeff
More information about the Gcc-patches
mailing list