From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id 78A653858C54; Thu, 19 Jan 2023 22:27:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 78A653858C54 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1674167229; bh=ZuAV+FP6JALYQjJj6v6g37RQkY4LPu4ycdnX6xu2Yss=; h=From:To:Subject:Date:From; b=J7pHqjTnGeFsVlBXe9u9NbrMvybaAH0YhRERQwmruQAovRoCwummm+9cQCUck32pL MjpWk3MAO+PWIuvDa5QheDjM8o9MjhIRnjlqu7MBUXIhdhB3fQjlpep4LkHCmPmgt8 j1etTCM82JNboGabHgbE1wP5vzqaWzpMIkvFcrX8= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-5264] value-relation: Fix up relation_union [PR108447] X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/master X-Git-Oldrev: 77a67e3a9294c825ac1a2b205fbb266e7c29e82b X-Git-Newrev: c81e68a9cdbb5411dce1f1da3b35854212305c7c Message-Id: <20230119222709.78A653858C54@sourceware.org> Date: Thu, 19 Jan 2023 22:27:09 +0000 (GMT) List-Id: https://gcc.gnu.org/g:c81e68a9cdbb5411dce1f1da3b35854212305c7c commit r13-5264-gc81e68a9cdbb5411dce1f1da3b35854212305c7c Author: Jakub Jelinek Date: Thu Jan 19 23:26:35 2023 +0100 value-relation: Fix up relation_union [PR108447] While looking at the PR, I've noticed one row in rr_union_table is wrong. relation_union should be commutative, but due to that bug is not. The following patch adds a self-test for that property (fails without the first hunk) and fixes that line. The actual floating point relation problem isn't fixed by this patch though. 2023-01-19 Jakub Jelinek PR tree-optimization/108447 * value-relation.cc (rr_union_table): Fix VREL_UNDEFINED row order. (relation_tests): Add self-tests for relation_{intersect,union} commutativity. * selftest.h (relation_tests): Declare. * function-tests.cc (test_ranges): Call it. Diff: --- gcc/function-tests.cc | 1 + gcc/selftest.h | 1 + gcc/value-relation.cc | 25 ++++++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gcc/function-tests.cc b/gcc/function-tests.cc index 846226d99e2..39970b2fcfd 100644 --- a/gcc/function-tests.cc +++ b/gcc/function-tests.cc @@ -583,6 +583,7 @@ test_ranges () push_cfun (fun); range_tests (); range_op_tests (); + relation_tests (); build_cfg (fndecl); convert_to_ssa (fndecl); diff --git a/gcc/selftest.h b/gcc/selftest.h index 1abec2dd69b..20d522afda4 100644 --- a/gcc/selftest.h +++ b/gcc/selftest.h @@ -244,6 +244,7 @@ extern void predict_cc_tests (); extern void pretty_print_cc_tests (); extern void range_tests (); extern void range_op_tests (); +extern void relation_tests (); extern void gimple_range_tests (); extern void read_rtl_function_cc_tests (); extern void rtl_tests_cc_tests (); diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc index b8fa7653232..6f8a1b7e7d3 100644 --- a/gcc/value-relation.cc +++ b/gcc/value-relation.cc @@ -115,7 +115,7 @@ relation_kind rr_union_table[VREL_LAST][VREL_LAST] = { { VREL_VARYING, VREL_VARYING, VREL_VARYING, VREL_VARYING, VREL_VARYING, VREL_VARYING, VREL_VARYING, VREL_VARYING }, // VREL_UNDEFINED - { VREL_VARYING, VREL_LT, VREL_LE, VREL_GT, VREL_GE, VREL_UNDEFINED, + { VREL_VARYING, VREL_UNDEFINED, VREL_LT, VREL_LE, VREL_GT, VREL_GE, VREL_EQ, VREL_NE }, // VREL_LT { VREL_VARYING, VREL_LT, VREL_LT, VREL_LE, VREL_NE, VREL_VARYING, VREL_LE, @@ -1718,3 +1718,26 @@ equiv_relation_iterator::get_name (relation_kind *rel) } return NULL_TREE; } + +#if CHECKING_P +#include "selftest.h" + +namespace selftest +{ +void +relation_tests () +{ + // Verify commutativity of relation_intersect and relation_union. + for (relation_kind r1 = VREL_VARYING; r1 < VREL_PE8; + r1 = relation_kind (r1 + 1)) + for (relation_kind r2 = VREL_VARYING; r2 < VREL_PE8; + r2 = relation_kind (r2 + 1)) + { + ASSERT_EQ (relation_intersect (r1, r2), relation_intersect (r2, r1)); + ASSERT_EQ (relation_union (r1, r2), relation_union (r2, r1)); + } +} + +} // namespace selftest + +#endif // CHECKING_P