]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
phiopt: Fix a pasto in spaceship_replacement [PR117612]
authorJakub Jelinek <jakub@redhat.com>
Thu, 21 Nov 2024 08:38:01 +0000 (09:38 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 21 Nov 2024 08:38:01 +0000 (09:38 +0100)
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  <jakub@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.

gcc/tree-ssa-phiopt.cc

index cffafe101a43b0f8b6afe585567d5c633cc4e439..be6128ed8dfecf4a2eaa9636c4fbfa3935738c4b 100644 (file)
@@ -2690,7 +2690,7 @@ spaceship_replacement (basic_block cond_bb, basic_block middle_bb,
        }
       else if (tree_to_shwi (arg1) != 2
               || absu_hwi (tree_to_shwi (arg0)) != 1
-              || wi::to_widest (arg0) == wi::to_widest (arg1))
+              || wi::to_widest (arg0) == wi::to_widest (arg2))
        return false;
       switch (cmp2)
        {