Skip to content
Snippets Groups Projects
Commit 35bf4904 authored by Andrew Pinski's avatar Andrew Pinski
Browse files

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: default avatarAndrew Pinski <quic_apinski@quicinc.com>
parent 2266e38c
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment