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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:576714b309b330df0e80e34114bcdf0bba35e146

commit r11-6472-g576714b309b330df0e80e34114bcdf0bba35e146
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Tue Jan 5 16:35:22 2021 +0100

    phiopt: Optimize x < 0 ? ~y : y to (x >> 31) ^ y [PR96928]

    As requested in the PR, the one's complement abs can be done more
    efficiently without cmov or branching.

    Had to change the ifcvt-onecmpl-abs-1.c testcase, we no longer optimize
    it in ifcvt, on x86_64 with -m32 we generate in the end the exact same
    code, but with -m64:
            movl    %edi, %eax
    -       notl    %eax
    -       cmpl    %edi, %eax
    -       cmovl   %edi, %eax
    +       sarl    $31, %eax
    +       xorl    %edi, %eax
            ret

    2021-01-05  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/96928
            * tree-ssa-phiopt.c (xor_replacement): New function.
            (tree_ssa_phiopt_worker): Call it.

            * gcc.dg/tree-ssa/pr96928.c: New test.
            * gcc.target/i386/ifcvt-onecmpl-abs-1.c: Remove -fdump-rtl-ce1,
            instead of scanning rtl dump for ifcvt message check assembly
            for xor instruction.

Reply via email to