From patchwork Thu Aug 3 09:34:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 797103 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-459714-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="TZHe7pDs"; 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 3xNPzY0bqmz9s7v for ; Thu, 3 Aug 2017 19:35:04 +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:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=hNgkD7r8X4+HTnx0QE+zMitJVG1zylozM6ll/Ng5BPj6TliBND VgP9C7O+5Yv5mT5J31gXviz9ZQ5h8U0WxwWDPuMPhlXzSM2n1Oa3byoDVPgO+Dfp TdteSm82u02fz3ndrCOX1GJ9ColWAj+jcCLpdcN+LBbts3Qa8YEMvOevA= 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:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=zuFodkucyLqM+enpLVcZq/ihBck=; b=TZHe7pDsZ1HQIy5aLNa5 +s1WroDg8t87lyj0J/ZfGDEZqFOxNJSW1aakhpFpOGYIGyfNRyhmK9nuWNFD8OTM sgNn7t3LsciyNvkGg+4RQ+lDjhEnfhDFOg18SeVr3wGNfEX8B3KaVYpLbSDGJA9g L8noYQ8N+j1HkCKC7Jyv24s= Received: (qmail 64144 invoked by alias); 3 Aug 2017 09:34:55 -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 64108 invoked by uid 89); 3 Aug 2017 09:34:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=scales X-HELO: EUR02-HE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr10084.outbound.protection.outlook.com (HELO EUR02-HE1-obe.outbound.protection.outlook.com) (40.107.1.84) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 03 Aug 2017 09:34:51 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Tamar.Christina@arm.com; Received: from arm.com (217.140.96.140) by VI1PR0802MB2318.eurprd08.prod.outlook.com (2603:10a6:800:9e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1304.22; Thu, 3 Aug 2017 09:34:46 +0000 Date: Thu, 3 Aug 2017 10:34:42 +0100 From: Tamar Christina To: gcc-patches@gcc.gnu.org Cc: nd@arm.com, law@redhat.com, rguenther@suse.de, pinskia@gmail.com, ian@airs.com Subject: [GCC][PATCH][mid-end][Version 3] Optimize x * copysign (1.0, y) [Patch (1/2)] Message-ID: <20170803093439.GA24206@arm.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-ClientProxiedBy: VI1PR0802CA0021.eurprd08.prod.outlook.com (2603:10a6:800:aa::31) To VI1PR0802MB2318.eurprd08.prod.outlook.com (2603:10a6:800:9e::21) X-MS-Office365-Filtering-Correlation-Id: 0727d27e-0113-4ed1-2df5-08d4da52e162 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:VI1PR0802MB2318; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2318; 3:3uQxZuKNtYk7dIWns2FQS6h1kimey7PfxnWGOtJkmqyukqtvFpSS2Vx8Yx8AgJA450m3/P1MiXtNMNmDW9ICkpjek2SIf4RsNAilxBTEwGtNawphTBRdhUGU6kf2pq24o1IL1eQ4gb28zqZ0ORqBcKcG1pISz1qucv1ZSE830/f0zvki2ttiU73v0ypJvHfCwMqPDrXgX8/2hnWEASKcUx0bcpI8akBeigmbaDpmJRIs2qZX0flmMcBFaPufenBueIBbOYY0eFUq5D7Z1bSOy40HmIOhqXbIla8k1CZxcNjgyCV3NYfLH3lQivJvRd8TSon6+QTvcylY+jyye3BEPHaeMM7RRxcrUEGDC6XIWujLHz4LaWRTmRk20Aonuk7gp5t45DceGy83IjUw8LvLcnea5N8eJVixekLjwUgDOV5XAZwHoSXH0SPPhbRy1v9ayja7U+mugkVd46u0JPxRtYv7neiYE7/OoWTJTAv5RhCR9UPdeyIxKXac1yT4EQe58N6zOwTapMpbWLhVUyWziNQMLTxu8Vb7YzKApBApYOMWKY4kJ4EbOb24X/6+SyU4bpNMRJaH7o/6TyXGnYrL2lZBemMWCmYtdbHW11f5jWm4zJAAKs2d16I+TAFIRt8V94IZzGZASTzPGzZ+XMSE4PMtjAnulBQpK/AZ3uS2BskGL3FLg3aCetbkOUri3WsmTIZPLHE1GbGOn87G3Tjm6b7WNe2WIleYH1CvQrHEIQL/JVuWOUYS61tz6D3RJvOb3jcYtbPlytxOOyAou2HEbAwgbHPgGfIeKbvAauweLoc5ZWr01NUWJU9u6w1pNxURgw0Vfnm5f3ACb6ZoDhO6QxwN0vVHyTEWr8yri29MJlM= X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR0802MB2318: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2318; 25:58G62vqgj8GlnPg8H+nilX11m0GZAQsu67cwGoq2EhgskQomoa42xxDx4DUW5iZgC0/Nb2/LbN2sznZOULBPzRJzBUUsQY5sr9PwQQ5CuYeK3uqOutTvCYIbPQXR7axvcjZM6GCiT99xRO0uL2RxpQbzl84YPMiE30hVFKH2sSXGEDlBcXKp3Bdi+p0J0Ddoda/71neEeaSB8OJefzCnL3pfOmZDScp6kcceXVRHwhR41HHATZd0v+rAyVSu9rVDaAV97TEse1BmgcZ64F8ulWu7m0CjdF7PJMxqenTrBRWYTMR1LXs3fqHIOWh7FlJ8D1BTXEQPDOL4itdrjwJqo045uDuaRK9bcjp6HkS5n+oyPGYfjodQ8KS4E/xyvheOxWEltWOheYo1LWvO8wNot2DzwqKVBYpXXPr0vWCdZWsZz7+czASIERQf2YHYhEzhsV0DlGPvMWFdHQbfUJgXMussr6I1KrF2XYbbBqhnWR0bMD/EP75JW2pOPXlfXws8FhJjiQE1qRO0L8rGJusieNOTzLanx3G7cELGJYt9y7m/wG5qatfEoqEt9MMw0DX1VKoY1JVq9X5ny52EifK164o5QI8ukANf6cFmnq9XbB6/6bci92ndNpuDQFH5knrLdp57n/Wg/gXVXqX8q+l1pktMEulTVFH+gBs8zAVBIiaF+N3tc3pdgVnlpmGfXbKDrhEnWU3J0bnC7DVPPeLpBGKem8GwXGRjCHEPVs+MMybJzrxPk0uSQG8JdLI1vZpwnpg2vTWRRhrufC5dEdwkZqRH8d2tyB08pbbDdyTfO3Kz/uWflhjm50TmFpX0BrF/RjMC6eSk/dCjoB84U+skk+E9WUhB8ER2B/av2WSjXsnJwe7z3emwh+gebFXFzuZF0A2f3lN2+eBqo8boHLf+0XYwhiTeVG63kL8oPQn3mhl+B9oxepo1CZMEUGTJL9Rt X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2318; 31:/EmDUfgkD4bpd/5HyAupZ2Y+RBFiw7wRc5I6aaLKaecYLxtVFDF91iAYRoocGnq64MtUn3iOLOFvnsdHMGe76I3f+J/DHQ4HujjOnX9BH8WE6NZdoAFKIx44w3BspD2NBYepUYjzme0umlRqQH8eBglyYr6SCNB+aBd9SswDMdJrWs/FP0EDiUQbMY3jtGYmioRT/26ScCOPuwChvI+f/+4JEcDSqNrqdgzkCKlhExsdjGMfds5sOKhW+YhKa1WAgaTh0TqUeoOb8uSdj9wxRRVIkwzUICA3+qhzael6+crzOjsMl8TojjNe55AaDflWEgZQHoPeY/SnVcSVYC+ITPwf4mlJpbqm/X4p35s7jfVJ9wBac3tZm7bYSwC/H+RXetFoCIPfvwxW05ElLGtXJv5eMiWppHWBCAlKyK6St5yJo0W9wIZgO53MdMNm8BHYg8Id1TCy1WLRfcf/exvMyTaYRlLffNxOmvKbVULG20PgVWWH7Wn7hmawW+AJPy1Z22zJGVFNIq8RCjimiW9mFF0yqbwpFGGznx+JeWz32f7ZHTrmQkjl21qhVVzxWPemFNG8r1/Rc580y5e9U0riAU/0J+kH1KEEO1B0w1yQLPvZdIcBqEZfkYd4/aIStirTNizaomdJY5sX58YhIr5nS+p/XYYf1Og2u6NnvGrkvQ1/5CnnK4qHahy1RDONve9VjwOYqKcAL8D3sXvlZhX5jw==; 20:holO5uIC1aX6avJy0uXitk5vX/gjOZCeqBybQGV4QO9wQAcL7A6pOI6396xXbgbCdNnvZzuFugNhREzNfNGjVXZOM5JMDje5pJYeQk0B8p8NU/UhpI6br6FFNvhR3jSKpa9tRwTjWzHQ+ENhm5K70rsWsC/0AAmeCZFW8yiz33Q= NoDisclaimer: True X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(22074186197030)(183786458502308); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6055026)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123555025)(20161123558100)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:VI1PR0802MB2318; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:VI1PR0802MB2318; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2318; 4:2xyZCvXDWzXMEB02XgIuRvgqcp8fH19V/+AjeIO/?= =?us-ascii?Q?zx1Mz9iboSyShWP30r7oZbiYf4Q7Kl6Uy9Xb0hShbqOz085ZQflmU3OZYusM?= =?us-ascii?Q?pY4aDaiQkXoAzfciKLy16BpaqH+SmvxOmaXN6mNAP6jmWve9KPbY6bd1XyMg?= =?us-ascii?Q?+FOanb7y/uOIZPhUydTnEx2D8Td/0HVOcdhGxfnFZFYfoDqwkuw8HIVDBLOb?= =?us-ascii?Q?JgF0Nog2e7B8ApozVM6BoTt3Ty2fWPtxcqdkQ7HfC552k7cXGPy4tiYDDHWw?= =?us-ascii?Q?tLSrC06lMqgLDBAHaB1BMjL67Euw8N1ecNmRLiVWQZjpbfPK+UbGv34gmSP9?= =?us-ascii?Q?xTHXm3vxTNiBTSJRBfu48wE3NbDaEV1qquKsHmYAP04KYmE8LY0kS+hO7z5c?= =?us-ascii?Q?zr6huQjtmfiI9Qatr0hsGOfSnToQdhfbEm5Ub+b74734PKCTK2C/PPFcQk+2?= =?us-ascii?Q?GeurbViBYbYh46VsNe48G9U+q9NEQUFTxIuV7XL70DME8ogChA1yXMo+KUzc?= =?us-ascii?Q?zG5MoYAzgsf4rKSjD0QYKMpWFrs5afcbFGCdPWEkG1XT4PEfHThFGwO6o5/+?= =?us-ascii?Q?BNFhxHFzYa7ZcyH0oQmvgd35HHhh7cvJ7sU7syHYQydPIB0yzMQR92jX3tGa?= =?us-ascii?Q?DO8tgFsmCUu4gdO8ZDDuGEGqUErbdakCf9TXSPW+1b8396cY5vysBZ9/mCJp?= =?us-ascii?Q?JN5oa2PuNi92PMUX+jiiwRUkMJiCI2bfWFSjkHsoTttHDqh95++4tmWvp6e+?= =?us-ascii?Q?p7AcGjXKI4BnfOysDTBAyzsLTXrz2e8wgD85T8BPP01XYhtW1W+ryjSfBpT+?= =?us-ascii?Q?zPhC3EwXV6KYurTQF46p0AZQjqdMWZGJ6pnB7svrnLSuR/8s+/skHdqPl0CZ?= =?us-ascii?Q?76aPfaS4rnnxkdbqwb7IcOy7Z0OpmGsfNifjuV1Ij+cd74qWOmRF4fR8JAD0?= =?us-ascii?Q?QyPkxJmv26i2itUE78qAgTRJj+UE5rfUm9XqNHXExWVThV+xFBMpuBEBKad8?= =?us-ascii?Q?fk4uXsvnngWHJx1XovdJr4807z6ZIOHfmA82vKZwJLEDY6igBpZn533ke5OO?= =?us-ascii?Q?95EpiCc1Q0zNBn6XDHpEv3GxVCjcEN72A4In/3wkqNbxRVY5Mv1iQnPpzDBK?= =?us-ascii?Q?aOjqT01lhPhM2RNgbyf9igUjQ2hpWFK/VYVkz2gXbW8srCS+e/7PQPzhghCj?= =?us-ascii?Q?mWKFbjZsFkiYmY6Rs3rDC3Dm03KvnEicNPkbBZsolTS9yHKCAtxdFO2kxktN?= =?us-ascii?Q?UF3kkWyzgdxd+BfWp6KQP6ylH0qrfUQIvu6rPuoFf6YblEgBPZMuWElelx5o?= =?us-ascii?Q?SA=3D=3D?= X-Forefront-PRVS: 03883BD916 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(7370300001)(6009001)(39410400002)(39400400002)(39840400002)(39450400003)(199003)(189002)(53754006)(377424004)(305945005)(7350300001)(568964002)(2906002)(6916009)(53936002)(6666003)(5660300001)(38730400002)(966005)(110136004)(66066001)(36756003)(55016002)(81166006)(8676002)(81156014)(33656002)(478600001)(68736007)(5890100001)(101416001)(4326008)(54356999)(7736002)(50986999)(4001350100001)(84326002)(2351001)(72206003)(105586002)(2361001)(4610100001)(97736004)(106356001)(1076002)(2476003)(25786009)(21086003)(42186005)(189998001)(86362001)(6116002)(3846002)(83506001)(6306002)(18370500001)(2700100001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2318; H:arm.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2318; 23:XQFOpcQvM2elsFd/t0w7OWIzJZNgxp+xJwz2PgM?= =?us-ascii?Q?ah6VBPGBQ5iG+OFfO3ByV42q0iueIIa91cVeeCEvLX2zh0FCy4DdIcJI2u7c?= =?us-ascii?Q?f3F93ulRs2hOAb8a4Uun4UnLLggfxNX1mcWeC1SAScKuhwCjJiPV1KlOEMW1?= =?us-ascii?Q?BT5jDFShNBvdzg8lbw9hlcvIekGftC4Oo7fb2IM9K4YJTtqj5Ctn4314coqr?= =?us-ascii?Q?xaHqM8xJeKy87qIJWqJ3nAYsnEhHyLBVej58IzN69NiunZgxEPMZtxlof4hk?= =?us-ascii?Q?LoRLSMyhQ5nZXUpVj97YOcRrRhiYbWfaVvKMs8VSeckN0Crhia9JaWw7mpYZ?= =?us-ascii?Q?INqPubHU8Eb9ByxumbgQ0nL4+GiOGFXDWk45mRwvC0gcx87gedL+cDyC0nSp?= =?us-ascii?Q?Hwn9x48Wj8WDOvHN1mVMJUTog7Bnr3bM4xI1DjnNc0fGSIUDYuOfW+jN6WBm?= =?us-ascii?Q?s4+hLBw93rxzb8z1K/SFjykAAetmm/muMEyBa/Bd0cHgFFz2gN823lVpQ3ID?= =?us-ascii?Q?ZnoUdARX6P1eeXhK2KH9i9x/Qf4mEK1nEAtvpQpiAZuHjXp1cqPfq2Zxnbu/?= =?us-ascii?Q?DrU/JuOYisbcgnJKcRPrcbdd0QT13JpFchQ3TruekyrKPGV6JIvqWoLleo+f?= =?us-ascii?Q?45tsac/ThU0ZTUnWX3P7OQGeA71D0Wb9dcVRsSxW/DypEMrWaI0UZAEUPGIL?= =?us-ascii?Q?7XfHFajFjkbnCjkXSGYbpIg1VbdJuAiNlk0x9c4/9fXAHtBP7M/OLm7NXaVV?= =?us-ascii?Q?4VIbshemkSYbcwop0uyz08bKwOBsFfMXpcuA+5BEmUmX8XcDSiq1FpVoSwFM?= =?us-ascii?Q?Zffqxx/TcsS23UixW14F0tnX45WxrDH2X4Ruzh90sP3PLtkFNF4dz6p9ibmo?= =?us-ascii?Q?ETo02ZzquIkQLLKuhSdrZef/J1zl+tBJ/8bPUCl+bjiJxhOk/O5hGXuJqUtL?= =?us-ascii?Q?XnpfRhiA84y/Ve1rIqwNM7wXqFqG6prYwDnoCWQNl3EAbhKQLC3Mgg6TmkBH?= =?us-ascii?Q?yev/TPPaB80qcceboWnMu9wKmjHyxoaYvouk9lNYZZ7cAOMdxQXu14xLzpzj?= =?us-ascii?Q?1rAWnHLlnbbmYEXhUagXUV4u/GrJ8/sMgNUuTPSlYBNGY1xlcADJVGf6N5lu?= =?us-ascii?Q?uWbB5ngXwygD2E80x660sNQX8FXoy96All+ZGe/OswX48bAjF6iILUyt2aVE?= =?us-ascii?Q?CFIgVdUYWBpBsQ58PsxhutsFqH2gHgmbe/OB2GXdczpnijvSCovHBerpsl5K?= =?us-ascii?Q?f8ibH+VO9NqJZQl6tjsrWz7oKy7axs4qF7qtlK/m98GUXjx+XN12K4IzRAmP?= =?us-ascii?Q?gi1ju4Z0sScWe3vzX8k9TXw+pLjK1llfhChI/ir/axOhKGgAQeQ5RYy1rIxu?= =?us-ascii?Q?sLRzZnFxXArRDGXG1f3u6kZWxfYyQpSr9P5L3YQgmuAbZ2iWcQ0+EgpoZUnb?= =?us-ascii?Q?jYKxcnviDLuuSCTVsGX8/75uzKFsFD14=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2318; 6:ZTmLkUWtZQkaZ0YAws8tyq1GHik6aF+Bj5YJ1ZAs?= =?us-ascii?Q?BLwVgT5TFJK0JYY+wULD+X6NLj+Gj2fWM+snbTqNr3u7oPbtzS1JanhsS/kK?= =?us-ascii?Q?zH+VpVo9Eesgk9lL+y2v6NXRTEUbzBZTf6mxXXvd11IfiG++ONuIC1XZGH21?= =?us-ascii?Q?JugWOpvdluaLPPoNkC5A0i0sZcJrGfdrq4sqqhku49h+0rUWTi8UfPeXkioP?= =?us-ascii?Q?jySoX0gNPiZHtKxha/rogGLnEliwIUzTYbSXe1QtgtXTOEneF/VkT18EiuPg?= =?us-ascii?Q?KOjU567yqz9a0QO+IApTfmJZsbfJoJVw8VQdde98bFnIXY1kqV9T9Rw1uScx?= =?us-ascii?Q?eYjgTBiViSd8DiLMtabZhIKeFHkBiHA/puUzoPGDV6JUF9PA+Uur5Iuol9Lt?= =?us-ascii?Q?5bOwg8rygOt/KoFGiIuyYtIaOGi7tTxylV27555lzL+XUA9FJavx6uhzo5BK?= =?us-ascii?Q?tKHcmbBY+T2X1qdkxz550EN4JVJf4rEcrKcGhdTF1yIQzJQmMFnxjEZlPtKN?= =?us-ascii?Q?umOxCbJbs4TiL4gpw7JPnXZEhlmKxZuOue1uOI2ez3o469/AHMr8YMvrhYx4?= =?us-ascii?Q?OdbRu8dvr3SFVT3dcrNZ6amsKD6bO9OpM7fc4Vaxpl6uHVTqEnJYFcNz4Lfx?= =?us-ascii?Q?EwGhlQeIsM6wAQSNrN7YB94uwPKlgG2yB/oXtRSyM1SI2h/zcgiQoA4p7YRS?= =?us-ascii?Q?/pPtXO01YLAXjCWyQ7WU3A/ss2XZcJMEZrQiOX08MvXxYR3Q/OeUAePB51oz?= =?us-ascii?Q?87o4lOBoAYJmgHJ6lv0aXHVtG9jqec49Jhduj7RbCRX1Sz+xBXRtw5hSNFys?= =?us-ascii?Q?b0sSQ7g8YLufeijnUoGVKalcbt7E4jLB8s8WnHc5gxamuCLE6J8UhlNKgOqQ?= =?us-ascii?Q?ShYM3VmNGJVoGshbHjRIS2nu10d3kCLR3YtfuA+8vGs5Bf5DbGqZmIZuJjpm?= =?us-ascii?Q?xC8kRcl2Vvg2dAE1Dc0trYWd8Ec8bnM1wHLmJaV3QkHHad5yNkKjAlNnwG43?= =?us-ascii?Q?37AyOm94TtEP7CGPVUXevBu0?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2318; 5:ces2CIKCR9emgt6irC3ui5WekgbUCRF54YT7HE2e8QWjBcjPCgHWIch9W8qt9W5/sHA++mlcSfSw8yqtxtyepBaeMYk78Y6m+C2jml0N7AqroD4m0Y47I5WRk4iLoJlxVoQA68/7vgDny8SfXn21O8v5Jn5JatPKNVnHFmm5PtDnIpXFf45QlmmapkQmaTnRdDOJUb4GGP9MPk7ReQUf+5mxu1q7n+LF/Cy+oeM9IvqFLTll6ySmvaoncpqzfxa9CTtK+zMC7oPONTzrUplL2wI5n5l5STxTxr8E2BeLMQq++KfSyne4QGOfAxjbgRxCa2D2lTVyiqzaDSJDn62KZtXvqIp8GKvMe/+cuCGbAXYgupv62rWDFdqd42FIhuvrNdHuXnlE+GmLfExIvEoBy3fteLB4UAvGc1LZYFICsPQNYj2NMzw/0GOo9hZHcE2mSeZGpd3gU6fniQGZg+p/ux76gowG8xW60TnSXOFSFOtBI/Qtd8oEBTgcbujmuV4b; 24:ci6tvlAiorNiZmWG/uRxq8vEWKyyoLsePaLvRwgJiLbIJzT7d93LSIEyweFD0RPN4HeDnCg+Z+n+o4Kiw2MQapotXFLWPPZt7ebqxOo9XLM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2318; 7:YGmilWePmSalAd4T2UAYwZR87f4qOG7s5dx6lWn5zMSAfViyscrr5Hlsb3NFLhmsz9NtvYsaNquWxqV2+Da2+HDdfQnPljafG22UAJKovWDA9XERS9hKlTKSTEHGT1K8pUJwsUW39ZRoUth7kUWbJ21KDGuJgt1dMSdhyium2zH+VobhhCUf16cGCBDwT4y9zkBr6prIt3Vg4sJdLKuJHDETbOxWJ435MPnF7GDf3KFg8mfhJugTsQg4DwI8J4KK6RcptOXB9tc9SpPqRaQ6JxKKwau4wSNMr15oqLaZRP0/JekLX5DJuULHHbioshV3i2aUUssJtrMoZVpHBQi6pAZ7bxWWhbGJbnGPt3f2/oTcSlR73Zv0qiI1US+5ZhS3G5VrQz9Lt/OVImj4fgkiAZLozypaC36xY+VySWRiRWIQndGN2BibM1+Eh0M+zPYQ0MbyRyTgPzVxmzaxmRqmsHz0NU8JLz4Cezi76et1dS1f5hpp6gJ9W3Fdi1xmecyg50+M7uAURxvHEK+JOPUHgx+ApBGvD1uOb5d2E5PiRTlgoYiSLREax5n84XyEbwvtJ5IchErD4sDICdcXPBGfhHdKWs86k4FVcvSnqEL3tR+AkV09pQXsSdCfy9FV5tfrUgd4UTcK+0UTUP1SCWGTbUXHEobe9EHrbTxvq19a81Bc0/pXW+QlBGCBbdZp+M/L1ONQ0PCXmvcnz8vGLLJ/+9N0C2WFXGO6YHe/WUQN5YqUxzHX2mRR9RrJhhygdV6E6lNVarcXDoQbxIvrlE0eI+QbZXiLr3hyIaUbpyYD044= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2017 09:34:46.6282 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2318 X-IsSubscribed: yes Hi All, this patch implements a optimization rewriting x * copysign (1.0, y) to: x ^ (y & (1 << sign_bit_position)) This is only done when not honoring signaling NaNs. This transormation is done at ssa mult widening time and is gated on the a check for the optab "xorsign". If the optab is not available then copysign is expanded as normal. If the optab exists then the expression is replaced with a call to the internal function XORSIGN. This patch is a revival of a previous patches https://gcc.gnu.org/ml/gcc-patches/2015-10/msg00069.html https://gcc.gnu.org/ml/gcc-patches/2017-06/msg00749.html Bootstrapped on both aarch64-none-linux-gnu and x86_64 with no issues. Regression done on aarch64-none-linux-gnu and no regressions. Ok for trunk? gcc/ 2017-08-03 Tamar Christina Andrew Pinski PR middle-end/19706 * internal-fn.def (XORSIGN): New. * optabs.def (xorsign_optab): New. * tree-ssa-math-opts.c (is_copysign_call_with_1): New. (convert_expand_mult_copysign): New. (pass_optimize_widening_mul::execute): Call convert_expand_mult_copysign. diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index a9a3f7606eb2a79f64dab1b7fdeef0d308e3061d..58e5f4a322a92ccb842ab05cc4213933ffa59679 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -129,6 +129,8 @@ DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary) DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary) DEF_INTERNAL_FLT_FN (FMIN, ECF_CONST, fmin, binary) DEF_INTERNAL_FLT_FN (FMAX, ECF_CONST, fmax, binary) +DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary) + /* FP scales. */ DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary) diff --git a/gcc/optabs.def b/gcc/optabs.def index f21f2267ec2118d5cd0e74b18721525a564d16f2..54afe2d796ee9af3bd7b25d93eb0789a70e47c7b 100644 --- a/gcc/optabs.def +++ b/gcc/optabs.def @@ -255,6 +255,7 @@ OPTAB_D (asin_optab, "asin$a2") OPTAB_D (atan2_optab, "atan2$a3") OPTAB_D (atan_optab, "atan$a2") OPTAB_D (copysign_optab, "copysign$F$a3") +OPTAB_D (xorsign_optab, "xorsign$F$a3") OPTAB_D (cos_optab, "cos$a2") OPTAB_D (exp10_optab, "exp10$a2") OPTAB_D (exp2_optab, "exp2$a2") diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index 7ac1659fa0670b7080685f3f9513939807073a63..780a7f76ce756cfe025e80845208b00568eda56c 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -3145,6 +3145,96 @@ is_widening_mult_p (gimple *stmt, return true; } +/* Check to see if the CALL statement is an invocation of copysign + with 1. being the first argument. */ +static bool +is_copysign_call_with_1 (gimple *call) +{ + if (!is_gimple_call (call)) + return false; + + enum combined_fn code = gimple_call_combined_fn (call); + + if (code == CFN_LAST) + return false; + + gcall *c = as_a (call); + + if (builtin_fn_p (code)) + { + switch (as_builtin_fn (code)) + { + CASE_FLT_FN (BUILT_IN_COPYSIGN): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_COPYSIGN): + return real_onep (gimple_call_arg (c, 0)); + default: + return false; + } + } + + if (internal_fn_p (code)) + { + switch (as_internal_fn (code)) + { + case IFN_COPYSIGN: + return real_onep (gimple_call_arg (c, 0)); + default: + return false; + } + } + + return false; +} + +/* Try to expand the pattern x * copysign (1, y) into xorsign (x, y). + This only happens when the the xorsign optab is defined, if the + pattern is not a xorsign pattern or if expansion fails FALSE is + returned, otherwise TRUE is returned. */ +static bool +convert_expand_mult_copysign (gimple *stmt, gimple_stmt_iterator *gsi) +{ + tree treeop0, treeop1, lhs, type; + location_t loc = gimple_location (stmt); + lhs = gimple_assign_lhs (stmt); + treeop0 = gimple_assign_rhs1 (stmt); + treeop1 = gimple_assign_rhs2 (stmt); + type = TREE_TYPE (lhs); + machine_mode mode = TYPE_MODE (type); + + if (HONOR_SNANS (type)) + return false; + + if (TREE_CODE (treeop0) == SSA_NAME && TREE_CODE (treeop1) == SSA_NAME) + { + gimple *call0 = SSA_NAME_DEF_STMT (treeop0); + if (!is_copysign_call_with_1 (call0)) + { + /* IPA sometimes inlines and then extracts the function again, + resulting in an incorrect order, so check both ways. */ + call0 = SSA_NAME_DEF_STMT (treeop1); + if (!is_copysign_call_with_1 (call0)) + return false; + + treeop1 = treeop0; + } + + if (optab_handler (xorsign_optab, mode) == CODE_FOR_nothing) + return false; + + gcall *c = as_a (call0); + treeop0 = gimple_call_arg (c, 1); + + gcall *call_stmt + = gimple_build_call_internal (IFN_XORSIGN, 2, treeop1,treeop0); + gimple_set_lhs (call_stmt, lhs); + gimple_set_location (call_stmt, loc); + gsi_insert_after (gsi, call_stmt, GSI_SAME_STMT); + return true; + } + + return false; +} + /* Process a single gimple statement STMT, which has a MULT_EXPR as its rhs, and try to convert it into a WIDEN_MULT_EXPR. The return value is true iff we converted the statement. */ @@ -4122,6 +4212,11 @@ pass_optimize_widening_mul::execute (function *fun) release_defs (stmt); continue; } + if (convert_expand_mult_copysign (stmt, &gsi)) + { + gsi_remove (&gsi, true); + continue; + } break; case PLUS_EXPR: