aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2023-04-12 13:10:55 -0400
committerAndrew MacLeod <amacleod@redhat.com>2023-04-13 14:12:04 -0400
commit9c2a5db997446a9438a3e01f5229dec3f78b09e7 (patch)
tree9cc090d2104f2033d75fbcc21db9e3314a337e89 /gcc/gimple-range-cache.cc
parent52bb22bb5e1f951c73b5cd43b0b3a423f67e5e7a (diff)
downloadgcc-9c2a5db997446a9438a3e01f5229dec3f78b09e7.zip
gcc-9c2a5db997446a9438a3e01f5229dec3f78b09e7.tar.gz
gcc-9c2a5db997446a9438a3e01f5229dec3f78b09e7.tar.bz2
Ensure PHI equivalencies do not dominate the argument edge.
When we create an equivalency between a PHI definition and an argument, ensure the definition does not dominate the incoming argument edge. PR tree-optimization/108139 PR tree-optimization/109462 * gimple-range-cache.cc (ranger_cache::fill_block_cache): Remove equivalency check for PHI nodes. * gimple-range-fold.cc (fold_using_range::range_of_phi): Ensure def does not dominate single-arg equivalency edges.
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r--gcc/gimple-range-cache.cc9
1 files changed, 1 insertions, 8 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 3b52f1e..2314478 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -1220,7 +1220,7 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb)
// See if any equivalences can refine it.
// PR 109462, like 108139 below, a one way equivalence introduced
// by a PHI node can also be through the definition side. Disallow it.
- if (m_oracle && !is_a<gphi *> (SSA_NAME_DEF_STMT (name)))
+ if (m_oracle)
{
tree equiv_name;
relation_kind rel;
@@ -1237,13 +1237,6 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb)
if (!m_gori.has_edge_range_p (equiv_name))
continue;
- // PR 108139. It is hazardous to assume an equivalence with
- // a PHI is the same value. The PHI may be an equivalence
- // via UNDEFINED arguments which is really a one way equivalence.
- // PHIDEF == name, but name may not be == PHIDEF.
- if (is_a<gphi *> (SSA_NAME_DEF_STMT (equiv_name)))
- continue;
-
// Check if the equiv definition dominates this block
if (equiv_bb == bb ||
(equiv_bb && !dominated_by_p (CDI_DOMINATORS, bb, equiv_bb)))