From patchwork Wed Aug 5 14:17:21 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 140657 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B60F54BA903E for ; Wed, 5 Aug 2026 14:18:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B60F54BA903E Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=fdk7R3F5 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from cornsilk.maple.relay.mailchannels.net (cornsilk.maple.relay.mailchannels.net [23.83.214.40]) by sourceware.org (Postfix) with ESMTPS id B4BBD4BAE7C9 for ; Wed, 5 Aug 2026 14:17:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B4BBD4BAE7C9 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=quesejoda.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=quesejoda.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B4BBD4BAE7C9 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=23.83.214.40 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939476; cv=none; b=hOzuqmq6eoAOOjH10bAKE2YwSO6cfJ8D7vIIb5L6W4WhUn5e24n/h6yPn2iTdbAbcBbTFLnVuInFBbrcb93ruoCweODG6h+qtZfTT4k3I8wfUWS7VpxH9iEbbt0VzpTpeSMYtbB0+S1FfkXC8ixq1WAehAX3xLfpN2QPPewatTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939476; c=relaxed/simple; bh=O/516vqdJ280G8YuJcd7kkG+oxS+IumjWQpEa6pyC4Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=AI4GJ+eeXjQoyMqlaVP/z82OLT4cWWxVtDwi+3XZju2mjwy8olPQgdQJT3uxzXL91yOm9/4ga4wgAFTaAQqJlIIMjGxYQkSDYQ6NOkZsa8Unv5uDD68EM+gw/M/x4wTB+d4d+JGCQ7YfDMusHS+7fN8ClgzDA2Sv76sdy5Q4NzA= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=fdk7R3F5 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B4BBD4BAE7C9 X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 93C2F80174A; Wed, 05 Aug 2026 14:17:54 +0000 (UTC) Received: from pdx1-sub0-mail-a205.dreamhost.com (trex-green-8.trex.outbound.svc.cluster.local [100.111.248.111]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 51860801283; Wed, 05 Aug 2026 14:17:54 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|aldy@quesejoda.com X-MailChannels-Auth-Id: dreamhost X-Daffy-Tart: 5a00784371b17849_1785939474503_1777299218 X-MC-Loop-Signature: 1785939474503:1576048025 X-MC-Ingress-Time: 1785939474503 Received: from pdx1-sub0-mail-a205.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.111.248.111 (trex/8.0.2); Wed, 05 Aug 2026 14:17:54 +0000 Received: from vesper.quesejoda.com (224.85-85-184.dynamic.clientes.euskaltel.es [85.85.184.224]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: aldy@quesejoda.com) by pdx1-sub0-mail-a205.dreamhost.com (Postfix) with ESMTPSA id 4hFXYs0CPgz1R; Wed, 5 Aug 2026 07:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quesejoda.com; s=dreamhost; t=1785939474; bh=5dLVYkw55hJQpBfzGYsY8pOTjjjhKhyRxJAkRm7omjI=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=fdk7R3F5/hIOHxr9Ky+efRyXBcBeiBvscZIw0WAbE9t4JadGB+A5mzOP64nEuW8Of QFw38OToWGqeOMUr9qhUok7CTH+yarEslFSU87pg18eR5jZJ9clKhrRYe2w6BT/tne PRpckb8bzpzYJ+YRHUwIRMz4l/U3u4NmtXLjpXIpyPMW3MUN6B++S7zb/yYiKZ798a 5h1YoW0cjaVp9EPIjMS7+P/uoCffdYsvFAB2JKC7B8jznOM5wq2AhZWV42G+YlPBBn AqN0ZfsCjvU3C+/RwVvJq3mcdASvgnSKM2knSbAdEEFq0ZWbeL9z7eVzxJ3jZEugZd k15yoHr3LeiAg== From: Aldy Hernandez To: gcc-patches@gcc.gnu.org Cc: jakub@redhat.com, amacleod@redhat.com, rguenther@suse.de, Aldy Hernandez Subject: [PATCH 1/4] Add contains_zero_p to the vrange hierarchy. Date: Wed, 5 Aug 2026 16:17:21 +0200 Message-ID: <20260805141722.3769280-4-aldy@quesejoda.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260805141722.3769280-2-aldy@quesejoda.com> References: <20260805141722.3769280-2-aldy@quesejoda.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_PBL, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org Introduce a contains_zero_p() predicate on vrange and company, returning whether the range contains zero. It is a clearer replacement for nonzero_p(), which only holds for the exact ~[0,0] range. Tested on ppc64le Linux. gcc/ChangeLog: * value-range.h (vrange::contains_zero_p): New pure virtual. (unsupported_range::contains_zero_p): Declare. (irange::contains_zero_p): Declare and define. (prange::contains_zero_p): Declare and define. (frange::contains_zero_p): Declare. (Value_Range::contains_zero_p): New. * value-range.cc (unsupported_range::contains_zero_p): Define. (frange::contains_zero_p): Define. --- gcc/value-range.cc | 14 ++++++++++++++ gcc/value-range.h | 26 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/gcc/value-range.cc b/gcc/value-range.cc index 69d89f34227..f2dfda14831 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -297,6 +297,12 @@ unsupported_range::nonzero_p () const return false; } +bool +unsupported_range::contains_zero_p () const +{ + return varying_p (); +} + void unsupported_range::set_nonzero (tree type) { @@ -1716,6 +1722,14 @@ frange::nonzero_p () const return tmp == nz; } +// Return TRUE if the range contains zero (+0.0 or -0.0). + +bool +frange::contains_zero_p () const +{ + return contains_p (dconst0) || contains_p (dconstm0); +} + // Set range to [+0.0, +0.0] if honoring signed zeros, or [0.0, 0.0] // otherwise. diff --git a/gcc/value-range.h b/gcc/value-range.h index 585120dda44..260f822c8ea 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -103,6 +103,7 @@ public: virtual bool contains_p (tree cst) const = 0; virtual bool zero_p () const = 0; virtual bool nonzero_p () const = 0; + virtual bool contains_zero_p () const = 0; virtual void set_nonzero (tree type) = 0; virtual void set_zero (tree type) = 0; virtual void set_nonnegative (tree type) = 0; @@ -315,6 +316,7 @@ public: // Predicates. virtual bool zero_p () const override; virtual bool nonzero_p () const override; + virtual bool contains_zero_p () const override; virtual bool singleton_p (tree *result = NULL) const override; bool singleton_p (wide_int &) const; bool contains_p (const wide_int &) const; @@ -422,6 +424,7 @@ public: virtual bool singleton_p (tree *result = NULL) const final override; virtual bool zero_p () const final override; virtual bool nonzero_p () const final override; + virtual bool contains_zero_p () const final override; virtual void set (tree, tree, value_range_kind = VR_RANGE) final override; virtual tree type () const final override; virtual bool union_ (const vrange &v) final override; @@ -522,6 +525,7 @@ public: bool contains_p (tree) const final override; bool zero_p () const final override; bool nonzero_p () const final override; + bool contains_zero_p () const final override; void set_nonzero (tree type) final override; void set_zero (tree type) final override; void set_nonnegative (tree type) final override; @@ -634,6 +638,7 @@ public: virtual void accept (const vrange_visitor &v) const override; virtual bool zero_p () const override; virtual bool nonzero_p () const override; + virtual bool contains_zero_p () const override; virtual void set_nonzero (tree type) override; virtual void set_zero (tree type) override; virtual void set_nonnegative (tree type) override; @@ -886,6 +891,7 @@ public: void set_nonzero (tree type) { init (type); return m_vrange->set_nonzero (type); } bool nonzero_p () const { return m_vrange->nonzero_p (); } + bool contains_zero_p () const { return m_vrange->contains_zero_p (); } bool zero_p () const { return m_vrange->zero_p (); } tree lbound () const { return m_vrange->lbound (); } tree ubound () const { return m_vrange->ubound (); } @@ -1137,6 +1143,16 @@ irange::nonzero_p () const return *this == int_range<2> (type (), zero, zero, VR_ANTI_RANGE); } +inline bool +irange::contains_zero_p () const +{ + if (undefined_p ()) + return false; + + wide_int zero = wi::zero (TYPE_PRECISION (type ())); + return contains_p (zero); +} + inline bool irange::supports_p (const_tree type) { @@ -1470,6 +1486,16 @@ prange::nonzero_p () const return m_kind == VR_RANGE && m_min == 1 && m_max == -1; } +inline bool +prange::contains_zero_p () const +{ + if (undefined_p ()) + return false; + + wide_int zero = wi::zero (TYPE_PRECISION (type ())); + return contains_p (zero); +} + inline tree prange::type () const { From patchwork Wed Aug 5 14:17:23 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 140660 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A21A64BAE7EA for ; Wed, 5 Aug 2026 14:20:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A21A64BAE7EA Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=Ac4HyN8d X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from duck.ash.relay.mailchannels.net (duck.ash.relay.mailchannels.net [23.83.222.52]) by sourceware.org (Postfix) with ESMTPS id 96A6B4BA9003 for ; Wed, 5 Aug 2026 14:18:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 96A6B4BA9003 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=quesejoda.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=quesejoda.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 96A6B4BA9003 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=23.83.222.52 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939500; cv=none; b=xGngxYTs4KnzzIiATn2uNCmGCkiClBeF7GAL1sLJ7ZVrmOCWF4a/erhlTmOD0KMYhBW4OZoDu5L2rNESuh/dPigC33azmhpVGVwFj9HpWTi1jNvfGZOV8DIAI0zOJabYaYrxIIQ4HfSsyXYvH7sSGA587y+FNXwYRqf1sIQB1L0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939500; c=relaxed/simple; bh=+QiqFZv7ThnsCJrdcq4W+QqjdVR+9YgSp6/xBWIBfdA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=bRsZZVMoPibwJWZHJd4KDkof07ZzJYWW2IqwxlOQoh4r4aWf0j0QRwN4/MVUVSWoWzFDO8o7uuXt0KrbtZAuSScsf1xuflmN2xCj6Xmdwhq1dVIKTzmPO68l/10Y14gEXOKHJZi30BUf4em1GNtukgr70xJgqrhnqLDoXXltdWc= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=Ac4HyN8d DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 96A6B4BA9003 X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 58DE94617D5; Wed, 05 Aug 2026 14:18:18 +0000 (UTC) Received: from pdx1-sub0-mail-a205.dreamhost.com (trex-green-8.trex.outbound.svc.cluster.local [100.111.248.111]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 1A228461468; Wed, 05 Aug 2026 14:18:18 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|aldy@quesejoda.com X-MailChannels-Auth-Id: dreamhost X-White-Cooing: 2ddfdd697d0878a9_1785939498233_3147736083 X-MC-Loop-Signature: 1785939498233:3180581256 X-MC-Ingress-Time: 1785939498233 Received: from pdx1-sub0-mail-a205.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.111.248.111 (trex/8.0.2); Wed, 05 Aug 2026 14:18:18 +0000 Received: from vesper.quesejoda.com (224.85-85-184.dynamic.clientes.euskaltel.es [85.85.184.224]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: aldy@quesejoda.com) by pdx1-sub0-mail-a205.dreamhost.com (Postfix) with ESMTPSA id 4hFXYz5rkrz3J; Wed, 5 Aug 2026 07:17:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quesejoda.com; s=dreamhost; t=1785939480; bh=HVW16ZFopyhF4qWIMLBp2NuBb+UdvcBAT0FflwHXcUQ=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=Ac4HyN8dRFjwkMJwKmaNsiEzrWRAzT9R3X3GzFjwLDE5sVFnrKV+7L5VlEeGW0p3o /LolAYIoZpiWkulT3SGrIYQgKFzdCfz9YSL7lYevi5FIlTXeIf90Xc4Zyiada0n1/E BX1Pj9ya88kUOWs87cZyAEvvtANliB0YDQtgDctqz7PHEhZH3izwcoo0UzZCaLspPb sMImFFy1bNyhMCiJOMKTW3biOHhdNaFBopmEbcOvY+dArCqileC6Q8PLwEnyT5OFRm KzXn565D/6PRuCgzf7Qlvpw3brYEXLd1OS0Nx5H5CUbSb5VgSdaKRRXutNVknrUzla C9CRM143aTu9w== From: Aldy Hernandez To: gcc-patches@gcc.gnu.org Cc: jakub@redhat.com, amacleod@redhat.com, rguenther@suse.de, Aldy Hernandez Subject: [PATCH 2/4] Use !contains_zero_p for known nonzero tests instead of nonzero_p. Date: Wed, 5 Aug 2026 16:17:23 +0200 Message-ID: <20260805141722.3769280-6-aldy@quesejoda.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260805141722.3769280-2-aldy@quesejoda.com> References: <20260805141722.3769280-2-aldy@quesejoda.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_PBL, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org These callers ask whether a range excludes zero, which nonzero_p () only approximated (i.e. it is false for e.g. [1, 5]). Tested on ppc64le Linux. gcc/ChangeLog: * gimple-range-path.cc (path_range_query::adjust_for_non_null_uses): Use !contains_zero_p instead of nonzero_p. * tree-ssa-structalias.cc (find_what_p_points_to): Likewise. * tree-ssanames.cc (set_range_info): Likewise. * tree-vrp.cc (execute_ranger_vrp): Likewise. gcc/analyzer/ChangeLog: * region-model.cc (region_model::eval_condition): Likewise. --- gcc/analyzer/region-model.cc | 2 +- gcc/gimple-range-path.cc | 2 +- gcc/tree-ssa-structalias.cc | 2 +- gcc/tree-ssanames.cc | 2 +- gcc/tree-vrp.cc | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 8addf1d9a07..f385e008fa7 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -5161,7 +5161,7 @@ region_model::eval_condition (const svalue *lhs, { if (out.zero_p ()) return tristate::TS_FALSE; - if (out.nonzero_p ()) + if (!out.contains_zero_p ()) return tristate::TS_TRUE; } } diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index a8d137741f1..8a89da3dda3 100644 --- a/gcc/gimple-range-path.cc +++ b/gcc/gimple-range-path.cc @@ -460,7 +460,7 @@ path_range_query::adjust_for_non_null_uses (basic_block bb) if (get_cache (r, name)) { - if (r.nonzero_p ()) + if (!r.contains_zero_p ()) continue; } else diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc index 30f911e2c72..76fb3600e74 100644 --- a/gcc/tree-ssa-structalias.cc +++ b/gcc/tree-ssa-structalias.cc @@ -934,7 +934,7 @@ find_what_p_points_to (tree fndecl, tree p) varinfo_t vi; prange vr; get_range_query (DECL_STRUCT_FUNCTION (fndecl))->range_of_expr (vr, p); - bool nonnull = vr.nonzero_p (); + bool nonnull = !vr.contains_zero_p (); /* For parameters, get at the points-to set for the actual parm decl. */ diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc index d2ebb49909f..9ad860df65a 100644 --- a/gcc/tree-ssanames.cc +++ b/gcc/tree-ssanames.cc @@ -429,7 +429,7 @@ set_range_info (tree name, const vrange &r) { struct ptr_info_def *pi = get_ptr_info (name); // If R is nonnull and pi is not, set nonnull. - if (r.nonzero_p () && (!pi || pi->pt.null)) + if (!r.contains_zero_p () && (!pi || pi->pt.null)) set_ptr_nonnull (name); else return false; diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 49eeedb8266..da65d67b405 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -1139,7 +1139,7 @@ execute_ranger_vrp (struct function *fun, bool final_p) { ipa_record_return_value_range (return_range); if (POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))) - && return_range.nonzero_p () + && !return_range.contains_zero_p () && cgraph_node::get (current_function_decl) ->add_detected_attribute ("returns_nonnull")) warn_function_returns_nonnull (current_function_decl); From patchwork Wed Aug 5 14:17:24 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 140658 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A3A5F4B99F4A for ; Wed, 5 Aug 2026 14:19:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A3A5F4B99F4A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=K2GDAXYa X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from olivedrab.birch.relay.mailchannels.net (olivedrab.birch.relay.mailchannels.net [23.83.209.135]) by sourceware.org (Postfix) with ESMTPS id 43E834BA9013 for ; Wed, 5 Aug 2026 14:18:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 43E834BA9013 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=quesejoda.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=quesejoda.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 43E834BA9013 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=23.83.209.135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939500; cv=none; b=DCJcDJB1+mKeHQ5RnPK8s0biytGLT7lLm0aFSaHKYsvgyHkbw/Fb0zklsp7mz8VeNkMtZWPxljovi9GCin/JZGmz5LhyG+fji7GVigRHBUZ0zPWx4R0B7O5QtnSDFOeg7dLEjYc5/Amu39McV6LKO0qKYLHy613q+4oit2LjI6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939500; c=relaxed/simple; bh=P25qZdvHXxiEaNUgrLh3uqco3ohWgNpmF/ytGOVaLlE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xaJ6ivXCbUW7zV1CQq6sIbwr6/vGM0CVyoSAVADxDW024WMLJ0HvbyPzomw3pDiwxcRFFZdBe38rvupiKUUFA84Hw4J/RN1M7IB6UoW2sZgeW26bfy8OAaXSn6Rs5LaxSo0d0mfjBqU135lhVpuZTVVqUp3Jr5sk5avjRmUQ+1I= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=K2GDAXYa DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 43E834BA9013 X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 37AE44C2870; Wed, 05 Aug 2026 14:18:19 +0000 (UTC) Received: from pdx1-sub0-mail-a205.dreamhost.com (100-108-75-116.trex-nlb.outbound.svc.cluster.local [100.108.75.116]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 00F164C2814; Wed, 05 Aug 2026 14:18:18 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|aldy@quesejoda.com X-MailChannels-Auth-Id: dreamhost X-Snatch-Blushing: 54971e1506775830_1785939499079_3760354251 X-MC-Loop-Signature: 1785939499079:3818740215 X-MC-Ingress-Time: 1785939499078 Received: from pdx1-sub0-mail-a205.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.108.75.116 (trex/8.0.2); Wed, 05 Aug 2026 14:18:19 +0000 Received: from vesper.quesejoda.com (224.85-85-184.dynamic.clientes.euskaltel.es [85.85.184.224]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: aldy@quesejoda.com) by pdx1-sub0-mail-a205.dreamhost.com (Postfix) with ESMTPSA id 4hFXZ86wsqz1Rt; Wed, 5 Aug 2026 07:18:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quesejoda.com; s=dreamhost; t=1785939490; bh=qsji6yhjfdJRtG3iOVkYK5J4aq6Mpn0cXGvQXvOrQ+c=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=K2GDAXYawHm1G7JkOuxE8UkBUedfZN4IOERWdwAuH3Y4fAECXt7eFTX6Zi3+rtc66 KGIzVdRwBBvdPYukK5zLRdGPgeL8cHVX9M2X1X6JLp+8648gP4uq3Q2SwZHu040H35 JzGyCut/XmLwAXcrcD1H/Iy1jVo7Mk5IrhFrMXm/1UI5b5Y0qh6MStQsbG/ThzvzZt ORPuHhP+t+uvqnXvbeSIgkhA5FubR7HaT5DaQmR/JCsVUJv5Sxh12YsGJxXG4kD6ja 0QErezBKGCyThhfWHCv8+DxwW0L79Jl/xrnlSCV5msnjRJ6A2BjtK4CbhhSWMfJlc1 skwOAus5TiykA== From: Aldy Hernandez To: gcc-patches@gcc.gnu.org Cc: jakub@redhat.com, amacleod@redhat.com, rguenther@suse.de, Aldy Hernandez Subject: [PATCH 3/4] Implement the exact nonzero-set test without nonzero_p. Date: Wed, 5 Aug 2026 16:17:24 +0200 Message-ID: <20260805141722.3769280-7-aldy@quesejoda.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260805141722.3769280-2-aldy@quesejoda.com> References: <20260805141722.3769280-2-aldy@quesejoda.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_PBL, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org The prange storage encoding and the get_legacy_range function use nonzero_p () for its exact meaning: is this range exactly ~[0,0]? Before removing nonzero_p (), test that directly instead of using nonzero_p. Tested on ppc64le Linux. gcc/ChangeLog: * value-range.cc (get_legacy_range): Compare against a set_nonzero prange instead of calling nonzero_p. * value-range-storage.cc (nonzero_range_p): New. (prange_storage::prange_format): Use it instead of nonzero_p. (prange_storage::equal_p): Likewise. --- gcc/value-range-storage.cc | 21 +++++++++++++++++++-- gcc/value-range.cc | 5 ++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gcc/value-range-storage.cc b/gcc/value-range-storage.cc index c1b9d8ec2f6..827a5260a19 100644 --- a/gcc/value-range-storage.cc +++ b/gcc/value-range-storage.cc @@ -646,6 +646,23 @@ prange_storage::prange_storage (const prange &r) : vrange_storage (VR_PRANGE) set_prange (r); } +// Return TRUE if R is exactly the nonzero set [1, MAX], which prange_storage +// encodes compactly as PR_NONZERO. +// +// Compare the bounds against a fresh set_nonzero () rather than using +// prange::operator==, because operator== also compares the bitmask and +// points-to info, which are stored separately here, so a non-null pointer that +// also carries e.g. an alignment bitmask still belongs in PR_NONZERO. + +static inline bool +nonzero_range_p (const prange &r) +{ + prange nonzero (r.type ()); + nonzero.set_nonzero (r.type ()); + return (r.lower_bound () == nonzero.lower_bound () + && r.upper_bound () == nonzero.upper_bound ()); +} + // Return the prange_kind for range R, and the number of words of storage // it requires in NUM_WORDS. @@ -664,7 +681,7 @@ prange_storage::prange_format (const prange &r, unsigned &num_words) enum prange_kind kind = PR_NONZERO; - if (!r.nonzero_p ()) + if (!nonzero_range_p (r)) { prange tmp (r.type ()); if (r.lower_bound () == tmp.lower_bound () @@ -803,7 +820,7 @@ prange_storage::equal_p (const prange &r) const return r.zero_p (); case PR_NONZERO: - if (!r.nonzero_p ()) + if (!nonzero_range_p (r)) return false; break; diff --git a/gcc/value-range.cc b/gcc/value-range.cc index f2dfda14831..d45c3649582 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -1871,7 +1871,10 @@ get_legacy_range (const prange &r, tree &min, tree &max) min = max = r.lbound (); return VR_RANGE; } - if (r.nonzero_p ()) + prange nonzero (type); + nonzero.set_nonzero (type); + if (r.lower_bound () == nonzero.lower_bound () + && r.upper_bound () == nonzero.upper_bound ()) { min = max = build_zero_cst (type); return VR_ANTI_RANGE; From patchwork Wed Aug 5 14:17:25 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 140659 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 37DDD4BB24F0 for ; Wed, 5 Aug 2026 14:19:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 37DDD4BB24F0 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=YjJunHMg X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from fuchsia.ash.relay.mailchannels.net (fuchsia.ash.relay.mailchannels.net [23.83.222.64]) by sourceware.org (Postfix) with ESMTPS id A7C504BA900C for ; Wed, 5 Aug 2026 14:18:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A7C504BA900C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=quesejoda.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=quesejoda.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A7C504BA900C Authentication-Results: sourceware.org; arc=none smtp.remote-ip=23.83.222.64 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939505; cv=none; b=HdrSUJxs3AeZADKytAZz7QDoSImYxekDRNTUFENS2wHbgfniH6BFLWbZiW4gB2pviVN+J71vz3XxhOVxP7S6rdQj7lM8zSMMfBfp4iab4ZWRNOHFz57ZF9Z/QBq5HglQfkd3q/z+3fzici30vYaDeefp5HzMtGbbhY6yyYrAOMk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785939505; c=relaxed/simple; bh=Yg5JbcxONyrm2uCwGk9qcXYBVtaD0fISJjgpMi0v7CE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=LRp2a62OkyPCocizjCunYlPbmbCV3s6n4bZCVCU72ZTKxCzGm/GkA+J++N6kWXRo0ULsuBpqCJai0q1tJCNXYJREOSbqsot79J2y0bmJNkVW8SmxfeqVBCMoCzysNkvLfEDLFCMThyiD3JRj7+gTwwHFqYWXow1z/nzReM5ZWaw= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quesejoda.com header.i=@quesejoda.com header.a=rsa-sha256 header.s=dreamhost header.b=YjJunHMg DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A7C504BA900C X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 7635D41C97; Wed, 05 Aug 2026 14:18:23 +0000 (UTC) Received: from pdx1-sub0-mail-a205.dreamhost.com (trex-green-8.trex.outbound.svc.cluster.local [100.111.248.111]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id EB20941566; Wed, 05 Aug 2026 14:18:18 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|aldy@quesejoda.com X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|aldy@quesejoda.com X-MailChannels-Auth-Id: dreamhost X-Unite-Lonely: 0b58af86088e8923_1785939503370_2685067518 X-MC-Loop-Signature: 1785939503370:818419319 X-MC-Ingress-Time: 1785939503370 Received: from pdx1-sub0-mail-a205.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.111.248.111 (trex/8.0.2); Wed, 05 Aug 2026 14:18:23 +0000 Received: from vesper.quesejoda.com (224.85-85-184.dynamic.clientes.euskaltel.es [85.85.184.224]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: aldy@quesejoda.com) by pdx1-sub0-mail-a205.dreamhost.com (Postfix) with ESMTPSA id 4hFXZJ1tW5z1gT; Wed, 5 Aug 2026 07:18:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quesejoda.com; s=dreamhost; t=1785939497; bh=EdNhxwIp10LKygVz/wqZwE7bpR3T7njogR3kWe23olA=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=YjJunHMg7nMeK2hqqVZjC2WIjxvPltC8/2YqtCcz8gxDq9pD9lZm2VJCt3nmn29hK yf2lyI3WXOjLaYugw60SrxCneUQATR2grgEddn16+u7DvKnD33GWzOFKwQ+524pjtZ TLpaarGgDlKx1puG25XcxzlRhsbtbMjV9NmXmoek5hfwze4YoVyUjWbYMoqNCO/sug 7WSyjgJNTrlppHIXerhwFR3D3P5dc1fX+5Dsy9Q2cZn4N/e1Qsa6jK/WMQARq+Ophw 8dU1a9xQBRyHsj4FPXmUwahVXExP1TY+v0jIz84FyHaHVQV77/kLrlvtBq8xzx9BuI VKcTNeLkR5dGg== From: Aldy Hernandez To: gcc-patches@gcc.gnu.org Cc: jakub@redhat.com, amacleod@redhat.com, rguenther@suse.de, Aldy Hernandez Subject: [PATCH 4/4] Remove nonzero_p. Date: Wed, 5 Aug 2026 16:17:25 +0200 Message-ID: <20260805141722.3769280-8-aldy@quesejoda.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260805141722.3769280-2-aldy@quesejoda.com> References: <20260805141722.3769280-2-aldy@quesejoda.com> MIME-Version: 1.0 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_HOSTKARMA_W, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, RCVD_IN_PBL, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org All callers now use contains_zero_p () or special case when appropriate. Tested on ppc64le Linux. gcc/ChangeLog: * value-range.h (vrange::nonzero_p): Remove. (unsupported_range::nonzero_p): Remove. (irange::nonzero_p): Remove. (prange::nonzero_p): Remove. (frange::nonzero_p): Remove. (Value_Range::nonzero_p): Remove. * value-range.cc (unsupported_range::nonzero_p): Remove. (frange::nonzero_p): Remove. (range_tests_misc): Test contains_zero_p instead of nonzero_p. (range_tests_sub_ranges_zero): Likewise. * range-op.cc (range_op_bitwise_and_tests): Likewise. --- gcc/range-op.cc | 2 +- gcc/value-range.cc | 50 +++++++++------------------------------------- gcc/value-range.h | 22 -------------------- 3 files changed, 10 insertions(+), 64 deletions(-) diff --git a/gcc/range-op.cc b/gcc/range-op.cc index a1a479a8319..0bfc3fa3358 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -5297,7 +5297,7 @@ range_op_bitwise_and_tests () i1.set_nonzero (integer_type_node); i2.set_varying (integer_type_node); op_bitwise_or.fold_range (res, integer_type_node, i1, i2); - ASSERT_TRUE (res.nonzero_p ()); + ASSERT_FALSE (res.contains_zero_p ()); // (NEGATIVE | X) is nonzero. i1 = int_range<1> (integer_type_node, INT (-5), INT (-3)); diff --git a/gcc/value-range.cc b/gcc/value-range.cc index d45c3649582..3da1609f830 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -291,12 +291,6 @@ unsupported_range::zero_p () const return false; } -bool -unsupported_range::nonzero_p () const -{ - return false; -} - bool unsupported_range::contains_zero_p () const { @@ -1697,31 +1691,6 @@ frange::set_nonzero (tree type) set (type, dconstm0, dconst0, VR_ANTI_RANGE); } -// Return TRUE when this range is exactly the "everything but zero" set that -// set_nonzero builds, mirroring irange::nonzero_p. Callers wanting "does not -// contain zero" should use the !contains_p (0) idiom. -// -// A NAN is not a zero, so nonzero-ness depends only on the intervals, not on -// whether the range may also be a NAN. We therefore recognize the nonzero -// range by comparing intervals against set_nonzero's with the NAN state -// ignored. A strict *this == set_nonzero () would be wrong: set_nonzero -// leaves the NAN able to be either sign, so a range that is otherwise exactly -// nonzero but whose NAN has been cleared would compare unequal. - -bool -frange::nonzero_p () const -{ - if (undefined_p () || known_isnan ()) - return false; - - frange nz; - nz.set_nonzero (type ()); - nz.clear_nan (); - frange tmp = *this; - tmp.clear_nan (); - return tmp == nz; -} - // Return TRUE if the range contains zero (+0.0 or -0.0). bool @@ -3600,10 +3569,10 @@ range_tests_misc () r0 = range_int (0, 0); ASSERT_TRUE (r0.zero_p ()); - // Test nonzero_p(). + // Test contains_zero_p(). r0 = range_int (0, 0); r0.invert (); - ASSERT_TRUE (r0.nonzero_p ()); + ASSERT_FALSE (r0.contains_zero_p ()); // r0 = ~[1,1] r0 = range_int (1, 1, VR_ANTI_RANGE); @@ -3861,26 +3830,25 @@ range_tests_sub_ranges_zero () // Excluding zero from [-0.0, 5.0] eats the lower end entirely. r0.set_nonzero (float_type_node); - ASSERT_TRUE (r0.nonzero_p ()); + ASSERT_FALSE (r0.contains_zero_p ()); ASSERT_FALSE (r0.contains_p (dconst0)); ASSERT_FALSE (r0.contains_p (dconstm0)); - // A NAN is not a zero, so clearing the NAN leaves a nonzero range nonzero. + // A NAN is not a zero, so clearing the NAN leaves the range nonzero. r0.clear_nan (); - ASSERT_TRUE (r0.nonzero_p ()); + ASSERT_FALSE (r0.contains_zero_p ()); - // A range that merely avoids zero is not the nonzero range. + // A range that avoids zero does not contain zero. r0 = frange_float ("1.0", "10.0"); - ASSERT_FALSE (r0.nonzero_p ()); + ASSERT_FALSE (r0.contains_zero_p ()); - // Excluding zero from [-0.0, 5.0] leaves (0, 5]: it avoids zero but is not - // the whole nonzero range. + // Excluding zero from [-0.0, 5.0] leaves (0, 5], which does not contain zero. r0 = frange_float ("-0.0", "5.0"); r0.clear_nan (); r1 = frange_float_excluding ("0.0"); r0.intersect (r1); ASSERT_EQ (r0.num_pairs (), 1); - ASSERT_FALSE (r0.nonzero_p ()); + ASSERT_FALSE (r0.contains_zero_p ()); ASSERT_FALSE (r0.contains_p (dconst0)); ASSERT_FALSE (r0.contains_p (dconstm0)); ASSERT_TRUE (r0.contains_p (real_from_str ("5.0"))); diff --git a/gcc/value-range.h b/gcc/value-range.h index 260f822c8ea..0949c291697 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -102,7 +102,6 @@ public: virtual bool singleton_p (tree *result = NULL) const = 0; virtual bool contains_p (tree cst) const = 0; virtual bool zero_p () const = 0; - virtual bool nonzero_p () const = 0; virtual bool contains_zero_p () const = 0; virtual void set_nonzero (tree type) = 0; virtual void set_zero (tree type) = 0; @@ -315,7 +314,6 @@ public: // Predicates. virtual bool zero_p () const override; - virtual bool nonzero_p () const override; virtual bool contains_zero_p () const override; virtual bool singleton_p (tree *result = NULL) const override; bool singleton_p (wide_int &) const; @@ -423,7 +421,6 @@ public: virtual bool fits_p (const vrange &v) const final override; virtual bool singleton_p (tree *result = NULL) const final override; virtual bool zero_p () const final override; - virtual bool nonzero_p () const final override; virtual bool contains_zero_p () const final override; virtual void set (tree, tree, value_range_kind = VR_RANGE) final override; virtual tree type () const final override; @@ -524,7 +521,6 @@ public: bool singleton_p (tree * = NULL) const final override; bool contains_p (tree) const final override; bool zero_p () const final override; - bool nonzero_p () const final override; bool contains_zero_p () const final override; void set_nonzero (tree type) final override; void set_zero (tree type) final override; @@ -637,7 +633,6 @@ public: virtual bool supports_type_p (const_tree type) const override; virtual void accept (const vrange_visitor &v) const override; virtual bool zero_p () const override; - virtual bool nonzero_p () const override; virtual bool contains_zero_p () const override; virtual void set_nonzero (tree type) override; virtual void set_zero (tree type) override; @@ -890,7 +885,6 @@ public: void set_zero (tree type) { init (type); return m_vrange->set_zero (type); } void set_nonzero (tree type) { init (type); return m_vrange->set_nonzero (type); } - bool nonzero_p () const { return m_vrange->nonzero_p (); } bool contains_zero_p () const { return m_vrange->contains_zero_p (); } bool zero_p () const { return m_vrange->zero_p (); } tree lbound () const { return m_vrange->lbound (); } @@ -1133,16 +1127,6 @@ irange::zero_p () const && upper_bound (0) == 0); } -inline bool -irange::nonzero_p () const -{ - if (undefined_p ()) - return false; - - wide_int zero = wi::zero (TYPE_PRECISION (type ())); - return *this == int_range<2> (type (), zero, zero, VR_ANTI_RANGE); -} - inline bool irange::contains_zero_p () const { @@ -1480,12 +1464,6 @@ prange::zero_p () const return ret; } -inline bool -prange::nonzero_p () const -{ - return m_kind == VR_RANGE && m_min == 1 && m_max == -1; -} - inline bool prange::contains_zero_p () const {