]> git.ipfire.org Git - thirdparty/gcc.git/commit
[PATCH 2/5] [ifcvt] optimize x=c ? (y shift_op z):y by RISC-V Zicond like insns
authorFei Gao <gaofei@eswincomputing.com>
Sun, 10 Dec 2023 20:39:30 +0000 (13:39 -0700)
committerJeff Law <jlaw@ventanamicro.com>
Sun, 10 Dec 2023 20:41:01 +0000 (13:41 -0700)
commit5a4faf915575c690a25f0522dccc5b8d82909f10
tree15237d529e1fe877057a0410c023c84d67b35d2e
parentb3aed459634654d295a1d00e6c149565ced7a9a2
[PATCH 2/5] [ifcvt] optimize x=c ? (y shift_op z):y by RISC-V Zicond like insns

op=[ASHIFT, ASHIFTRT, LSHIFTRT, ROTATE, ROTATERT]

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_cond_zero_binary_op_supported): Add support for shift
like op.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/zicond_ifcvt_opt.c: Add tests for shift like op.

Co-authored-by: Xiao Zeng<zengxiao@eswincomputing.com>
gcc/ifcvt.cc
gcc/testsuite/gcc.target/riscv/zicond_ifcvt_opt.c