From patchwork Wed Jul 13 14:26:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aldy Hernandez X-Patchwork-Id: 237 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a98:d5ce:0:b0:178:cc93:bf7d with SMTP id g14csp285979eik; Wed, 13 Jul 2022 07:28:15 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sMUwGsCyiw3lwU3muXSS4osTHcDnP542+7JqWSX+PbjX053lDjjVIdiDYJud6ftYISm/s2 X-Received: by 2002:a17:906:8462:b0:72b:4e05:a8c1 with SMTP id hx2-20020a170906846200b0072b4e05a8c1mr3818157ejc.443.1657722494990; Wed, 13 Jul 2022 07:28:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657722494; cv=none; d=google.com; s=arc-20160816; b=W5qd2fkoVROnOUspOqcrT0VVQtFsH2tHZJYQZg3jfTxdNjkvlDwxAON5uhaojO+1J8 qUs8neBwaut07khM/04hXq8TaprFlUBN6y8Ap2xK0Ucgi2hAT10FbU/fCRGqTO6qprcl 7EW6LYoVJNFvCPgDkcvMaDr2xzs4RZJpgT4b98TWy/D5803CjOXQBN2ZIiSrrkAWiZXS HRkaTZxBIOoUmGNoQu2k8ZuEKn2fm6X8ZzZUYEOEzusU2zExgegZaa4qBgSrquIJ3KZL NgJc6dEQgsR1UzOThHbktGuN1XJBbN/xdVzl8jX5jnxpaQ3pONQODERaSGssQ0tM/iPv fq+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:dmarc-filter:delivered-to:dkim-signature :dkim-filter; bh=6FOYY5frTx+lFWiGRGjGOGto5dL33vMWgCcr+6iXtN4=; b=TkkxAW3DU/sO2Ml3OwjztZSftw/pMrLOMaVKfx9UoS8INEsKCL8l93vG/QDhU8Nk7h KwDM515bMHTo+yL1BaXFyBhI71LMcwWlpEZt8VbSr7Wq35OHSgjPVWCgSSmhOpzpEzZB Sjq0Yb23AmZdrR021nHFgbS374Bqv1hdubQAOJfzDuMjFfada1wUZScQSHZEaZAm8c2Y mYu2r7idxLmxGqv5YPQoggtLnDP2/k5IKbQdjuLJwc8QpYDmaRDYFTsd42t88VBJljV1 lz0qH0wFjHp1DdBuCjneFors5QtQ+wAhnc0a+zaQbF5MNF1cI88AeP8mxmmM9tV2dptB eywQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=KnX9GmEH; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id b6-20020a170906038600b007269a26e8a6si2425411eja.937.2022.07.13.07.28.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Jul 2022 07:28:14 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=KnX9GmEH; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 673173838F23 for ; Wed, 13 Jul 2022 14:28:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 673173838F23 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1657722484; bh=6FOYY5frTx+lFWiGRGjGOGto5dL33vMWgCcr+6iXtN4=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=KnX9GmEHNTpg2VDivc1BxBsIBqMX5w7DA4v/PD1LkeoMISPXx0TkXjFylwunmsysh /Yi9diUHTXbLSCMrwEw6vegbhHCyshqMLb7PITbXVQXY1e1UP/tKJZMJx1NBLKk1Qt VApoqlnyn2HLg2uCRlmnRTHtJ3afFtm7RYfJUDqk= 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 E4710383A347 for ; Wed, 13 Jul 2022 14:27:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E4710383A347 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-444-CqFJdpOAO4aeferTfoYxYg-1; Wed, 13 Jul 2022 10:27:19 -0400 X-MC-Unique: CqFJdpOAO4aeferTfoYxYg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 30F4A101A596 for ; Wed, 13 Jul 2022 14:27:19 +0000 (UTC) Received: from abulafia.quesejoda.com (unknown [10.39.195.134]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BD7288287E; Wed, 13 Jul 2022 14:27:18 +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 26DERGI8633767 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 13 Jul 2022 16:27:16 +0200 Received: (from aldyh@localhost) by abulafia.quesejoda.com (8.17.1/8.17.1/Submit) id 26DERGJr633766; Wed, 13 Jul 2022 16:27:16 +0200 To: GCC patches Subject: [COMMITTED] Use nonzero bits in range-ops to determine if < 0 is false. Date: Wed, 13 Jul 2022 16:26:19 +0200 Message-Id: <20220713142619.633492-2-aldyh@redhat.com> In-Reply-To: <20220713142619.633492-1-aldyh@redhat.com> References: <20220713142619.633492-1-aldyh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.6 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, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1738248023167235448?= X-GMAIL-MSGID: =?utf-8?q?1738248023167235448?= For a signed integer, x < 0 is false if the sign bit in the nonzero bits of X is clear. Both CCP and ipa-cp can set the global nonzero bits in a range, which means we can now use some of that information in evrp and subsequent passes. I've adjusted two tests which now fold things earlier because of this optimization. Tested on x86-64 Linux. gcc/ChangeLog: * range-op.cc (operator_lt::fold_range): Use nonzero bits. gcc/testsuite/ChangeLog: * g++.dg/ipa/pure-const-3.C: Adjust. * gcc.dg/pr102983.c: Adjust. --- gcc/range-op.cc | 3 +++ gcc/testsuite/g++.dg/ipa/pure-const-3.C | 2 +- gcc/testsuite/gcc.dg/pr102983.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/gcc/range-op.cc b/gcc/range-op.cc index 0e16408027c..e184129f9af 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -803,6 +803,9 @@ operator_lt::fold_range (irange &r, tree type, r = range_true (type); else if (!wi::lt_p (op1.lower_bound (), op2.upper_bound (), sign)) r = range_false (type); + // Use nonzero bits to determine if < 0 is false. + else if (op2.zero_p () && !wi::neg_p (op1.get_nonzero_bits (), sign)) + r = range_false (type); else r = range_true_and_false (type); return true; diff --git a/gcc/testsuite/g++.dg/ipa/pure-const-3.C b/gcc/testsuite/g++.dg/ipa/pure-const-3.C index 172a36bedb5..b4a4673e86e 100644 --- a/gcc/testsuite/g++.dg/ipa/pure-const-3.C +++ b/gcc/testsuite/g++.dg/ipa/pure-const-3.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-ipa-vrp -fdump-tree-optimized -fno-tree-ccp" } */ +/* { dg-options "-O2 -fno-ipa-vrp -fdump-tree-optimized -fno-tree-ccp -fdisable-tree-evrp" } */ int *ptr; static int barvar; static int b(int a); diff --git a/gcc/testsuite/gcc.dg/pr102983.c b/gcc/testsuite/gcc.dg/pr102983.c index ef58af6def0..e1bd24b2e39 100644 --- a/gcc/testsuite/gcc.dg/pr102983.c +++ b/gcc/testsuite/gcc.dg/pr102983.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-evrp" } */ +/* { dg-options "-O2 -fdump-tree-evrp -fno-tree-ccp" } */ void foo(void); static int a = 1;