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

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jeff Law <l...@gcc.gnu.org>:

https://gcc.gnu.org/g:0883c88664d48463dfc79335dccaf15a69230952

commit r15-4186-g0883c88664d48463dfc79335dccaf15a69230952
Author: Artemiy Volkov <artemiy.vol...@synopsys.com>
Date:   Tue Oct 8 17:51:08 2024 -0600

    tree-optimization/116024 - simplify C1-X cmp C2 for UB-on-overflow types

    Implement a match.pd pattern for C1 - X cmp C2, where C1 and C2 are
    integer constants and X is of a UB-on-overflow type.  The pattern is
    simplified to X rcmp C1 - C2 by moving X and C2 to the other side of the
    comparison (with opposite signs).  If C1 - C2 happens to overflow,
    replace the whole expression with either a constant 0 or a constant 1
    node, depending on the comparison operator and the sign of the overflow.

    This transformation allows to occasionally save load-immediate /
    subtraction instructions, e.g. the following statement:

    10 - (int) x <= 9;

    now compiles to

    sgt     a0,a0,zero

    instead of

    li      a5,10
    sub     a0,a5,a0
    slti    a0,a0,10

    on 32-bit RISC-V.

    Additional examples can be found in the newly added test file. This
    patch has been bootstrapped and regtested on aarch64, x86_64, and
    i386, and additionally regtested on riscv32.  Existing tests were
    adjusted where necessary.

    gcc/ChangeLog:

            PR tree-optimization/116024
            * match.pd: New transformation around integer comparison.

    gcc/testsuite/ChangeLog:

            * gcc.dg/tree-ssa/pr116024.c: New test.
            * gcc.dg/pr67089-6.c: Adjust.

Reply via email to