On 10/30/23 01:25, Fei Gao wrote:
Conditional add, if zero
rd = (rc == 0) ? (rs1 + rs2) : rs1
-->
czero.nez rd, rs2, rc
add rd, rs1, rd

Conditional add, if non-zero
rd = (rc != 0) ? (rs1 + rs2) : rs1
-->
czero.eqz rd, rs2, rc
add rd, rs1, rd

Co-authored-by: Xiao Zeng<zengx...@eswincomputing.com>

gcc/ChangeLog:

         * ifcvt.cc (noce_emit_czero): helper for noce_try_cond_zero_arith
         (noce_try_cond_zero_arith): handler for condtional zero op
         (noce_process_if_block): add noce_try_cond_zero_arith with hook control

gcc/testsuite/ChangeLog:

         * gcc.target/riscv/zicond_ifcvt_opt.c: New test.
Just an intermediate follow-up. As I expected, the work we have internally fixes all the cases included in this patch. Similarly for patch #3.

jeff

Reply via email to