-
- Downloads
simplify-rtx: Handle `a != 0 ? -a : 0` [PR58195]
The gimple (and generic) levels have this optmization since r12-2041-g7d6979197274a662da7bdc5.
It seems like a good idea to add a similar one to rtl just in case it is not caught at the
gimple level.
Note the loop case in csel-neg-1.c is not handled at the gimple level (even with phiopt turned back on),
this is because of casts to avoid signed integer overflow; a patch to fix this at the gimple level will be
submitted seperately.
Changes since v1:
* v2: Use `CONST0_RTX (mode)` instead of const0_rtx. Add csel-neg-2.c for float testcase which now passes.
Build and tested for aarch64-linux-gnu.
PR rtl-optimization/58195
gcc/ChangeLog:
* simplify-rtx.cc (simplify_context::simplify_ternary_operation): Handle
`a != 0 ? -a : 0` and `a == 0 ? 0 : -a`.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/csel-neg-1.c: New test.
* gcc.target/aarch64/csel-neg-2.c: New test.
Signed-off-by:
Andrew Pinski <quic_apinski@quicinc.com>
Showing
- gcc/simplify-rtx.cc 22 additions, 0 deletionsgcc/simplify-rtx.cc
- gcc/testsuite/gcc.target/aarch64/csel-neg-1.c 31 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/csel-neg-1.c
- gcc/testsuite/gcc.target/aarch64/csel-neg-2.c 19 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/csel-neg-2.c
Loading
Please register or sign in to comment