From: Aldy Hernandez Date: Fri, 29 Oct 2021 14:25:47 +0000 (+0200) Subject: path oracle: Do not look back to the root oracle for killing defs. X-Git-Tag: basepoints/gcc-13~3522 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc173a433eed2d248f3fc50c8affe676a2604974;p=thirdparty%2Fgcc.git 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. --- 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))