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

--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Jakub Jelinek
<ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:3190d6263c90f8e859b738a9b39f5e650a4a3a16

commit r14-11142-g3190d6263c90f8e859b738a9b39f5e650a4a3a16
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Nov 21 09:38:01 2024 +0100

    phiopt: Fix a pasto in spaceship_replacement [PR117612]

    When working on the PR117612 fix, I've noticed a pasto in
    tree-ssa-phiopt.cc (spaceship_replacement).
    The code is
          if (absu_hwi (tree_to_shwi (arg2)) != 1)
            return false;
          if (e1->flags & EDGE_TRUE_VALUE)
            {
              if (tree_to_shwi (arg0) != 2
                  || absu_hwi (tree_to_shwi (arg1)) != 1
                  || wi::to_widest (arg1) == wi::to_widest (arg2))
                return false;
            }
          else if (tree_to_shwi (arg1) != 2
                   || absu_hwi (tree_to_shwi (arg0)) != 1
                   || wi::to_widest (arg0) == wi::to_widest (arg1))
            return false;
    where arg{0,1,2,3} are PHI args and wants to ensure that if e1 is a
    true edge, then arg0 is 2 and one of arg{1,2} is -1 and one is 1,
    otherwise arg1 is 2 and one of arg{0,2} is -1 and one is 1.
    But due to pasto in the latte case doesn't verify that arg0
    is different from arg2, it could be both -1 or both 1 and we wouldn't
    punt.  The wi::to_widest (arg0) == wi::to_widest (arg1) test
    is always false when we've made sure in the earlier conditions that
    arg1 is 2 and arg0 is -1 or 1, so never 2.

    2024-11-21  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/94589
            PR tree-optimization/117612
            * tree-ssa-phiopt.cc (spaceship_replacement): Fix up
            a pasto in check when arg1 is 2.

    (cherry picked from commit ca7430f145f5c7960f67ec77f585f3a2b58c7d10)

Reply via email to