aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r--gcc/gimple-range-cache.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index ce5a0c8..9848d14 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -1235,6 +1235,13 @@ 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)))