From 6101a276c34b94f692206739d98aa7faf2e7b2ad Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Mon, 16 May 2022 21:39:30 -0400 Subject: Check for equivalence after merging relations. When registering a relation, we need to merge with any existing relation before checking if it was an equivalence... otherwise it was not being handled properly. gcc/ PR tree-optimization/105458 * value-relation.cc (path_oracle::register_relation): Merge, then check for equivalence. gcc/testsuite/ * gcc.dg/pr105458.c: New. --- gcc/value-relation.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'gcc/value-relation.cc') diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index a935651..85d159f 100644 --- a/gcc/value-relation.cc +++ b/gcc/value-relation.cc @@ -1384,16 +1384,16 @@ path_oracle::register_relation (basic_block bb, relation_kind k, tree ssa1, fprintf (dump_file, " (root: bb%d)\n", bb->index); } + relation_kind curr = query_relation (bb, ssa1, ssa2); + if (curr != VREL_VARYING) + k = relation_intersect (curr, k); + if (k == VREL_EQ) { register_equiv (bb, ssa1, ssa2); return; } - relation_kind curr = query_relation (bb, ssa1, ssa2); - if (curr != VREL_VARYING) - k = relation_intersect (curr, k); - bitmap_set_bit (m_relations.m_names, SSA_NAME_VERSION (ssa1)); bitmap_set_bit (m_relations.m_names, SSA_NAME_VERSION (ssa2)); relation_chain *ptr = (relation_chain *) obstack_alloc (&m_chain_obstack, -- cgit v1.1