From patchwork Thu Nov 17 17:44:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 60788 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 14CBF385455B for ; Thu, 17 Nov 2022 17:45:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 14CBF385455B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668707142; bh=/k+ZVrUo1ort5tJrjbDisuUYK+Ws4cNiE6md/4UuX7E=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=Od7hjw0sLZ2wuuOb0Yy6o0O2uRK1E7HbYYlnWcPmUVDYLDnTYnymBbxh97xDsnrAW hvzzUzGViVhgLzAEyeEqhp1rTn60FYYo84RQJH2uW6noiK1HAu8RfyX9MJXaHKsjac KG3pFKPdgrFSvJFT6IXsm+F1henKXmjdeUzaqZ68= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 7AE403854563 for ; Thu, 17 Nov 2022 17:44:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7AE403854563 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-110-iqGUgqxMNu-lIcS_e9FJcw-1; Thu, 17 Nov 2022 12:44:56 -0500 X-MC-Unique: iqGUgqxMNu-lIcS_e9FJcw-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 64ADB85A59D for ; Thu, 17 Nov 2022 17:44:56 +0000 (UTC) Received: from abulafia.quesejoda.com (unknown [10.39.194.101]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F1633492B04; Thu, 17 Nov 2022 17:44:55 +0000 (UTC) Received: from abulafia.quesejoda.com (localhost [127.0.0.1]) by abulafia.quesejoda.com (8.17.1/8.17.1) with ESMTPS id 2AHHip4w825348 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 17 Nov 2022 18:44:51 +0100 Received: (from aldyh@localhost) by abulafia.quesejoda.com (8.17.1/8.17.1/Submit) id 2AHHipOf825347; Thu, 17 Nov 2022 18:44:51 +0100 To: GCC patches Cc: Andrew MacLeod , Aldy Hernandez Subject: [COMMITTED] [PR tree-optimization/107732] [range-ops] Handle attempt to abs() negatives. Date: Thu, 17 Nov 2022 18:44:49 +0100 Message-Id: <20221117174449.825329-1-aldyh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.4 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_NONE, RCVD_IN_MSPIKE_H2, 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 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-Patchwork-Original-From: Aldy Hernandez via Gcc-patches From: Aldy Hernandez Reply-To: Aldy Hernandez Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The threader is creating a scenario where we are trying to solve: [NEGATIVES] = abs(x) While solving this we have an intermediate value of UNDEFINED because we have no positive numbers. But then we try to union the negative pair to the final result by querying the bounds. Since neither UNDEFINED nor NAN have bounds, they need to be specially handled. PR tree-optimization/107732 gcc/ChangeLog: * range-op-float.cc (foperator_abs::op1_range): Early exit when result is undefined. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr107732.c: New test. --- gcc/range-op-float.cc | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr107732.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr107732.c diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc index adb0cbaa6d5..ee88511eba0 100644 --- a/gcc/range-op-float.cc +++ b/gcc/range-op-float.cc @@ -1407,7 +1407,7 @@ foperator_abs::op1_range (frange &r, tree type, neg_nan.set_nan (type, true); r.union_ (neg_nan); } - if (r.known_isnan ()) + if (r.known_isnan () || r.undefined_p ()) return true; // Then add the negative of each pair: // ABS(op1) = [5,20] would yield op1 => [-20,-5][5,20]. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr107732.c b/gcc/testsuite/gcc.dg/tree-ssa/pr107732.c new file mode 100644 index 00000000000..b216f38db0e --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr107732.c @@ -0,0 +1,13 @@ +// { dg-do compile } +// { dg-options "-O2" } + +double sqrt(double); +double a, b, c; +void d() { + for (;;) { + c = __builtin_fabs(a); + sqrt(c); + if (a) + a = b; + } +}