aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-11-21 09:38:01 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2024-11-21 09:38:01 +0100
commitca7430f145f5c7960f67ec77f585f3a2b58c7d10 (patch)
tree7b18811b72abc8e85e69a5361de348b74a390410 /gcc
parent7272e09c9b1bd3e5b69a8876825595935a7a545b (diff)
downloadgcc-ca7430f145f5c7960f67ec77f585f3a2b58c7d10.zip
gcc-ca7430f145f5c7960f67ec77f585f3a2b58c7d10.tar.gz
gcc-ca7430f145f5c7960f67ec77f585f3a2b58c7d10.tar.bz2
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 <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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-ssa-phiopt.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc
index cffafe10..be6128e 100644
--- a/gcc/tree-ssa-phiopt.cc
+++ b/gcc/tree-ssa-phiopt.cc
@@ -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)
{