From: Aldy Hernandez Date: Thu, 28 Oct 2021 13:54:27 +0000 (+0200) Subject: path relation oracle: Remove SSA's being killed from the equivalence list. X-Git-Tag: basepoints/gcc-13~3535 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ef9ad930945b0912747f186f58ef446e7bf29c2;p=thirdparty%2Fgcc.git path relation oracle: Remove SSA's being killed from the equivalence list. Same thing as the relational change. Walk any equivalences that have been registered on the path, and remove the name being killed. The only reason we had added the equivalence with itself earlier is so we wouldn't search any further in the equivalency list. So if we are removing all references to it, then we no longer need to add a "kill" record. Will push pending tests on x86-64 Linux. Co-authored-by: Andrew MacLeod gcc/ChangeLog: * value-relation.cc (path_oracle::killing_def): Walk the equivalency list and remove SSA from any equivalencies. --- diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index 0ad4f7a94953..512b51ce0222 100644 --- a/gcc/value-relation.cc +++ b/gcc/value-relation.cc @@ -1298,17 +1298,17 @@ path_oracle::killing_def (tree ssa) } unsigned v = SSA_NAME_VERSION (ssa); - bitmap b = BITMAP_ALLOC (&m_bitmaps); - bitmap_set_bit (b, v); - equiv_chain *ptr = (equiv_chain *) obstack_alloc (&m_chain_obstack, - sizeof (equiv_chain)); - ptr->m_names = b; - ptr->m_bb = NULL; - ptr->m_next = m_equiv.m_next; - m_equiv.m_next = ptr; - bitmap_ior_into (m_equiv.m_names, b); - // Walk the relation list an remove SSA from any relations. + // Walk the equivalency list and remove SSA from any equivalencies. + if (bitmap_bit_p (m_equiv.m_names, v)) + { + bitmap_clear_bit (m_equiv.m_names, v); + for (equiv_chain *ptr = m_equiv.m_next; ptr; ptr = ptr->m_next) + if (bitmap_bit_p (ptr->m_names, v)) + bitmap_clear_bit (ptr->m_names, v); + } + + // Walk the relation list and remove SSA from any relations. if (!bitmap_bit_p (m_relations.m_names, v)) return;