From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 5918B395442E for ; Thu, 27 May 2021 08:56:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5918B395442E Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-243--jleoFwPNgqHEhbQPumPiA-1; Thu, 27 May 2021 04:56:05 -0400 X-MC-Unique: -jleoFwPNgqHEhbQPumPiA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 36803180FD65 for ; Thu, 27 May 2021 08:56:04 +0000 (UTC) Received: from abulafia.quesejoda.com (ovpn-112-211.ams2.redhat.com [10.36.112.211]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A3BFB5D9CC; Thu, 27 May 2021 08:56:03 +0000 (UTC) Received: from abulafia.quesejoda.com (localhost [127.0.0.1]) by abulafia.quesejoda.com (8.16.1/8.15.2) with ESMTPS id 14R8u1NB096468 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 27 May 2021 10:56:01 +0200 Received: (from aldyh@localhost) by abulafia.quesejoda.com (8.16.1/8.16.1/Submit) id 14R8u1f2096467; Thu, 27 May 2021 10:56:01 +0200 From: Aldy Hernandez To: GCC patches Subject: [PATCH 2/2] Replace uses of determine_value_range with range_of_expr. Date: Thu, 27 May 2021 10:55:48 +0200 Message-Id: <20210527085547.96374-2-aldyh@redhat.com> In-Reply-To: <20210527085547.96374-1-aldyh@redhat.com> References: <20210527085547.96374-1-aldyh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 May 2021 08:56:08 -0000 The expression evaluator changes to the range_query API provide everything determine_value_range does. This patch replaces all uses with calls into the range_query API. Tested on x86-64 Linux. OK? gcc/ChangeLog: * calls.c (get_size_range): Use range_of_expr instead of determine_value_range. * tree-affine.c (expr_to_aff_combination): Same. * tree-data-ref.c (split_constant_offset): Same. * tree-vrp.c (determine_value_range_1): Remove. (determine_value_range): Remove. * tree-vrp.h (determine_value_range): Remove. --- gcc/calls.c | 21 +++++++++-------- gcc/tree-affine.c | 7 +++++- gcc/tree-data-ref.c | 12 +++++----- gcc/tree-vrp.c | 56 --------------------------------------------- gcc/tree-vrp.h | 1 - 5 files changed, 23 insertions(+), 74 deletions(-) diff --git a/gcc/calls.c b/gcc/calls.c index dd8ff2aa7cb..a7c78ed9c16 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1276,19 +1276,20 @@ get_size_range (range_query *query, tree exp, gimple *stmt, tree range[2], wide_int min, max; enum value_range_kind range_type; + if (!query) + query = get_global_range_query (); + if (integral) { value_range vr; - if (query && query->range_of_expr (vr, exp, stmt)) - { - if (vr.undefined_p ()) - vr.set_varying (TREE_TYPE (exp)); - range_type = vr.kind (); - min = wi::to_wide (vr.min ()); - max = wi::to_wide (vr.max ()); - } - else - range_type = determine_value_range (exp, &min, &max); + + query->range_of_expr (vr, exp, stmt); + + if (vr.undefined_p ()) + vr.set_varying (TREE_TYPE (exp)); + range_type = vr.kind (); + min = wi::to_wide (vr.min ()); + max = wi::to_wide (vr.max ()); } else range_type = VR_VARYING; diff --git a/gcc/tree-affine.c b/gcc/tree-affine.c index b273adb173d..a65719def23 100644 --- a/gcc/tree-affine.c +++ b/gcc/tree-affine.c @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "gimplify.h" #include "dumpfile.h" #include "cfgexpand.h" +#include "value-query.h" /* Extends CST as appropriate for the affine combinations COMB. */ @@ -345,11 +346,15 @@ expr_to_aff_combination (aff_tree *comb, tree_code code, tree type, for below case: (T1)(X *+- CST) -> (T1)X *+- (T1)CST if X *+- CST doesn't overflow by range information. */ + value_range vr; if (TYPE_UNSIGNED (itype) && TYPE_OVERFLOW_WRAPS (itype) && TREE_CODE (op1) == INTEGER_CST - && determine_value_range (op0, &minv, &maxv) == VR_RANGE) + && get_range_query (cfun)->range_of_expr (vr, op0) + && vr.kind () == VR_RANGE) { + wide_int minv = vr.lower_bound (); + wide_int maxv = vr.upper_bound (); wi::overflow_type overflow = wi::OVF_NONE; signop sign = UNSIGNED; if (icode == PLUS_EXPR) diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 09d46671565..b1f64684840 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -1069,12 +1069,12 @@ split_constant_offset (tree exp, tree *var, tree *off, value_range *exp_range, if (INTEGRAL_TYPE_P (type)) *var = fold_convert (sizetype, *var); *off = ssize_int (0); - if (exp_range && code != SSA_NAME) - { - wide_int var_min, var_max; - if (determine_value_range (exp, &var_min, &var_max) == VR_RANGE) - *exp_range = value_range (type, var_min, var_max); - } + + value_range r; + if (exp_range && code != SSA_NAME + && get_range_query (cfun)->range_of_expr (r, exp) + && !r.undefined_p ()) + *exp_range = r; } /* Expresses EXP as VAR + OFF, where OFF is a constant. VAR has the same diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 450926d5f9b..b9c0e65bd98 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -4606,59 +4606,3 @@ make_pass_vrp (gcc::context *ctxt) { return new pass_vrp (ctxt); } - - -/* Worker for determine_value_range. */ - -static void -determine_value_range_1 (value_range *vr, tree expr) -{ - if (BINARY_CLASS_P (expr)) - { - value_range vr0, vr1; - determine_value_range_1 (&vr0, TREE_OPERAND (expr, 0)); - determine_value_range_1 (&vr1, TREE_OPERAND (expr, 1)); - range_fold_binary_expr (vr, TREE_CODE (expr), TREE_TYPE (expr), - &vr0, &vr1); - } - else if (UNARY_CLASS_P (expr)) - { - value_range vr0; - determine_value_range_1 (&vr0, TREE_OPERAND (expr, 0)); - range_fold_unary_expr (vr, TREE_CODE (expr), TREE_TYPE (expr), - &vr0, TREE_TYPE (TREE_OPERAND (expr, 0))); - } - else if (TREE_CODE (expr) == INTEGER_CST) - vr->set (expr); - else - { - value_range r; - /* For SSA names try to extract range info computed by VRP. Otherwise - fall back to varying. */ - if (TREE_CODE (expr) == SSA_NAME - && INTEGRAL_TYPE_P (TREE_TYPE (expr)) - && get_range_query (cfun)->range_of_expr (r, expr) - && !r.undefined_p ()) - *vr = r; - else - vr->set_varying (TREE_TYPE (expr)); - } -} - -/* Compute a value-range for EXPR and set it in *MIN and *MAX. Return - the determined range type. */ - -value_range_kind -determine_value_range (tree expr, wide_int *min, wide_int *max) -{ - value_range vr; - determine_value_range_1 (&vr, expr); - if (!vr.varying_p () && vr.constant_p ()) - { - *min = wi::to_wide (vr.min ()); - *max = wi::to_wide (vr.max ()); - return vr.kind (); - } - - return VR_VARYING; -} diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h index 989d8430c98..3392ecc7b23 100644 --- a/gcc/tree-vrp.h +++ b/gcc/tree-vrp.h @@ -62,7 +62,6 @@ extern bool find_case_label_index (gswitch *, size_t, tree, size_t *); extern bool overflow_comparison_p (tree_code, tree, tree, bool, tree *); extern tree get_single_symbol (tree, bool *, tree *); extern void maybe_set_nonzero_bits (edge, tree); -extern value_range_kind determine_value_range (tree, wide_int *, wide_int *); extern wide_int masked_increment (const wide_int &val_in, const wide_int &mask, const wide_int &sgnbit, unsigned int prec); -- 2.31.1