diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2021-10-29 16:25:47 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2021-10-29 17:57:34 +0200 |
commit | dc173a433eed2d248f3fc50c8affe676a2604974 (patch) | |
tree | 6565593cd98076b2b88ff239ecaa870472897ac5 /gcc | |
parent | 4b3a325f07acebf47e82de227ce1d5ba62f5bcae (diff) | |
download | gcc-dc173a433eed2d248f3fc50c8affe676a2604974.zip gcc-dc173a433eed2d248f3fc50c8affe676a2604974.tar.gz gcc-dc173a433eed2d248f3fc50c8affe676a2604974.tar.bz2 |
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 <amacleod@redhat.com>
gcc/ChangeLog:
* value-relation.cc (path_oracle::killing_def): Add a
self-equivalence so we don't look to the root oracle.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/value-relation.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index 512b51c..f572bcd 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)) |