From 6ef9ad930945b0912747f186f58ef446e7bf29c2 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Thu, 28 Oct 2021 15:54:27 +0200 Subject: [PATCH] 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. --- gcc/value-relation.cc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index 0ad4f7a9495..512b51ce022 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;