https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58195

--- Comment #13 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pins...@gcc.gnu.org>:

https://gcc.gnu.org/g:35bf490452e06b3e3567933342fb15ef5d11f503

commit r15-4689-g35bf490452e06b3e3567933342fb15ef5d11f503
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Sun Oct 20 10:44:14 2024 -0700

    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_apin...@quicinc.com>

Reply via email to