From patchwork Fri Oct 18 12:08:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jennifer Schmitz X-Patchwork-Id: 1999090 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=oYnmPt7K; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XVNlf2pXYz1xth for ; Fri, 18 Oct 2024 23:08:46 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8EBB33858423 for ; Fri, 18 Oct 2024 12:08:44 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on20622.outbound.protection.outlook.com [IPv6:2a01:111:f403:2417::622]) by sourceware.org (Postfix) with ESMTPS id 261D63858C42 for ; Fri, 18 Oct 2024 12:08:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 261D63858C42 Authentication-Results: sourceware.org; dmarc=fail (p=reject dis=none) header.from=nvidia.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nvidia.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 261D63858C42 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2417::622 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1729253303; cv=pass; b=XT3WvELPVBlmV4e7WNVetynl1Yda7+6CCNHz8c0Y9gN2sbhdui07aAieff2hlDN5rw9I0bwcX/a6yE3S4mG0KlybjzLuGJaUEAmsNgIJkMCOwKIRqLknprUZhZP7klRvWIXAtSQWxrcazj9eKe+diKsYb5KQHJDk8ohaX7QCn0A= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1729253303; c=relaxed/simple; bh=9X2hPO80WEFFdVtn4SPsdVqu7mMuU/peXo2i73J8dIM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=J4TdQt8OkdlHjmPTiTMDWQ90sqCr/jw+zo01KT4nEG809LlGxHKneCVP4YXD9SMVa6pDKKLd+1wYCCsk3QgGpHuEcuVCm//j12dYePMYyFnxeZZro+gRiEwb6TsBeozk/1ecsjjMChCq7Gkm3qexHBxAzy82H+2z6tClQSBUc3g= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZsW/fRdkDqGZjqFnROuboG6h8l+0rM6XZpbB70cjtxWMZeylzeYzkwfyLSu/+8kYQIOsvZVZLp/G03LNVCFRVlop4aqIvTDs5kgmW2m0ZZB2IqAgqjg/xh4K7ZdQMeeqAsvAyGfVceB3jZ6vZ309aL7Qz/oUIk7yHL6hFwKovT82nCZBL1k8IBnc6fyZOpr+UDYtn9ErYhG9lMtwgwFlVGgxSS+wepSAZrq0fAIP5NLdkVLDHzOpuCvaaCCYPuCwixtPD9Mc5hMfQ1CG1ohl/FY4yYG8KhYn/B8C3XE45bGyxjZ78oNqMafMUf0S/wPknu454CODP9ge6IAr2cTXbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bKkYYNXiJZ5aLB3iZuIAPNlE83VLKoEPodJ2AcEm3tU=; b=rO5Q1D+d/QNTJnKQLej9PoESL5ShkvBD0hS2RUtCCe69duci22GbJjqH+O5gZ/gsznCfGYHnyC0GjhhVPUokG61+ZzJV6kb1bW/QELwXvPCuj7KZqQufkSuQ88MYrti6x10NN6zNmlNNhjtQZeJThT0kBrRMh18pa2AitpVyD7jxlweRvAAqBgMeMNdK/cq+SgOusE5o0WnpbCmZFrTt6KS1S8HSp1qtliMkOie4RIOcUdz3mxImz77IXwhK1tcpFzIQGioR5YTfz00RFYswYss1aVm5LBaAW5e1DWZNVEXZ+zjB0qTot1soXLl1aDxi59Cr1g0tgZJeqz9twGpPtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bKkYYNXiJZ5aLB3iZuIAPNlE83VLKoEPodJ2AcEm3tU=; b=oYnmPt7K58OErkoMstCZIXrGRAyUUUQDm2BS3DsWxrqnfReku1AzV3AhIfFIldyeh6BYpeL2WnbsCbX4uGbvmDwp9LfoXcLR1uBSsj4/fpGy2RZPaJliwd3I8dtH7AyhkmMCAKl+CZikcQvQbBDYImArbSoDJSy0L0WK2mmT6+LrwuJpfiGQCj2cBNg6yxilcU57RYmrhyVNO6r6J0Gqiw3GZmGTTz+5mYrZGtcXrV+dqkMK6vG3gGaovrlE/FqCHKppfJGWmPQrup43XJLvJ4jESodeVn3ZdrCk72yOVS7t46kfcS5iwJPQVnRMaPLLmEZ0DoSfApfWGbK1KkqeBg== Received: from CH0PR12MB5252.namprd12.prod.outlook.com (2603:10b6:610:d3::24) by SJ2PR12MB8942.namprd12.prod.outlook.com (2603:10b6:a03:53b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8026.20; Fri, 18 Oct 2024 12:08:12 +0000 Received: from CH0PR12MB5252.namprd12.prod.outlook.com ([fe80::290b:293f:5cbd:9c9d]) by CH0PR12MB5252.namprd12.prod.outlook.com ([fe80::290b:293f:5cbd:9c9d%4]) with mapi id 15.20.8069.020; Fri, 18 Oct 2024 12:08:11 +0000 From: Jennifer Schmitz To: "gcc-patches@gcc.gnu.org" CC: Richard Biener Subject: [PATCH] match.pd: Add std::pow folding optimizations. Thread-Topic: [PATCH] match.pd: Add std::pow folding optimizations. Thread-Index: AQHbIVZmMqCAP7I/T0Cp0dm7/eP7oQ== Date: Fri, 18 Oct 2024 12:08:11 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH0PR12MB5252:EE_|SJ2PR12MB8942:EE_ x-ms-office365-filtering-correlation-id: 3176aea7-0e02-442a-1369-08dcef6d896a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|1800799024|376014|38070700018; x-microsoft-antispam-message-info: P6gjryocJhyKFfROy/J10PrkUgrT/mvy/jrS3pKpmpnmdT8qYzNxdbF/RfRn3M+SHlRUljf25YGQ1wN43HZsBK7r0wGRGmBP9+KvlpmiPjU5Vc3U7poda/mAcFhy52LIFSIalxZWmhDHs4dagOEoGGS/FEn1aJUZ1I3hJ4zKozYSwODkQQRtItNogq6GHJa1SPsK7NRstRXuxF+WqwCxhILvnrQ7Lm9wNfREH+YjpQDDb4dedrgt4IM46TtY6AZi5Ytb6bTvUi4Y7bd1AHv8U/9ibikqEbVKc1CuJiH4pRmrC9ynfeHaLZVtPDPVnPYkpG7fhTgd64fvgBUmND8svXQgvjnlhoRQwWjRk8/37DL0cvRnTjrsN2Bi1EwOYZtBw3d5z/EVx0TOcRgNmm39uHLe3ZCedxRaOkrUKJMl1n/mBprAybgyFJjXoKfFqLcHt9wpkAScqglDWy6k0rwV91xwAQIc1HxidC2xAfexLMI69OSCu6hKhNwbmqxM6hD1ybC2AUO0RPVHY4uO754QPIjLccdU6A0dTxDDzn2i78h8m68oVHmnN5p8U/Y8m4MtJC1dm2uUGJmUVNjRv8nK609KM15Opc1+JiS/uYbYXY9rwcQPcsfmFcVtzzi9pg8ChFXPs6+3sSv3+YsHK0obO7NzpAi6JyAjZ4n1wQAh3IFNpXQHtxsfWKU9bzRVhynhFUv4BvUF7cRH5ULyfiCcxIZxkxUQg4EjlfzWp/2hLN2VYck04gk+Ntefmzt9vb10O72oj+jrbYr4p+riYNKTxn28ANdXLlWXPqaW2EXOkb0keAzuP6DYTamI9BfBmsGsTvp27HoK7NM8efgRNz1N7ra+9MeQkbE9ItMAJlybvQQ5ApJnhMswW/ZmvoK+c0K2IakxkVjgyPYxpsLE2z9QQvB3I/4qAs943Ijo8oDaZL8qrWVknWPCyNyNjvHbUgn1VAkUEBjltlOAifuSXltyIuGKJTWNK46Joalr46D3Lct/noplWDHpdOTGQvx97bGHPSvkBgzjamVBX3Tw+YvtPUUc2m6lNCFgxmHn2zmym1t4ZS2tHxVqlEBCsER9S3/z4bmH2LUGu1cNCfFnCc2/nHX0sZQsuZkvwmkQlswC1PabP/DL/FDevythRXXGEv4IKAiceNHEayZoIecG5OcRe7UgmXarJQZ2hZMPSoAj6uSe6vvqqmVj+hv62wxgMsDy6lZIqUqAxKek+OsS0Sfp9+rwhsjoNWOtieHYpYRldmiLxRgFzJ0LpSbW8xpdPIfPUbDtryaQ1pOCcGcb4+Ib4RPUuh5jSL3GMEuIB92z2iF9RVbTx+JVKY7dFggtcazKGt+dc7HHHFyP2tYJEDg3i0Rslc2IA5ST+PGcmxMzmwHRR0aJgbF2FB7EYbvwD1/y x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH0PR12MB5252.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: UMubVirXAr8xWTS6/fAstwzvFWLlo36C7yckb7m7wj4yvaCGzme/96TJlCPrYjVEV19gJG/eell5fbM6XtsxbSOSJiR4cML/fCcHMm6Bg3UhcpNJvJaVMRHdSiRqgIfXXuDmLrKO58nP30c50dHCd9rqOux+pM13hHFsMN1uXaSkDOHe+k7LfNKdiVsniJTWSlf6Pj6i4nV1uwlMeVG12g9Vw1zTSg1hhk5YWt90GjA2+7tvQT3Ozo3drEOa/Yh9/VjlBz4GQBATLNQh7yH5uLA8h6LUvnt52cdKH+nm8jECjMRspGpbAyHKUkaPeI4DbRdWG+OxwGK30HtH27eB1QXRGvcUcEhM4eeEHPoLZ5OhBD0SOJ7253vpIvewb9egKN4uJHqAWCBD75Rm87eNuFM5eOu+FQKUvUava/SUUQFjRZlCxvBLDOx55ZK71aoSzQc5HuV158vgoR4eWnrtpU6CYKo+wX2bcdPjHbknca2dmUTvm/wcu77uQhGcrzpzt8xGZXJ4upzuJfP6aXqaXkHdpvJ3OQFM4BSeh/tYDPxJc1nxFgDuO94JaGzXEkuhY2yaaNYzbp48YOeSos8Etw73063gXEa6clG4wErIE7MtM/7tGDF4o1fEkZlRItGBrs7AjP0z1UvgmnA63t7L1AUz3Ln5nxPvjHsIrylVVYXNStTEwzxuHlEZy/E3BrsURqtNb+sJZRZuL979q1g7nFJ9YIVPC8SW1Ydt0T1/Hx+THy4GFF3VMXzLYAC1BNyiAtAHsa6Sopczu/s+OA84BOopWueTrbRdadwLVjgUvqW6maR77B5XLLMMgOwGhdQH50r2L9U2wADmQP/mDjLIAPCqYjLLmxur17qhPTT+jp2oNSj04d2ptWvHxNjyOQv6RtMUeD6vKMA59gZv+KH5ppi54tuajKFvIQdtfqkAc3fyWe3YvEhwll1y0eXxYTBwYikFArWhBUZTsBdaMvTG/ckWD8OZblGerSZ5uYnc6NHhiSe/z2WLQICq6M7daGIbwdI98P4sZWvtULJxwHVRZaGAMPuhQvuNscIp4tpJVcoFXfKHdyUrTjHiQeAhUYdTkEKkG5gf02WbwNmWiN/4guRn0cCC+zZvFJa/WDTnWESFF7XvBbblE68UdHGlsksos6+7oU8tA5NxcV/1zCsCvx6nNIl0tdK9aTIO0z/D9xvkOIIHzNpSGFORV7Bkm0SwJ0Q8lJEWPJu1EOF2zW9Ysl+2653bZMhp+cioQlPLi+kRj1UefUehIhmr5+7UnFbx+g8Og66111lM3Wzrxx9sCBgSKxl65HLCBgAWadEbf5VjneIW1Ah+SFNMqZEkssgg2knN4YtJ8iKa+NamsFBZVDpvpVErswb3J2MTR8De6/Uey4NEy4MiMalRbKzpgMI6+m2bANcQKoJbY9HJcop6nLhVYbvIYgwTYdTI/HBQdqvUPKmXmCf+rD4pCWnnP68/zefgThR3P3VYQsoJsGzwpiL58O2LFD8S67juZcyhlPciJpRYsH7YLUqzO+Itzz6Kn/SjiGfg2cElX2efqaPZ1wq612xTblRZKxvKwz5gyOIckuD3Jmkj0AJQ0GTbe/kf MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5252.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3176aea7-0e02-442a-1369-08dcef6d896a X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Oct 2024 12:08:11.5081 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: LGloNJN6oIG1IwhQN2gnCVurHQ49xZmjDhQ/F1xXCP8cmQqs33ikjsqvndWvjjRamW3++PYsJ1y9BVw0X7jDHg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8942 X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, SPF_HELO_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org This patch adds the following two simplifications in match.pd: - pow (1.0/x, y) to pow (x, -y), avoiding the division - pow (0.0, x) to 0.0, avoiding the call to pow. The patterns are guarded by flag_unsafe_math_optimizations, !flag_trapping_math, !flag_errno_math, !HONOR_SIGNED_ZEROS, and !HONOR_INFINITIES. Tests were added to confirm the application of the transform for float, double, and long double. The patch was bootstrapped and regtested on aarch64-linux-gnu and x86_64-linux-gnu, no regression. OK for mainline? Signed-off-by: Jennifer Schmitz gcc/ * match.pd: Fold pow (1.0/x, y) -> pow (x, -y) and pow (0.0, x) -> 0.0. gcc/testsuite/ * gcc.dg/tree-ssa/pow_fold_1.c: New test. --- gcc/match.pd | 14 +++++++++ gcc/testsuite/gcc.dg/tree-ssa/pow_fold_1.c | 34 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pow_fold_1.c diff --git a/gcc/match.pd b/gcc/match.pd index 12d81fcac0d..ba100b117e7 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -8203,6 +8203,20 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (rdiv @0 (exps:s @1)) (mult @0 (exps (negate @1))))) + /* Simplify pow(1.0/x, y) into pow(x, -y). */ + (if (! HONOR_INFINITIES (type) + && ! HONOR_SIGNED_ZEROS (type) + && ! flag_trapping_math + && ! flag_errno_math) + (simplify + (POW (rdiv:s real_onep@0 @1) @2) + (POW @1 (negate @2))) + + /* Simplify pow(0.0, x) into 0.0. */ + (simplify + (POW real_zerop@0 @1) + @0)) + (if (! HONOR_SIGN_DEPENDENT_ROUNDING (type) && ! HONOR_NANS (type) && ! HONOR_INFINITIES (type) && ! flag_trapping_math diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pow_fold_1.c b/gcc/testsuite/gcc.dg/tree-ssa/pow_fold_1.c new file mode 100644 index 00000000000..113df572661 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pow_fold_1.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ffast-math" } */ +/* { dg-require-effective-target c99_runtime } */ + +extern void link_error (void); + +#define POW1OVER(TYPE, C_TY, TY) \ + void \ + pow1over_##TY (TYPE x, TYPE y) \ + { \ + TYPE t1 = 1.0##C_TY / x; \ + TYPE t2 = __builtin_pow##TY (t1, y); \ + TYPE t3 = -y; \ + TYPE t4 = __builtin_pow##TY (x, t3); \ + if (t2 != t4) \ + link_error (); \ + } \ + +#define POW0(TYPE, C_TY, TY) \ + void \ + pow0_##TY (TYPE x) \ + { \ + TYPE t1 = __builtin_pow##TY (0.0##C_TY, x); \ + if (t1 != 0.0##C_TY) \ + link_error (); \ + } \ + +#define TEST_ALL(TYPE, C_TY, TY) \ + POW1OVER (TYPE, C_TY, TY) \ + POW0 (TYPE, C_TY, TY) + +TEST_ALL (double, , ) +TEST_ALL (float, f, f) +TEST_ALL (long double, L, l)