From 9c8125b98cdd406fbad09995529a5c6acffdd928 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Tue, 17 May 2022 09:36:39 -0400 Subject: [PATCH] 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/testsuite/gcc.dg/pr105458.c | 20 ++++++++++++++++++++ gcc/value-relation.cc | 8 ++++---- 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr105458.c diff --git a/gcc/testsuite/gcc.dg/pr105458.c b/gcc/testsuite/gcc.dg/pr105458.c new file mode 100644 index 0000000..eb58bf2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105458.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/105458 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fexpensive-optimizations -fno-tree-dominator-opts " } */ + +void +yj (int j4) +{ + int t3; + + for (t3 = 0; t3 < 6; ++t3) + { + short int v4 = t3; + + if (v4 == j4 || v4 > t3) + for (;;) + { + } + } +} + diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index 077ab42..a69ad08 100644 --- a/gcc/value-relation.cc +++ b/gcc/value-relation.cc @@ -1388,16 +1388,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_NONE) + k = relation_intersect (curr, k); + if (k == EQ_EXPR) { register_equiv (bb, ssa1, ssa2); return; } - relation_kind curr = query_relation (bb, ssa1, ssa2); - if (curr != VREL_NONE) - 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, -- 2.7.4