diff options
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r-- | gcc/gimple-range-cache.cc | 7 |
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))) |