From patchwork Wed Sep 29 16:19:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 45561 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 43BDF385800A for ; Wed, 29 Sep 2021 16:21:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 43BDF385800A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932468; bh=EoDSaljMr1mOXsTW/7zm9owYgJ5C3XH4a9C8udAb0Wc=; h=Date:To:Subject:In-Reply-To:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:From; b=lmriDxEr+zbi1msoy4dxRdmrsweHAtbiTwdnLG8mmbH1s7JlHU/n1gFqvX1o6MsRa OKWcjp0ybFZ7cM5PI7Gr1z+uQX5CIAg7rRdcTPc2ywpr6vNvH7Dajahu6nFS+/nzTc 3MWxc4tGcAr/nVVrO/0ZSKPsgK32bhrk5sb5dREo= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80043.outbound.protection.outlook.com [40.107.8.43]) by sourceware.org (Postfix) with ESMTPS id C081D3857C51 for ; Wed, 29 Sep 2021 16:19:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C081D3857C51 Received: from AM6P191CA0088.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8a::29) by AM6PR08MB4552.eurprd08.prod.outlook.com (2603:10a6:20b:74::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.14; Wed, 29 Sep 2021 16:19:40 +0000 Received: from AM5EUR03FT021.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8a:cafe::6c) by AM6P191CA0088.outlook.office365.com (2603:10a6:209:8a::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Wed, 29 Sep 2021 16:19:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.33.187.114) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;gcc.gnu.org; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.33.187.114 as permitted sender) receiver=protection.outlook.com; client-ip=63.33.187.114; helo=64aa7808-outbound-2.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-2.mta.getcheckrecipient.com (63.33.187.114) by AM5EUR03FT021.mail.protection.outlook.com (10.152.16.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Wed, 29 Sep 2021 16:19:39 +0000 Received: ("Tessian outbound 8b24208353e0:v103"); Wed, 29 Sep 2021 16:19:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 8dfbcff78e91b2d7 X-CR-MTA-TID: 64aa7808 Received: from c9265a8295ab.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id E049B4C8-D1B8-4952-945D-B120AC31656E.1; Wed, 29 Sep 2021 16:19:28 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c9265a8295ab.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:19:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Nspbzd7bmWit53O/OdAx7AyS3xYNQSNpidtQMw69OwnZWEnNNdHVJy8Dk69T9OAEnxfGFdPLangCus1+RwCrBakEYwZ1IA/XhZMiNKF7RtoOefaok3wdukHpHw3iOm0W5bWymD67WUmngHHNMkOi1l9QUAqcF27VF8r/eiQ1InnPjas0Nq721cR+IbQFYzHeN7TdhDvFOhWdiNlUYuKDBIX4TnLXcAWDl8eZvdOoJnAeQOCzOPADO2GuyYPEdqCtAIR3vKk8ewFmo8dR0euR2vpPMOOLaRb7Y50vDrK1F9RVqQJJ7DPdCg/zjmsMacEkNCQCmfDcTDNY0AC7t82L0A== 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; bh=EoDSaljMr1mOXsTW/7zm9owYgJ5C3XH4a9C8udAb0Wc=; b=T70S6FXDSEYPRh/D5hmaVXFdked4GiKPPaRxhxY9jknKwOgdMsbBfrgTOvElu334H4N7Qy+oXqNHtnkqEm48jJhjCyDG6epaBQq+Ca04Kv5w3dmhFX7xr5cES99w7dw4JJ1FNtyJSfJzLCxBjYtvKHpdECBJP09dhteHn0qL/GGuzO+ICvVUiCeEX1+iYI0d1KL4LtETHNTTNGDdkqIkUUaDJs67XoLy8NtbX4e3P/51+32VF6eoUZujZ29Ddg1Tw1hPE1Skl4p1/u1AENpkEX40TohyD4qa3lIQ6jEW12ScEz6cZ5rSlmEQDbfB7xUlPe6hiwH3hAJR9qI72fgl3Q== 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 Authentication-Results-Original: gcc.gnu.org; dkim=none (message not signed) header.d=none;gcc.gnu.org; dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VI1PR08MB2878.eurprd08.prod.outlook.com (2603:10a6:802:19::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.13; Wed, 29 Sep 2021 16:19:27 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd45:5ad5:f666:272a]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd45:5ad5:f666:272a%5]) with mapi id 15.20.4544.022; Wed, 29 Sep 2021 16:19:27 +0000 Date: Wed, 29 Sep 2021 17:19:22 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/7]AArch64 Add combine patterns for right shift and narrow Message-ID: <20210929161920.GA26634@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: LO2P265CA0325.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a4::25) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by LO2P265CA0325.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a4::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.15 via Frontend Transport; Wed, 29 Sep 2021 16:19:26 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 499d167f-77c5-4d38-94a5-08d98364f03d X-MS-TrafficTypeDiagnostic: VI1PR08MB2878:|AM6PR08MB4552: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:16;OLM:16; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: /5RO+tv82cJ7RsM5d7vppgGUNs0w2o6QVDRZHbQDv7j1XKPLR5tL4Whoxhf1w7ktyH9EGuLufwgLqXapvUo7RCAYEFwAAFSAinKgjyUj8pQIcUaAAVeIUZA64OrHx6XCYQQsw4nqedySEhwZfAO6gT5Jdw1bdY1SF81mcSobX/5w5oxP6Yb5m453SH7FNEcYUgV5Hsa3m+0dRt+nD0tydt70rEFCpvIUlzRzTYe/DAggpupm0OzS9c1pkYAI5ObELXiSJ9TFVTOYW8VWWXcQdBzFwTVPsXqR+iyEw99o5merHl9hERieDcmoAH8meNT9Jp23l2ASupAdebrMmAPk5K/Zm8rBR/p5WZeknQ4zIk3+VTDFGJHK3rnk3QxD+kxKfpLvNfvQmYevqjccv6sxlkYF/UXLXvVISZ/SwbnDCUUVw5oMIgIx9xYStLrSdTlKharqmq8n+xn36/qhQmgPHS3ImibU4r3CgFDX2gP/u9Yw5hUtuzoY/38vrrE+Zuhdwb5D1eyIdUK9P2AFSIMbkw2QjH/Sr8Qr1muGXnQ0qtUNCZrjIlmzhdYsC26EEqTbOHw4ZrtNFry8nSP9LU9Fgru9r0xIXicZwL+Se2GVR0zulFlQSvUmJLrzhBcDLGKESrykYrznFpO9FVB30imxzKy/V+H2je+0f/AtKD7BNUTu2oaWvfb3Dp89kbnSxhxBTY3YvEoKeJq53eetCbywI6qOc0gO/bPGCWef+KpcxWKWZL+oEfo+6E591WfPaCu787Sk7W5KKeUftA68hhR5sD6xTNUblOBIgzFfcemSi4tj4xZhYtL3JcGMnhJc4ddl X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR08MB5325.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(33964004)(6916009)(7696005)(6666004)(26005)(52116002)(44832011)(186003)(4743002)(4326008)(2906002)(8676002)(8936002)(44144004)(38100700002)(38350700002)(956004)(86362001)(1076003)(66556008)(36756003)(66476007)(8886007)(508600001)(55016002)(2616005)(66946007)(33656002)(235185007)(5660300002)(316002)(66616009)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB2878 Original-Authentication-Results: gcc.gnu.org; dkim=none (message not signed) header.d=none;gcc.gnu.org; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT021.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: b3c3d936-6045-4761-c257-08d98364e849 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 15cBI5SAaD4TpOXSbIT4DP2fEF+0qwLHU6D52anko9GJuxNAgDnDdgBkKfh9macpEte9Zl91U6EiddLGxVKF3fR2AXd+vyGivaWptJ/ZvES0lj7ilcd+b7SOBJLM7o3gIyjnahwyrLaC8HAW0fBB8jDlrpHHYD2jaJkWXhEG8Om6A9z/aiGbqvGkj9SFglDiEmQHxV3BASrp62YUoXw+bHTk/tIKNx+AfQCIf19+kUfmHksbHpJP6mhO5PNIqkagCHYY/hKK9sWVLxWT2QQ8sO54U6Lkv31Wq7mYwcM/f12bGkd5TblmD5OtrWHglZyaJPdH5l5FhoW4fjYI/Xw8kamLKfC4cwyPtSizDQajnDhZQNwJYZrw1d4Ahyl/D35q6HhgYRGdmRSv7xp51pkFiKTtxD7mEkR+cKcsK+r0UgADp596CEzbz6tZ/BHHbnKPSqbVmQCz9WZ+0Z2xD7T72fbW0CpuqlbF2Dj63D3oQY4IK9TI/xGCN8yncagH6O58HnbWqnoJbsdJtEnFqd6llWkUAxKKx3L7IKU1qqlANlzpcF5q89qeohdxNBmU+h4zrNGRCdrMro0AykheTPuLeWx+1PRGFPAfXkxtLoUO5j9cbzngCkMJ2n+PAJM0gLVG1Wt7gIsVibmRNSlcqO8uFvxs2PKEOljFLHi6HFgtsr71DKCnTxTZgB9/13t8duRWVlTYWOgRlm3eqPnJM/1gZJBbWiooKyJzxHMDpqOU9el8zIacSNrJGVSjUHgQTjMwI0jro1kgTa7be3ZAy4qr6UV121KKGfkzMTlHFtXtCTTReOl4+aZb3V9TMbtbx9On X-Forefront-Antispam-Report: CIP:63.33.187.114; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-2.mta.getcheckrecipient.com; PTR:ec2-63-33-187-114.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(508600001)(70586007)(36860700001)(82310400003)(356005)(4743002)(2616005)(70206006)(7696005)(66616009)(47076005)(186003)(2906002)(44144004)(33964004)(44832011)(8936002)(26005)(8676002)(55016002)(956004)(8886007)(36756003)(4326008)(1076003)(316002)(86362001)(33656002)(235185007)(6666004)(5660300002)(81166007)(336012)(6916009)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:19:39.9422 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 499d167f-77c5-4d38-94a5-08d98364f03d X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.33.187.114]; Helo=[64aa7808-outbound-2.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT021.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4552 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_LOTSOFHASH, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Tamar Christina via Gcc-patches From: Tamar Christina Reply-To: Tamar Christina Cc: Richard.Earnshaw@arm.com, nd@arm.com, richard.sandiford@arm.com, Marcus.Shawcroft@arm.com Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This adds a simple pattern for combining right shifts and narrows into shifted narrows. i.e. typedef short int16_t; typedef unsigned short uint16_t; void foo (uint16_t * restrict a, int16_t * restrict d, int n) { for( int i = 0; i < n; i++ ) d[i] = (a[i] * a[i]) >> 10; } now generates: .L4: ldr q0, [x0, x3] umull v1.4s, v0.4h, v0.4h umull2 v0.4s, v0.8h, v0.8h shrn v1.4h, v1.4s, 10 shrn2 v1.8h, v0.4s, 10 str q1, [x1, x3] add x3, x3, 16 cmp x4, x3 bne .L4 instead of: .L4: ldr q0, [x0, x3] umull v1.4s, v0.4h, v0.4h umull2 v0.4s, v0.8h, v0.8h sshr v1.4s, v1.4s, 10 sshr v0.4s, v0.4s, 10 xtn v1.4h, v1.4s xtn2 v1.8h, v0.4s str q1, [x1, x3] add x3, x3, 16 cmp x4, x3 bne .L4 Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64-simd.md (*aarch64_shrn_vect, *aarch64_shrn2_vect): New. * config/aarch64/iterators.md (srn_op): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/shrn-combine.c: New test. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 48eddf64e05afe3788abfa05141f6544a9323ea1..d7b6cae424622d259f97a3d5fa9093c0fb0bd5ce 100644 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 48eddf64e05afe3788abfa05141f6544a9323ea1..d7b6cae424622d259f97a3d5fa9093c0fb0bd5ce 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -1818,6 +1818,28 @@ (define_insn "aarch64_shrn_insn_be" [(set_attr "type" "neon_shift_imm_narrow_q")] ) +(define_insn "*aarch64_shrn_vect" + [(set (match_operand: 0 "register_operand" "=w") + (truncate: + (SHIFTRT:VQN (match_operand:VQN 1 "register_operand" "w") + (match_operand:VQN 2 "aarch64_simd_shift_imm_vec_"))))] + "TARGET_SIMD" + "shrn\\t%0., %1., %2" + [(set_attr "type" "neon_shift_imm_narrow_q")] +) + +(define_insn "*aarch64_shrn2_vect" + [(set (match_operand: 0 "register_operand" "=w") + (vec_concat: + (match_operand: 1 "register_operand" "0") + (truncate: + (SHIFTRT:VQN (match_operand:VQN 2 "register_operand" "w") + (match_operand:VQN 3 "aarch64_simd_shift_imm_vec_")))))] + "TARGET_SIMD" + "shrn2\\t%0., %2., %3" + [(set_attr "type" "neon_shift_imm_narrow_q")] +) + (define_expand "aarch64_shrn" [(set (match_operand: 0 "register_operand") (truncate: diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index caa42f8f169fbf2cf46a90cf73dee05619acc300..8dbeed3b0d4a44cdc17dd333ed397b39a33f386a 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -2003,6 +2003,9 @@ (define_code_attr shift [(ashift "lsl") (ashiftrt "asr") ;; Op prefix for shift right and accumulate. (define_code_attr sra_op [(ashiftrt "s") (lshiftrt "u")]) +;; op prefix for shift right and narrow. +(define_code_attr srn_op [(ashiftrt "r") (lshiftrt "")]) + ;; Map shift operators onto underlying bit-field instructions (define_code_attr bfshift [(ashift "ubfiz") (ashiftrt "sbfx") (lshiftrt "ubfx") (rotatert "extr")]) diff --git a/gcc/testsuite/gcc.target/aarch64/shrn-combine.c b/gcc/testsuite/gcc.target/aarch64/shrn-combine.c new file mode 100644 index 0000000000000000000000000000000000000000..0187f49f4dcc76182c90366caaf00d294e835707 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shrn-combine.c @@ -0,0 +1,14 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 --save-temps --param=vect-epilogues-nomask=0" } */ + +typedef short int16_t; +typedef unsigned short uint16_t; + +void foo (uint16_t * restrict a, int16_t * restrict d, int n) +{ + for( int i = 0; i < n; i++ ) + d[i] = (a[i] * a[i]) >> 10; +} + +/* { dg-final { scan-assembler-times {\tshrn\t} 1 } } */ +/* { dg-final { scan-assembler-times {\tshrn2\t} 1 } } */