From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2209) id 62ECB3857B89; Wed, 5 Oct 2022 00:20:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 62ECB3857B89 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1664929210; bh=S2xcMxyf5NVeERj60FlV+/QqoUDSVblURAsvfIll0Rc=; h=From:To:Subject:Date:From; b=cB8rrjBP3Y+A3peGaQzHaSCfNH4R9l5Kak4DONSv5pjuHEFts9IK0v+IGl4dt752b 4svbLjaJ1Z8iksJ0dfSu2ZFh3DfiZiOqyf9upccsKZG9JpybLgnMMlj4WRwsJp9EpI 9BLHHhHOezccT4fm47eygPjF986Uf5ku4NNGe4lM= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: David Malcolm To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-3074] analyzer: widening_svalues take a function_point rather than a program_point X-Act-Checkin: gcc X-Git-Author: David Malcolm X-Git-Refname: refs/heads/master X-Git-Oldrev: 85872a69ee1b123557c7c352d45ef608e70b20fb X-Git-Newrev: e6fe02d832209393474ca049ca5e0b56a053fadd Message-Id: <20221005002010.62ECB3857B89@sourceware.org> Date: Wed, 5 Oct 2022 00:20:10 +0000 (GMT) List-Id: https://gcc.gnu.org/g:e6fe02d832209393474ca049ca5e0b56a053fadd commit r13-3074-ge6fe02d832209393474ca049ca5e0b56a053fadd Author: David Malcolm Date: Tue Oct 4 20:19:06 2022 -0400 analyzer: widening_svalues take a function_point rather than a program_point Enabling work towrads better call summarization. gcc/analyzer/ChangeLog: * region-model-manager.cc (region_model_manager::get_or_create_widening_svalue): Use a function_point rather than a program_point. * region-model.cc (selftest::test_widening_constraints): Likewise. * region-model.h (region_model_manager::get_or_create_widening_svalue): Likewise. (model_merger::get_function_point): New. * svalue.cc (svalue::can_merge_p): Use a function_point rather than a program_point. (svalue::can_merge_p): Likewise. * svalue.h (widening_svalue::key_t): Likewise. (widening_svalue::widening_svalue): Likewise. Signed-off-by: David Malcolm Diff: --- gcc/analyzer/region-model-manager.cc | 9 +++++---- gcc/analyzer/region-model.cc | 2 +- gcc/analyzer/region-model.h | 6 +++++- gcc/analyzer/svalue.cc | 4 ++-- gcc/analyzer/svalue.h | 8 ++++---- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc index cbda77f3d9c..ed5b9c75910 100644 --- a/gcc/analyzer/region-model-manager.cc +++ b/gcc/analyzer/region-model-manager.cc @@ -1143,10 +1143,11 @@ region_model_manager::get_or_create_unmergeable (const svalue *arg) and ITER_SVAL at POINT, creating it if necessary. */ const svalue * -region_model_manager::get_or_create_widening_svalue (tree type, - const program_point &point, - const svalue *base_sval, - const svalue *iter_sval) +region_model_manager:: +get_or_create_widening_svalue (tree type, + const function_point &point, + const svalue *base_sval, + const svalue *iter_sval) { gcc_assert (base_sval->get_kind () != SK_WIDENING); gcc_assert (iter_sval->get_kind () != SK_WIDENING); diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 22c52872c3e..e92bba2b438 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -7956,7 +7956,7 @@ static void test_widening_constraints () { region_model_manager mgr; - program_point point (program_point::origin (mgr)); + function_point point (program_point::origin (mgr).get_function_point ()); tree int_0 = build_int_cst (integer_type_node, 0); tree int_m1 = build_int_cst (integer_type_node, -1); tree int_1 = build_int_cst (integer_type_node, 1); diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h index e86720a645c..baac7ba4a12 100644 --- a/gcc/analyzer/region-model.h +++ b/gcc/analyzer/region-model.h @@ -278,7 +278,7 @@ public: const svalue *inner_svalue); const svalue *get_or_create_unmergeable (const svalue *arg); const svalue *get_or_create_widening_svalue (tree type, - const program_point &point, + const function_point &point, const svalue *base_svalue, const svalue *iter_svalue); const svalue *get_or_create_compound_svalue (tree type, @@ -1282,6 +1282,10 @@ struct model_merger } bool mergeable_svalue_p (const svalue *) const; + const function_point &get_function_point () const + { + return m_point.get_function_point (); + } const region_model *m_model_a; const region_model *m_model_b; diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc index f5a5f1c9697..a37c152bb04 100644 --- a/gcc/analyzer/svalue.cc +++ b/gcc/analyzer/svalue.cc @@ -207,7 +207,7 @@ svalue::can_merge_p (const svalue *other, if (maybe_get_constant () && other->maybe_get_constant ()) { return mgr->get_or_create_widening_svalue (other->get_type (), - merger->m_point, + merger->get_function_point (), other, this); } @@ -220,7 +220,7 @@ svalue::can_merge_p (const svalue *other, && binop_sval->get_arg1 ()->get_kind () == SK_CONSTANT && other->get_kind () != SK_WIDENING) return mgr->get_or_create_widening_svalue (other->get_type (), - merger->m_point, + merger->get_function_point (), other, this); /* Merge: (Widen(existing_val, V), existing_val) -> Widen (existing_val, V) diff --git a/gcc/analyzer/svalue.h b/gcc/analyzer/svalue.h index f4cab0d4134..9393d6ec213 100644 --- a/gcc/analyzer/svalue.h +++ b/gcc/analyzer/svalue.h @@ -1113,9 +1113,9 @@ public: /* A support class for uniquifying instances of widening_svalue. */ struct key_t { - key_t (tree type, const program_point &point, + key_t (tree type, const function_point &point, const svalue *base_sval, const svalue *iter_sval) - : m_type (type), m_point (point.get_function_point ()), + : m_type (type), m_point (point), m_base_sval (base_sval), m_iter_sval (iter_sval) {} @@ -1153,12 +1153,12 @@ public: DIR_UNKNOWN }; - widening_svalue (tree type, const program_point &point, + widening_svalue (tree type, const function_point &point, const svalue *base_sval, const svalue *iter_sval) : svalue (complexity::from_pair (base_sval->get_complexity (), iter_sval->get_complexity ()), type), - m_point (point.get_function_point ()), + m_point (point), m_base_sval (base_sval), m_iter_sval (iter_sval) { gcc_assert (base_sval->can_have_associated_state_p ());