From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by sourceware.org (Postfix) with ESMTPS id 0D926384475D for ; Sat, 4 May 2024 08:31:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0D926384475D Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=none smtp.mailfrom=localhost.redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0D926384475D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.139.111.44 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714811468; cv=none; b=ZcP9+1GZCF86ASPdrc5qQ6OPf/uc16ovYvkuWgAF2cg8zkByQOFzbgGnTVG/k6/+sE9OFhqlLjWdQ6Tg4c7AT2ACutREyJZwIfibtGDhEldOK4QdJAWqnBCAXXGvSWorVDZySGUPq1UpmtprMAHcBIC88GsdytBvF0p7ZIHMxpY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714811468; c=relaxed/simple; bh=76FlNphXa2glvW4erO5XDkNeA5yQ3OexM0+uuRZ96RA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=oDJg9Jk1YjIom4U1g3ZyjsCsFBfG7oyvlYkaC+hboSxfqeKqO3CjX7tnfvpdeLWo7QFo0DXtlzC2IdJF08vyJVWTQqXDMXsUW+IXX2qROtjpkk7TZ3V4cmJWQsqBNvhzNxaZWa/hP84N24HE0X7GJCqs3HuhuxcZiFG4c9h4f68= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714811463; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=g2gS9UqheLwn1dIHqKhiKeL4dHH4X+DvWWD84dXufQo=; b=DpikjvY0iGorwykrtERs6YFY+B/VUPwKGLtaGaXUera8U5+GpRZ1D+28yNCuVhgjYLaOcq xCY3dhlaI/7LUAhOS6gpFnErxl5O0CdyFZX4b7ozUmQiAi9rxEJ+armyEOt0vpu1uY8MW+ lUsfR2j7TFeUpIoa2wIPcLZW2NIUM7A= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-590-WfeWK7jiNF6evS9jwtxMqA-1; Sat, 04 May 2024 04:31:02 -0400 X-MC-Unique: WfeWK7jiNF6evS9jwtxMqA-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (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) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B2A813806227 for ; Sat, 4 May 2024 08:31:01 +0000 (UTC) Received: from abulafia.quesejoda.com (unknown [10.39.192.71]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6F10B210FD25; Sat, 4 May 2024 08:31:01 +0000 (UTC) Received: from abulafia.quesejoda.com (localhost [127.0.0.1]) by abulafia.quesejoda.com (8.18.1/8.17.1) with ESMTPS id 4448V0jx139828 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Sat, 4 May 2024 10:31:00 +0200 Received: (from aldyh@localhost) by abulafia.quesejoda.com (8.18.1/8.18.1/Submit) id 4448V0OG139827; Sat, 4 May 2024 10:31:00 +0200 From: Aldy Hernandez To: GCC patches Cc: Andrew MacLeod , Aldy Hernandez Subject: [COMMITTED 11/23] Implement operator_min and operator_max for prange. Date: Sat, 4 May 2024 10:30:39 +0200 Message-ID: <20240504083056.139719-12-aldyh@redhat.com> In-Reply-To: <20240504083056.139719-1-aldyh@redhat.com> References: <20240504083056.139719-1-aldyh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=WINDOWS-1252; x-default=true X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NO_DNS_FOR_FROM,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: gcc/ChangeLog: =09* range-op-mixed.h: Add overloaded declarations for pointer variants. =09* range-op-ptr.cc (operator_min::fold_range): New. =09(operator_min::pointers_handled_p): New. =09(operator_max::fold_range): New. =09(operator_max::pointers_handled_p): New. --- gcc/range-op-mixed.h | 12 ++++++++ gcc/range-op-ptr.cc | 70 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/gcc/range-op-mixed.h b/gcc/range-op-mixed.h index 11b1bf0bca4..b69e674a78b 100644 --- a/gcc/range-op-mixed.h +++ b/gcc/range-op-mixed.h @@ -761,12 +761,18 @@ protected: class operator_min : public range_operator { public: + using range_operator::fold_range; using range_operator::update_bitmask; + bool fold_range (prange &r, tree type, +=09=09 const prange &op1, +=09=09 const prange &op2, +=09=09 relation_trio) const final override; void update_bitmask (irange &r, const irange &lh, =09=09 const irange &rh) const override; // Check compatibility of all operands. bool operand_check_p (tree t1, tree t2, tree t3) const final override { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); } + bool pointers_handled_p (range_op_dispatch_type, unsigned) const final o= verride; protected: void wi_fold (irange &r, tree type, const wide_int &lh_lb, =09=09const wide_int &lh_ub, const wide_int &rh_lb, @@ -776,12 +782,18 @@ protected: class operator_max : public range_operator { public: + using range_operator::fold_range; using range_operator::update_bitmask; + bool fold_range (prange &r, tree type, +=09=09 const prange &op1, +=09=09 const prange &op2, +=09=09 relation_trio) const final override; void update_bitmask (irange &r, const irange &lh, const irange &rh) const override; // Check compatibility of all operands. bool operand_check_p (tree t1, tree t2, tree t3) const final override { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); } + bool pointers_handled_p (range_op_dispatch_type, unsigned) const final o= verride; protected: void wi_fold (irange &r, tree type, const wide_int &lh_lb, =09=09const wide_int &lh_ub, const wide_int &rh_lb, diff --git a/gcc/range-op-ptr.cc b/gcc/range-op-ptr.cc index b8f86c8e838..0addd1096c2 100644 --- a/gcc/range-op-ptr.cc +++ b/gcc/range-op-ptr.cc @@ -951,6 +951,76 @@ operator_cast::pointers_handled_p (range_op_dispatch_t= ype type, } } =20 +bool +operator_min::fold_range (prange &r, tree type, +=09=09=09 const prange &op1, +=09=09=09 const prange &op2, +=09=09=09 relation_trio) const +{ + // For MIN/MAX expressions with pointers, we only care about + // nullness. If both are non null, then the result is nonnull. + // If both are null, then the result is null. Otherwise they + // are varying. + if (!range_includes_zero_p (op1) + && !range_includes_zero_p (op2)) + r.set_nonzero (type); + else if (op1.zero_p () && op2.zero_p ()) + r.set_zero (type); + else + r.set_varying (type); + + update_known_bitmask (r, MIN_EXPR, op1, op2); + return true; +} + +bool +operator_min::pointers_handled_p (range_op_dispatch_type type, +=09=09=09=09 unsigned dispatch) const +{ + switch (type) + { + case DISPATCH_FOLD_RANGE: + return dispatch =3D=3D RO_PPP; + default: + return true; + } +} + +bool +operator_max::fold_range (prange &r, tree type, +=09=09=09 const prange &op1, +=09=09=09 const prange &op2, +=09=09=09 relation_trio) const +{ + // For MIN/MAX expressions with pointers, we only care about + // nullness. If both are non null, then the result is nonnull. + // If both are null, then the result is null. Otherwise they + // are varying. + if (!range_includes_zero_p (op1) + && !range_includes_zero_p (op2)) + r.set_nonzero (type); + else if (op1.zero_p () && op2.zero_p ()) + r.set_zero (type); + else + r.set_varying (type); + + update_known_bitmask (r, MAX_EXPR, op1, op2); + return true; +} + +bool +operator_max::pointers_handled_p (range_op_dispatch_type type, +=09=09=09=09 unsigned dispatch) const +{ + switch (type) + { + case DISPATCH_FOLD_RANGE: + return dispatch =3D=3D RO_PPP; + default: + return true; + } +} + // Initialize any pointer operators to the primary table =20 void --=20 2.44.0