From dc173a433eed2d248f3fc50c8affe676a2604974 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Fri, 29 Oct 2021 16:25:47 +0200 Subject: [PATCH] path oracle: Do not look back to the root oracle for killing defs. Since registering a kill means removing all references to it from the path oracle list, make sure we don't look back to the root oracle either. Tested on x86-64 Linux. Co-authored-by: Andrew MacLeod gcc/ChangeLog: * value-relation.cc (path_oracle::killing_def): Add a self-equivalence so we don't look to the root oracle. --- gcc/value-relation.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index 512b51ce0222..f572bcd4dc2f 100644 --- a/gcc/value-relation.cc +++ b/gcc/value-relation.cc @@ -1302,11 +1302,22 @@ path_oracle::killing_def (tree ssa) // 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); } + else + bitmap_set_bit (m_equiv.m_names, v); + + // Now add an equivalency with itself so we don't look to the root oracle. + 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; // Walk the relation list and remove SSA from any relations. if (!bitmap_bit_p (m_relations.m_names, v)) -- 2.47.2