From patchwork Thu Jun 22 08:40:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Greenhalgh X-Patchwork-Id: 779406 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 3wtZnH2yv7z9sBR for ; Thu, 22 Jun 2017 18:41:37 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="E99mXATj"; dkim-atps=neutral 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:in-reply-to:references :mime-version:content-type; q=dns; s=default; b=me8ho1hOEB7uoeLB 9fWiyDVUAFcUWWDxg7AVgAYQ7C4kBe/N168tgCwpzKFfCRDvsRyDPJIbeNR7YgTz jn3hEjo2blOZMLXVkJTWf6s9aadr+IP5Sbyow/SMC1BIczKRYpl7gHhCOPKWtuuC aEpF2GviHf2PlG+4fy7nBUbIw2M= 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:in-reply-to:references :mime-version:content-type; s=default; bh=+V2A6e+111VJxwlAnYStSS yEEvY=; b=E99mXATjckfQ/bBYCzHoebv55jLf8ANBQBzIJQqG0psCUFK9dwrz+F 0smaiMpC+AYSuiAQifb4orXf84XOqoQZsY4xKmO24+Lpe/Wr9Z2wMX6Itko6/Jo/ D6tVs0PRXGOnfCAcoKfkJeIXMtWoC6V4bWjiFkFweb2/ZlABU1Row= Received: (qmail 54456 invoked by alias); 22 Jun 2017 08:41:25 -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 53395 invoked by uid 89); 22 Jun 2017 08:41:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.5 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.2 spammy=toward X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0054.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 22 Jun 2017 08:41:19 +0000 Received: from VI1PR0801CA0082.eurprd08.prod.outlook.com (2603:10a6:800:7d::26) by AM5PR0802MB2513.eurprd08.prod.outlook.com (2603:10a6:203:a0::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15; Thu, 22 Jun 2017 08:41:16 +0000 Received: from AM5EUR03FT004.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e08::201) by VI1PR0801CA0082.outlook.office365.com (2603:10a6:800:7d::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15 via Frontend Transport; Thu, 22 Jun 2017 08:41:16 +0000 Authentication-Results: spf=pass (sender IP is 217.140.96.140) smtp.mailfrom=arm.com; suse.de; dkim=none (message not signed) header.d=none; suse.de; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 217.140.96.140 as permitted sender) receiver=protection.outlook.com; client-ip=217.140.96.140; helo=nebula.arm.com; Received: from nebula.arm.com (217.140.96.140) by AM5EUR03FT004.mail.protection.outlook.com (10.152.16.163) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1178.14 via Frontend Transport; Thu, 22 Jun 2017 08:41:14 +0000 Received: from e107456-lin.cambridge.arm.com (10.1.2.79) by mail.arm.com (10.1.106.66) with Microsoft SMTP Server id 14.3.294.0; Thu, 22 Jun 2017 09:40:57 +0100 From: James Greenhalgh To: CC: , Subject: Re: [Patch match.pd] Fold (A / (1 << B)) to (A >> B) Date: Thu, 22 Jun 2017 09:40:54 +0100 Message-ID: <1498120854-14837-1-git-send-email-james.greenhalgh@arm.com> In-Reply-To: References: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:217.140.96.140; IPV:CAL; SCL:-1; CTRY:GB; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(39860400002)(39410400002)(39850400002)(39450400003)(39400400002)(39840400002)(2980300002)(438002)(377424004)(199003)(24454002)(189002)(5660300001)(106466001)(512874002)(77096006)(6666003)(2906002)(2950100002)(229853002)(6916009)(33646002)(189998001)(4610100001)(2351001)(104016004)(76176999)(36756003)(8936002)(8676002)(50226002)(84326002)(54906002)(2476003)(110136004)(6246003)(38730400002)(72206003)(478600001)(356003)(5890100001)(4326008)(305945005)(86362001)(568964002)(50986999); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2513; H:nebula.arm.com; FPR:; SPF:Pass; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; AM5EUR03FT004; 1:WrctPhnCY0dmQ6uDROCuPeiV9JYSVfbepX+bmwFs/ViQMWXUGpo/Nl+OekSv2v+aVRmwcwZnAaV8UQABSSfUTMMvjC3X0yX63Q80d88cvpEmTzya8Pd4YbjG3jjzLxQxa9duyy3moVjO9wpdVnZ1p4vQL6CjQ7L7CXm/Rbxk+fL86xGlCJIXjPpyKbHRFGwsz40yYS7SUzwuWbgJ900Pz0+ZzI6hpTPWYJg6nEOYbp4iRg1nbHll80W83xaMB0bakL3PQhsuEfbpdPvwapiHrhNXtFTzhdc7uHL8fXLPr3GOXjFfNc7BgWBnIC92ov7qVwytgTV/7UB0QsnbWFhlxuLfxqlRYe0ictE9o71GAafVaDw+4wNbiEgIK2FxjciCFVECnxVgBTwqXegF8XKE9j0+He+FwC7ZbCeCT6dtOa0MLs4tpXn40VApaVSfgcS5V2VdkPRB6D1byvWahrKGDVUwd4l/ZWAAJLgqzKNiPI9OkNfYhWRgcEFoJoYhkQflNBlvV2dM/eTqOYPkpWSEq1U35giCOse4UCWkRbt5rXXyTNDRcZeMYcCxRfp+EPZsclOyud7gqxr2NOKR1H+zAg== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5af1c495-db3f-40a2-cbca-08d4b94a71a8 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002)(2017030254075)(49563074)(201703131423075)(201703031133081)(201702281549075); SRVR:AM5PR0802MB2513; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2513; 3:S+7U6KcNvzQPaXjIevijwkqXfj/FbF2BVmC1UUqcvmgvtqoOWg3Vp6WICxdP/J/sCy8mGjJV5WhjR+dex1cNWXucs42/kC9RIBM/SXocZf4H1zweHZIw96ezutuFZpJA9xk1oAaEmJfE/FgmzJirXbf7M+zoGDjqeLTRwkqDVXrvxV+l0prb8nVT+Is+9Kxa0EzPuLK93nVwzvXuf4lZ+LEHwDqH1zc9AYvPJ4PH/X6dSfPCilamovpqojfr8Znvcwkd3fn3kbIkouRXyhUi4N8mJ0Boyd2ZMnLqv8rXbAgm+QEnZSysv7sgA87iBuDakHHbTXjNBBy8GDWnBrOr2tseQGhp9Tmiqp89o3h7BAMmgojRB93Pxcn/I2/t5VJoK1FPhGLbn1F/qz9/dD26RBrnIR1ULa5CcHyT23n3qlOkL1Ot1/IyES7Tjr/PMotqXwzd6HfB3k7SlUx1+MNXG7I9dNfli4zUshrqIRiHrE2NYFOwU0SvAGFPdc1wLCyJsxF5R0TjEDimw/bv//q/zjQsxUC7z1XaTdq8YLh6r0g= X-MS-TrafficTypeDiagnostic: AM5PR0802MB2513: X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2513; 25:M+rmLNZHLT08snHoZAWsf5SORcRKLZsdCTSuXpTSo4UgYp3IPm+yHrcELrSNqy9o1//1MRFeZCVSxfPz/uEHYOnNlY4V5WWmaJL5Zc1uGEOh2GC0A4HyxlSTFMYjpiWpvhJkujC9anZhmbbjVkmXcLYliCBZD9JPvWnad9ImJcdPPwy0S6DIJqgaRwDUlfYGUN2RY8En5bCu9xmobH68ZEh8TmzW1NQXIjEK72TkkXVu0zBLZl19HE+iCN/Qm6KKVWBk6qgSlp4fE+/T0Kp7QIpWbefz32BIn4RM5RbnBWb6jC7ymul+85bhK8j8+YdKoD3zlUc3HRfg5JOjWe50DdJH8In8PkTH110VDqJTNpcbcFaEggZ1AsYYlYiOD9cB8dYn4YgclX/uZR6LhlUoNlD6EyBO8+kXT+I1gLSFc6E26ObuBQT14Vtnohmj3x3fwJMQTdwSAdic5aQin9rFUgr3lDOSiHatq83H07ftgd7Ka2J9kn+txb50s3+FyxFmSrUGa/kXsFmPAbfofemT8g==; 31:c9Dw/LE605Bb1h/YbnSHNm9z8i9E+gXL8YcCZLZXhZDEyKe4TTZUvU+URPQA9VDIWH5Cn77PjHVdk4X4Wv+8pUe/7SIq53EGRsxzUFCqgcGTmTjutJ7EMskHc7nPUNI+PWsXzys2xAsvWwcmndSlvpTKzPuyiSzKbzR5AYdwSsUBUzH3DW4f6Lbc6p8yoRSdjTZXjcIF4qbZGoepuI53H/gQf2038JJu1bXYejXMpWEtI02BuAQibNMbYgWyfQ7rDvEEjhF88s90rgqC4/gCi7L3r1gUN79pnpDBtSe0Xick8SuT7zLY5HmQQmAU6leq NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2513; 20:CDzoJMyQiwfIA+0e7jtqvWlqRGefKC4K/4Pjs6srW/6gnSqoNUc/xRMPgx6mr7zgeiPFWvX0cZ5vDFaqYeMCEUSY8kHEOKaOVK5YLTDPLD2EaPiWzG/xBlbj3NUiTeM+fWzrSm1ffifBb/Us0i99t/gWaYMn/Gi4lOyuDV0x74ScYHqm+ED0wkD8nIJNztVIRhEMsZXbS0nj40HNNmIYvaXSYAo3ePKUBxzqUMUIs9lvoBM8mhbMhsc0PmNacKQa X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(13021025)(8121501046)(5005006)(13013025)(93006095)(93004095)(3002001)(10201501046)(100000703101)(100105400095)(6055026)(6041248)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(20161123555025)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM5PR0802MB2513; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM5PR0802MB2513; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2513; 4:vERRSu5pA4bqgWXKOMNhBKWeb6HCYR9ws/wb7gzq?= =?us-ascii?Q?0PjNL8ktYgBg3/J7UnU5WcmCe1azgpHl2WbqyQPaY48/Dly8BCcTrOqKNxTP?= =?us-ascii?Q?tQU5t+EZDd3Dkw8CxRyg6XX2zQv+/R2X/tgiVrvSH5sHYrnz4/iUK6ncXGC9?= =?us-ascii?Q?qK5Cmob4FIu/RS7fDR7SZE/C/F70zAEE1/lVx6Hotq1ns90Jz+gT9WfWYHXd?= =?us-ascii?Q?cOe+UW3zGvl9Um0JwzkFNvqkyi/AbJZKrpVRw5hlb2FpyaJS8RTvUpJrdd4r?= =?us-ascii?Q?AoEea/MdRRyk5qhl/Tkfci2bOhzzl1FECM0UXIkTs1b8qz16pdNfNnfP/qnW?= =?us-ascii?Q?x+LOxE7nGDTgiYtC69JMFxRvXinCHXENqb1fO33b1hAkf48bmoFclkBrGX85?= =?us-ascii?Q?BvcJPa1y41/7dSeWktQYZjE/Ygckk/AUPbE5U44W5ZeFfmOw3HhiUlUMFsVQ?= =?us-ascii?Q?IpnU4Wn0XNOtG9neCbCVCaYaduDtc50FPBNqHCu4I1LaPb6jqJ2Q+DeNPJcs?= =?us-ascii?Q?eMbXjvs38EZSv0MMVELg4iI2dsKnaf5KXCHm+uMz39KH6pr+oaKboAyEPIPS?= =?us-ascii?Q?RTKpFlAezIYaJ0pXNulKtqpOMzsWDl45PHXmb73e9VUbZLeyQIwfogOmCZUV?= =?us-ascii?Q?xlV1E3IwFoJ7rZSvB/91wTsxh1NTipkJVkhLMbNJm/ompFuYBo8HOp+/8TpF?= =?us-ascii?Q?VKygl/ikaqiBO9mtJDVcZdMOPt62EtR7pqr40AUlvQYbT1fA6Su2GTr9AaRc?= =?us-ascii?Q?tcZmIIMPwFXx10RXc5OVPvVLigqSgGzGdEROM4806np6RL+U0YGAT/b7h/x5?= =?us-ascii?Q?7S6J+bRWJW7ypbZ02wHZePmv+YQUg6HKtjqn+N89aWRDunL8TLYjrCT5V5eH?= =?us-ascii?Q?zuiHPxQEY+e340XHMn1DBB3CEMcrYDWuDqE3/Dj+kPTKEuHyJ8vHHTZX4uET?= =?us-ascii?Q?xdyyOKlVs11IkMDFjpiuyDoWEBbgDTmUXQq8CAkRI8SMLCI/T3EoYmtJhiGY?= =?us-ascii?Q?dSawCJ/FygD21cRSNZRiw1NKE4E7FJaS9+7hH8mNItaDbl43l2ZjWoMcMH9k?= =?us-ascii?Q?h5joViFkzQldvVTJ0slwVvSE2jsbcXEZOgHskMmwortUSzAUTvHzHhP2Ci9D?= =?us-ascii?Q?4KjMuTeJrJ7FkKzGFiyi94lh5WRw2UUjUdF+quqHYaTEQsOkQJfjGz0am+eJ?= =?us-ascii?Q?UF7P9GzzSrSNanY1MkwuxnGNLolx4/EdBFbV6meQDtNL9lcn0ZFvbULnO+jS?= =?us-ascii?Q?1+SKahhrVs5sMbwzd/p8ac0WNYgs43WtxqYEgaJV?= X-Forefront-PRVS: 03468CBA43 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2513; 23:tS6aEXMG86sgKrZqJjn13Cd2HZUuWe1k+OJoUi3?= =?us-ascii?Q?egZF1a4xOMRQDXFXGRcND2r/IMWbQt1hMIwEqYo9ukoHJDEmstzQSELXeuB0?= =?us-ascii?Q?hTVu3Rn30tfkr6rMFM/AKstWnU4YEXQA06te5PP5+FwKhO1ETzh/YqxUBroW?= =?us-ascii?Q?3XJZKcC08F3EyrvoWuXhGRJlMgAJAqLFSbu/gpShfhAIe4BLeZBXokQQSP6B?= =?us-ascii?Q?hHFuq3fvF4gpOEiRWbjOZG3e7o41E6QEEICW50NQncK9hSHgRw/GRAaOEUYq?= =?us-ascii?Q?Fg1gtzLyec+2HvU4NA34+CRZx9wE8sctktX/ff12cZ60jGu00xBaQfyhVhJs?= =?us-ascii?Q?X8C5Ey2VO5fXdM3gSn2Yh4b8bPLn3cKHYh9uPu3J9ntix3iU3unjnCd1f+q0?= =?us-ascii?Q?Ywpmg87Sk8FtPSSSwsSmtiFgptcWCpqr/Bs0jL9RmOmJBXZ5fY42Br5UL29j?= =?us-ascii?Q?A9jO+1hs0JIZ9gDKl3fOlc0p+osAL9rXWuHag1FErSJi0hY/2mzK5GP44EGJ?= =?us-ascii?Q?KvbJwtbVGR5y8yLWIU7iikSy/YOhkfj7XbAC+okfLfj46tGepFk40dVk5JQe?= =?us-ascii?Q?OvMUFwVtbixH1dCVbiv+SrNZbS4rBc+CmFgee0agNo+O2C5A2c+ECSUV1arx?= =?us-ascii?Q?sgnEP0U8KHXjlHyhnbNvPaZ6VQ6YmK4Bjh6ws9hmgjfbA3e35RUD6Dh9QkAT?= =?us-ascii?Q?uCDD7F+cW6lY8JDhgIdM25gApZSRfNkxbdOqUAJOLigHKJaplcrlEyflJYgH?= =?us-ascii?Q?JhnPYswAwOpcjJ1gmrgbUBNhbSVsZWMgvmcxLZ/rjGN2egQTyIg30C5j2OuA?= =?us-ascii?Q?6zkk5ZU1+oiTvLeZBp25Z1bZjvXRa2R3XT4v64/98rbGM6JDrNdaTnkrg9Ug?= =?us-ascii?Q?9CMOFv9D8E8fCnaJqQZVgr+n7DvKFqLYRxc/o+hT1I8UngFPPjC1UAagR9es?= =?us-ascii?Q?eHLmus1w5gSlJNOXgLrGItfoH7fRX0jeKGH8Pdidk5UwwDmVlF7wyeD+thCq?= =?us-ascii?Q?nPoTbDScsIBjekcaE/3dc5mPYqpeA8H9KltMGkucYSOiO3+H31I3g82niOxX?= =?us-ascii?Q?mRvHGSknfasCGLNizXTfbuJv4sDPiWxlcF1DefxflUELXexS9eC4lPsIPmjD?= =?us-ascii?Q?1ZG71FPY8RIo2f0QULM8nmqT3xvpYNNe9QJ15wFx6U8xeWDok7IpIXA=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2513; 6:BXod10NmPTeXnkShS1IiJQxp9KIK+egKKXRef11T?= =?us-ascii?Q?egy/uJ/rZIDZPUDY2L/wPqDTwrNhSr/zviWzyIRqUB32w38Udv8jcY24qqPj?= =?us-ascii?Q?kZ2MwmlEzaRkGyQUy98Yohwb/bCwi1/U9etRjo0Nq0T1g+Ann42S0MdTHf2a?= =?us-ascii?Q?CCz3ka2dAM/f2CC7QUGrzikDIWo9U11Iu8bFU73U3crq8bJAKSEoulcMkkvw?= =?us-ascii?Q?zSUFaafzLKqIkge7dWyFlxgj/nHh2GBvIQTAgr/+1RfF/5Dt5KbuDyZYKX4I?= =?us-ascii?Q?HaYqM0EnvPv3+muj+/tKLkYFI6xfSZ8mKFZU/aKoVqTpbzkfFAoh36taBp3w?= =?us-ascii?Q?E10SMMvaH2VKC23n1SvsBWiQsRMDytwB2S0tgZGYOJmjc4I1YnZjJEUozqao?= =?us-ascii?Q?3hpNmTaUftHLQSrNFzZUToolPoVvjCcJNu9sTvvfNu3MuUnEHU7Tup/55Qaj?= =?us-ascii?Q?Oo5kw9jciLW4rpfjPa/Hj3HOPncrmxSLpb7hdn/lnjizxyjlt58w32lI9Dpo?= =?us-ascii?Q?qP2dc3mNCOHlZ51zXhQCa05N9zz9UW1UGYHtDoQKmIvWsiJdbAXu3OFIBHwp?= =?us-ascii?Q?+LUZiVG6ndp4iKEv4yBm9FuPhLshGUtMdUoiZdEHJJXaOKqLdr7OqRLKhQ8W?= =?us-ascii?Q?09TDnSCcYZNPb1Wh2CqVwraifn8jZR3tayUrZaze2OyhX6QkTwppFYKRMI9v?= =?us-ascii?Q?5spLtW83S7qwnRaNMACee2LMrAaZXo1/8Hw4fzHTuvHqOGzYfLQ9XeL9duZb?= =?us-ascii?Q?0S3+1ic/sZhFDuO6FWB2OLRNmPo6SnRYL6wKp3HCi74frqcbxF1iXHe62z4F?= =?us-ascii?Q?CG0WS+tcovUcyQUnld2974fpLV8n/lmPLcsps4EV1Y7fTo4M4lNDAmNJFKmO?= =?us-ascii?Q?mue589yzJDZRPoOEv4G+ArTtK6nlPPtSnr+ANF7YkQR8OtLL9Hlm7UMTC5af?= =?us-ascii?Q?/f9IqsowwFOSGicGtEg1xuDg66cYorF1betFVAxb9sTT/wB/Ol5ExLw/VNgD?= =?us-ascii?Q?8+lZ3N9iDE+OrehufGH8q+sY?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2513; 5:LS9dvfi9yoJJ378f9go5WKh4Zwg/viYFRvydnbxz3FfJJmTWlq7AuqWGj86SGyojWkV4sWz9XQArpaIJgDudtiNZFFIJdNJOvcrJBrhRu/7ZULgRfzzz8r/vmooP4+afgyMfQNC4Q76pb158ChZOIkYFi7sdgu4TJ1Cr0zg7Ht4MJ1D0m/2ktsGvuzBodtr6gZAhjCBEKQ+E7Hm7Gp6nwqLB9Rcgur7rWiUSaOviRYl7Y+f2SLtmGruzFmDHaujO48mMh9FX9w7ZQlieTrbwWigASMNNv7kv+gyJuO5FYYz8BB2k5d0QUNkdQc2XZzHTGbLed9vqOYbIhjrOCc3VAhBS++ug69frwRgyXo+Yb10vl9gfRB4et2CxLjYYVtp8BkAT5aj/pujr02JNg7w4cWtYjunW2tSWYvYNbRpv82+paKucP3aQpG74dcbZEhelsSgvhX5Z5NlsmNGyuTJVxtrtxZV1YHK5W9GgvAblU3w9MyXH2HDdri0knIAAUAyj; 24:J63f5USw/vuG1i8dRktvWupc+hNXM7XrT+TqQWDPzS+BVZSa4my6yHdVl+QX3hfiOh7z+SfsijSFvOXnXsHbChcyuSkPFR0srF9VOYcJQ1s= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2513; 7:M7g3jg+9WvVx37q4JcyQtXdrsNqVyZADknApzpANgBHMUAO9hJgh6c8+9Z3IF9aTqLSWT/1WOuMujH2khveAi6ueygaIsBaxYy7nq3kxkXlpFskZp5qbTb+M9AZg9xBJ43JPQZlrRtY3dDbYEIa5uFMXYebuYA16UhwNvGHTIOXL/+2ND/zZbyoTsznrbhM309UsxyBcap7rGaX96LqAeIleHVxyH6iqwekLxRYIriX3lAaW3fl1m1lS+EpX84fnBIBSlKVgJ7ln22v7Vtk1OxSgBTgAVPSJxRJMmK/dy1r64XqHffEi0AK57YGyC5h9mJqpm5qsoru7JQWKvEhyrr3jpxAF4Y/Jzfb0R3qJFlOqXFvLFycStVGb7OHFgV5ueASJpeH+aH212qIDGawt6uV0rswXkPF9KNJeQ/+Fhsx3iv1h9kBS7K5lnYqlYmuqWa6HJemk0/Mn9XVjqR1dkWAJnPufbIZc0nuYyqdxwXSCkmZ7AOI1Yo2tatlNQ9pJba/gC8tVyK44hpNdjdO4APQlgiDbVx5SuyPcuET9y10UJ/orKI1SEX+1fiSXLzglk3bRFDVq0h/vUreXzEywpvhMv5SlUVDPNOHKrFekP5zHYnoa1m3+XyTeG69ezaumzwOf0jDGZqtbtOe7GzF/PbuN05h3pCyZJqQFjB+XAM+TbMTp3sMnXjcOxMu7mFFkBFVIOrG8xVzQiErDyIat9m/dbaLQbeKExM795koGG4P6Oo8BV4vHvRYk2ORgxKvxn++7mzEyAZB9glaTcpfYOC2tOx2EEPCBDQDL4uDrmxc= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2017 08:41:14.9343 (UTC) X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[217.140.96.140]; Helo=[nebula.arm.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2513 X-IsSubscribed: yes On Wed, Jun 21, 2017 at 08:59:29AM +0200, Richard Biener wrote: > Actually I was looking for a bit more generic > > bool > target_supports_op_p (tree type, enum tree_code code, > enum optab_subtype = optab_default) > { > optab ot = optab_for_tree_code (code, type, optab_subtype); > return (ot != unknown_optab > && optab_handler (ot, TYPE_MODE (type)) != CODE_FOR_nothing); > } > > and you using target_supports_op_p (type, RSHIFT_EXPR, optab_scalar) > || target_supports_op_p (type, RSHIFT_EXPR, optab_vector) > > Ok with that change. Oh, I see what you mean. Sorry for not getting that correct last time round. This is what I committed to trunk as revision 249502 after bootstrapping and testing on aarch64-none-linux-gnu without any issues. Thanks, James gcc/ 2017-06-22 James Greenhalgh * match.pd (A / (1 << B) -> A >> B): New. * generic-match-head.c: Include optabs-tree.h. * gimple-match-head.c: Likewise. * optabs-tree.h (target_supports_op_p): New. * optabs-tree.c (target_supports_op_p): New. gcc/testsuite/ 2017-06-22 James Greenhalgh * gcc.dg/tree-ssa/forwprop-37.c: New. diff --git a/gcc/generic-match-head.c b/gcc/generic-match-head.c index 0c0d182..4504401 100644 --- a/gcc/generic-match-head.c +++ b/gcc/generic-match-head.c @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include "builtins.h" #include "case-cfn-macros.h" #include "gimplify.h" +#include "optabs-tree.h" /* Routine to determine if the types T1 and T2 are effectively diff --git a/gcc/gimple-match-head.c b/gcc/gimple-match-head.c index e7e9839..5f6aa27 100644 --- a/gcc/gimple-match-head.c +++ b/gcc/gimple-match-head.c @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "internal-fn.h" #include "case-cfn-macros.h" #include "gimplify.h" +#include "optabs-tree.h" /* Forward declarations of the private auto-generated matchers. diff --git a/gcc/match.pd b/gcc/match.pd index 244e9eb..862372a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -147,6 +147,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (op @0 integer_onep) (non_lvalue @0))) +/* (A / (1 << B)) -> (A >> B). + Only for unsigned A. For signed A, this would not preserve rounding + toward zero. + For example: (-1 / ( 1 << B)) != -1 >> B. */ +(simplify + (trunc_div @0 (lshift integer_onep@1 @2)) + (if ((TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (@0)) + && (!VECTOR_TYPE_P (type) + || target_supports_op_p (type, RSHIFT_EXPR, optab_vector) + || target_supports_op_p (type, RSHIFT_EXPR, optab_scalar))) + (rshift @0 @2))) + /* Preserve explicit divisions by 0: the C++ front-end wants to detect undefined behavior in constexpr evaluation, and assuming that the division traps enables better optimizations than these anyway. */ diff --git a/gcc/optabs-tree.c b/gcc/optabs-tree.c index 4bb54ba..c183b14 100644 --- a/gcc/optabs-tree.c +++ b/gcc/optabs-tree.c @@ -376,3 +376,18 @@ init_tree_optimization_optabs (tree optnode) ggc_free (tmp_optabs); } } + +/* Return TRUE if the target has support for vector right shift of an + operand of type TYPE. If OT_TYPE is OPTAB_DEFAULT, check for existence + of a shift by either a scalar or a vector. Otherwise, check only + for a shift that matches OT_TYPE. */ + +bool +target_supports_op_p (tree type, enum tree_code code, + enum optab_subtype ot_subtype) +{ + optab ot = optab_for_tree_code (code, type, ot_subtype); + return (ot != unknown_optab + && optab_handler (ot, TYPE_MODE (type)) != CODE_FOR_nothing); +} + diff --git a/gcc/optabs-tree.h b/gcc/optabs-tree.h index d0b27e0..52e842b 100644 --- a/gcc/optabs-tree.h +++ b/gcc/optabs-tree.h @@ -41,5 +41,7 @@ bool supportable_convert_operation (enum tree_code, tree, tree, tree *, bool expand_vec_cmp_expr_p (tree, tree, enum tree_code); bool expand_vec_cond_expr_p (tree, tree, enum tree_code); void init_tree_optimization_optabs (tree); +bool target_supports_op_p (tree, enum tree_code, + enum optab_subtype = optab_default); #endif diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-37.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-37.c new file mode 100644 index 0000000..dec826c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-37.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-forwprop1-raw" } */ + +unsigned int +f1 (unsigned int a, unsigned int b) +{ + unsigned int x = 1U << b; + return a / x; +} + +unsigned long +f2 (unsigned long a, int b) +{ + unsigned long x = 1UL << b; + return a / x; +} + +unsigned long long +f3 (unsigned long long a, int b) +{ + unsigned long long x = 1ULL << b; + return a / x; +} + +/* { dg-final { scan-tree-dump-not "trunc_div_expr" "forwprop1" } } */