From patchwork Tue Aug 13 15:49:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 1146427 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-506837-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="mV5iN3An"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.b="T515AM2n"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.b="T515AM2n"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 467HGf6Lg8z9sNF for ; Wed, 14 Aug 2019 01:50:00 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:content-type :content-transfer-encoding:mime-version; q=dns; s=default; b=DM/ tbOKavYbpe1z/Cz19rDuqa9ahlgpPHiLSxU+hxwqPdCysVfOkY6Y+IZDmT83Henx PYbyI3j1GsJXES6mL+BXMExfeyCTe4dbZcvJdTYNClO1kmi0vuxuS/iUxsjj854b VrT7XNCP9/9kOV8MjcsEMJfZrJIJk4nI3KgcRm4k= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:content-type :content-transfer-encoding:mime-version; s=default; bh=gHfAefEIp 8J2+fbYKanRLgDODvI=; b=mV5iN3AnhZKpZ/nbYn/UPz6OqY5G0oIAV/s7I7pq0 dL4eH91/Xw5Y4tpN1yINdQfHyHqk0IhH2sHVFi2vOeFjGuLl9QTJ3qsJLWc6ymJ6 CsRGMkCPAjaSL0cdsT2WkZr6r7YIFPrcGBSV84UXrrKn99u4eqenyRoZUG3+otKZ fU= Received: (qmail 67702 invoked by alias); 13 Aug 2019 15:49:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 67676 invoked by uid 89); 13 Aug 2019 15:49:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr140074.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (40.107.14.74) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 13 Aug 2019 15:49:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IJfRUFBm0zv2lUqc728jtbdTjEPgbYEcbxkmxqlXWI4=; b=T515AM2nfQcZG4lZFbzHZL5VyErbk63FGxL5UKi17uCZzyO33rxDGLJ7lKkEgdlm++4bGbMZ1QGhejMHG8CGUFTO8OwOBp5YDHs1KSwa+n/UmQTnR03wOU21/gt+9CCR7lNfPPGOooklcaBK2s1fWs1N8lGgrOX8fZhnNRJ/K1g= Received: from VI1PR08CA0167.eurprd08.prod.outlook.com (10.175.227.21) by HE1PR0802MB2602.eurprd08.prod.outlook.com (10.175.36.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.14; Tue, 13 Aug 2019 15:49:45 +0000 Received: from VE1EUR03FT014.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::206) by VI1PR08CA0167.outlook.office365.com (2603:10a6:800:d1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.16 via Frontend Transport; Tue, 13 Aug 2019 15:49:44 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; gcc.gnu.org; dmarc=temperror action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT014.mail.protection.outlook.com (10.152.19.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2115.18 via Frontend Transport; Tue, 13 Aug 2019 15:49:42 +0000 Received: ("Tessian outbound 220137ab7b0b:v26"); Tue, 13 Aug 2019 15:49:42 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 6e1f412971746f66 X-CR-MTA-TID: 64aa7808 Received: from ceec42f937c3.1 (cr-mta-lb-1.cr-mta-net [104.47.9.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 662178A2-B312-4A8E-A3D2-2DDBBE613534.1; Tue, 13 Aug 2019 15:49:37 +0000 Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2058.outbound.protection.outlook.com [104.47.9.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ceec42f937c3.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 13 Aug 2019 15:49:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TewoVNn3oSdYJepSSxheKZPCUc95uu3TQp+t/gF8pNv6c27uFi/+S8quU0eVHjRS/pDKpslq0Z7wzTSY2E3IqsiLNeKJ+UjNlLRdHXukZRdKdMrdcsPQ7EDUZ2VegMDQEnjy2e9ghLLZtt4mUWr9pAjKnO77L7Hgg8ahmYNIiqEDsQXmzqKFP2E0vBd/AR2HupC9kFx6gavttPuUN+0uwpgfqw8cutiUy7S9G+CylN+anL4rJOtIM/ac3q+2yiNpbe+MGjSap5i/LvZJdrQ0JiWihaImncGTIrOrxuTepoYnX3Lo8eVIuF0X7PgKWL9eqqJz6iXmc1esW9BoDCB6Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IJfRUFBm0zv2lUqc728jtbdTjEPgbYEcbxkmxqlXWI4=; b=K92GErM3QsJZv8WrvAYWtVkmaBbzIopqoQXhlPY8YQfn0GZAXCmLJauZd7rKGMbllPQSbTQufxhEtzR3xuRPUQZZfdSnLQdTls9prHFqnOKC3dk5uX04Xd4VW2/jnCX4JND9BrNCyBmj+6rwQh4uKoI7SHHrObyS9SDuZnAdkDW0ymPw0K1w6ghaPpnd4z23rqHUoZAfP6R0EiAdM6HXgEwbmOthuY6Z15IlK22WNN5Z0t05DJqDKjSWxbD6XmDO2W+fO/U6KgopJ8chgg0btzCQwOa5d+/t2YVfgEiLFctZEZnwtBjv59M61/lnLIZsJqLqTHp7ZDqBgJ3ajpITgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IJfRUFBm0zv2lUqc728jtbdTjEPgbYEcbxkmxqlXWI4=; b=T515AM2nfQcZG4lZFbzHZL5VyErbk63FGxL5UKi17uCZzyO33rxDGLJ7lKkEgdlm++4bGbMZ1QGhejMHG8CGUFTO8OwOBp5YDHs1KSwa+n/UmQTnR03wOU21/gt+9CCR7lNfPPGOooklcaBK2s1fWs1N8lGgrOX8fZhnNRJ/K1g= Received: from VI1PR0801MB2127.eurprd08.prod.outlook.com (10.168.62.22) by VI1PR0801MB2062.eurprd08.prod.outlook.com (10.173.70.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.20; Tue, 13 Aug 2019 15:49:35 +0000 Received: from VI1PR0801MB2127.eurprd08.prod.outlook.com ([fe80::21f4:40b7:40fd:736]) by VI1PR0801MB2127.eurprd08.prod.outlook.com ([fe80::21f4:40b7:40fd:736%4]) with mapi id 15.20.2157.022; Tue, 13 Aug 2019 15:49:35 +0000 From: Wilco Dijkstra To: GCC Patches CC: nd Subject: [PATCH] Add missing popcount simplifications (PR90693) Date: Tue, 13 Aug 2019 15:49:35 +0000 Message-ID: Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:VI1PR0801MB2062; x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:9;OLM:9; X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(346002)(376002)(366004)(396003)(39860400002)(136003)(199004)(189003)(52536014)(33656002)(7736002)(9686003)(74316002)(66446008)(55016002)(6916009)(8936002)(76116006)(6436002)(66066001)(5660300002)(305945005)(64756008)(66556008)(66476007)(66946007)(71200400001)(86362001)(81156014)(81166006)(476003)(71190400001)(8676002)(26005)(102836004)(3846002)(486006)(256004)(7696005)(6506007)(53936002)(25786009)(2906002)(316002)(99286004)(14454004)(6116002)(186003)(478600001)(4326008); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0801MB2062; H:VI1PR0801MB2127.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info-Original: y0QrfEw7neyd8jpoAS/3Of2gYs/2he658NXiRkKJO2LBSuU1I9OyCGkwFAzVpxx1z9hnyon0yN99kkufo+qCBLyhbUG7jORMuTlWCN/PkKbeNs7FRsu89TNMwJk7oE0cUim0Vy/rdBiaHZVpDCISEFiBW3UzUhUnDvXyPwT1/BJP3t01gQjZHcYQCddji9ZOKkjdhk/x+ia1zEyGu0ezxA1mnMeENjfmT5nXAP/HVMQ6Wr2Y0gBvLXXeUf5PASHJnysQBHm9pS7z1T0E07nB+JezbctZfDONzoBe4749H4wAQ5m5KPlu1M0yGGpmZGNpLSSgDk659EjfpVWq45ix4j3oDWakM18meEQXONzWr1dhTYy5hsPNlsysHmftjDyBw8/H7W1+QPkgVzoAyvo023Z2jfYWcD6V3xnr8n07Wuk= x-ms-exchange-transport-forked: True MIME-Version: 1.0 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT014.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: b58ad697-f931-4192-6ace-08d72005d75b Add simplifications for popcount (x) > 1 to (x & (x-1)) != 0 and popcount (x) == 1 into (x-1) gcc/ PR middle-end/90693 * match.pd: Add popcount simplifications. testsuite/ PR middle-end/90693 * gcc.dg/fold-popcount-5.c: Add new test. diff --git a/gcc/match.pd b/gcc/match.pd index 0317bc704f771f626ab72189b3a54de00087ad5a..bf4351a330f45f3a1424d9792cefc3da6267597d 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5356,7 +5356,24 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) rep (eq eq ne ne) (simplify (cmp (popcount @0) integer_zerop) - (rep @0 { build_zero_cst (TREE_TYPE (@0)); })))) + (rep @0 { build_zero_cst (TREE_TYPE (@0)); }))) + /* popcount(X) == 1 -> (X-1) 1 -> (X & (X-1)) != 0. */ + (for cmp (gt le) + rep (ne eq) + (simplify + (cmp (convert? (popcount:s @0)) integer_onep) + (rep (bit_and (plus @0 { build_minus_one_cst (TREE_TYPE (@0)); }) @0) + { build_zero_cst (TREE_TYPE (@0)); })))) /* Simplify: diff --git a/gcc/testsuite/gcc.dg/fold-popcount-5.c b/gcc/testsuite/gcc.dg/fold-popcount-5.c new file mode 100644 index 0000000000000000000000000000000000000000..fcf3910587caacb8e39cf437dc3971df892f405a --- /dev/null +++ b/gcc/testsuite/gcc.dg/fold-popcount-5.c @@ -0,0 +1,69 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +/* Test popcount (x) > 1 -> (x & (x-1)) != 0. */ + +int test_1 (long x) +{ + return __builtin_popcountl (x) >= 2; +} + +int test_2 (int x) +{ + return (unsigned) __builtin_popcount (x) <= 1u; +} + +int test_3 (unsigned x) +{ + return __builtin_popcount (x) > 1u; +} + +int test_4 (unsigned long x) +{ + return (unsigned char) __builtin_popcountl (x) > 1; +} + +int test_5 (unsigned long x) +{ + return (signed char) __builtin_popcountl (x) <= (signed char)1; +} + +int test_6 (unsigned long long x) +{ + return 2u <= __builtin_popcountll (x); +} + +/* Test popcount (x) == 1 -> (x-1)