]>
git.ipfire.org Git - thirdparty/gcc.git/commit
[PATCH 1/5][V3][ifcvt] optimize x=c ? (y op z) : y by RISC-V Zicond like insns
op=[PLUS, MINUS, IOR, XOR]
Conditional op, if zero
rd = (rc == 0) ? (rs1 op rs2) : rs1
-->
czero.nez rd, rs2, rc
op rd, rs1, rd
Conditional op, if non-zero
rd = (rc != 0) ? (rs1 op rs2) : rs1
-->
czero.eqz rd, rs2, rc
op rd, rs1, rd
gcc/ChangeLog:
* ifcvt.cc (noce_try_cond_zero_arith): New function.
(noce_emit_czero, get_base_reg): Likewise.
(noce_cond_zero_binary_op_supported): Likewise.
(noce_bbs_ok_for_cond_zero_arith): Likewise.
(noce_process_if_block): Use noce_try_cond_zero_arith.
Co-authored-by: Xiao Zeng<zengxiao@eswincomputing.com>