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: 1534460 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=c3w3e7dv; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKM7k6QBYz9sPT for ; Thu, 30 Sep 2021 02:21:22 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AF3E13858C60 for ; Wed, 29 Sep 2021 16:21:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AF3E13858C60 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932480; 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=c3w3e7dveCq4PHEAepYTYXL4TKWgackOzlB3p2QgQX/uFmcdrVGV3TkhvHxZmXYss boriPcjCVssh/Rbe390hRFaYAK6euUOw07RZIDz9YJkvLl6+bpPyM9uJa3DpABdI/G 2xQtehOsYIjENXusutt8A0cbbZ6ykaOd4/uO7/80= 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+incoming=patchwork.ozlabs.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 } } */ From patchwork Wed Sep 29 16:19:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1534461 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=bIUOZpLS; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKM8s6k41z9sPT for ; Thu, 30 Sep 2021 02:22:21 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BA0A03857C51 for ; Wed, 29 Sep 2021 16:22:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BA0A03857C51 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932539; bh=y8qqNpvp88O014H3XqhSEJr6NYrcm8yJ0LTRAgBETkE=; 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=bIUOZpLS7p53+ef7LABxU3lyGA3ZcZLskAsjxsqgF3HdoD2klIqtewTwApyfu8JFR dLb5/m16FrODMEvze3pIP81cWUnOnHvaXDhyj0kuPsi/YfeRvHKXvCt0WcK35nQbZH 95ScjffDC98XEaMgfICRMtI8k8nK4AavAVFbT8gE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60052.outbound.protection.outlook.com [40.107.6.52]) by sourceware.org (Postfix) with ESMTPS id 97470385802E for ; Wed, 29 Sep 2021 16:20:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 97470385802E Received: from AM6P193CA0119.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::24) by AM0PR08MB5315.eurprd08.prod.outlook.com (2603:10a6:208:18e::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.15; Wed, 29 Sep 2021 16:20:04 +0000 Received: from VE1EUR03FT039.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:85:cafe::f9) by AM6P193CA0119.outlook.office365.com (2603:10a6:209:85::24) 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:20:04 +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 VE1EUR03FT039.mail.protection.outlook.com (10.152.19.196) 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:20:04 +0000 Received: ("Tessian outbound c9f4ff96a6ad:v103"); Wed, 29 Sep 2021 16:20:03 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: be48c586bd249173 X-CR-MTA-TID: 64aa7808 Received: from dc0c457be939.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 666A27D4-D36E-4425-A10B-69387727ABCB.1; Wed, 29 Sep 2021 16:19:51 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dc0c457be939.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:19:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mD1GwmL0Vh9I63rwuGVsSrOYakCOxdYU/BDAkDovdoOSWo6a2TUlCjd5op6EDTnWuKlSmHYQwev24e8dltpz/cM0oL9OviDpZvo2B0gDyHSr4fWcrnsGkI0dyl+Y2PjhohLKA7wfQFNIRuhuvF+X0U7AUXYjuTlmbIefr5Y5Gj8rlL61fLhvOZgl2W39F09AqAQsK19RKdsIsstILw1LhH+bMO+FxK7yWphqx72W1laMqF9Rk1sE46Joz0bK5WU8lyklfyeGysahwu4Tesx4lgwh8L7cOHWVyxB6wrqCTVelOp4KZduQRMSJ1ElFusnA+bR94kXp627rseTyMG/fCg== 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=y8qqNpvp88O014H3XqhSEJr6NYrcm8yJ0LTRAgBETkE=; b=SjVGkQietGHsX7HZBLCFtaJcpPsRNCM9JWc4G+MEtxaCxkEV4yNDR3WV34lVbKkQgdn2n+6IxFh/dnmuyAfkVH2rGeeqRMr8qsN/h5kRNvFy5AB3AWnJOxnrbrPAk32jsC2rtibbw/leROF36j3QOes7nxgIZ0kY127DCpDvO2t5TLnhzTzfBvabgvWurxy43JlZlX+uqVbICGYFgIjIdaTXS+07EW9ruar9Gkh2o/nd2kPFmS39aLn5whk9ivfN6dYIhN9wqz2qNAa/OkzLjw/hWDJ7Ak1pJLckgUDmfRU/2R+amZ4RzS43UCAcHuxXPYhmhGAJtlUun9ewoOphAg== 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 VI1PR0801MB1728.eurprd08.prod.outlook.com (2603:10a6:800:54::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.20; Wed, 29 Sep 2021 16:19:49 +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:49 +0000 Date: Wed, 29 Sep 2021 17:19:44 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 2/7]AArch64 Add combine patterns for narrowing shift of half top bits (shuffle) Message-ID: <20210929161942.GA28881@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: LO2P265CA0043.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:61::31) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by LO2P265CA0043.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:61::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.13 via Frontend Transport; Wed, 29 Sep 2021 16:19:48 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 25eb2327-76a5-4398-d9bc-08d98364fea4 X-MS-TrafficTypeDiagnostic: VI1PR0801MB1728:|AM0PR08MB5315: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:6108;OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 1DF7+13psP3U1XOYbGlajeB0YJ2fT52C/7zdPq678Cl0lfYPSirEtPJx4wmaGUPwEnIjARguJjlzlN1sw3pl1aP9goceWtO2YFvci5eE5XLLIMY322GN58DJj7HvrF6HSBiFnFd3STBcf8UqTllVqnaCgjcIVaTyg/NsYDoaZRSQ/M61Mm3ppUOyKWMJXNh+F8a6NGiydgIVcygRELk2l3hBi4rnYCOaDofXxFCypA7gIcQSVa2ns98l/GNaJXiFoyt2FWHcodJm5QPpxej54iOSvWg8puIRUKPrwyEKRSeqhA5V5XmA+9H7kVQUUcuEV79bq6e0GY0EVzfJAYOvyunDT8Kas4CejfOD+mHb/Dg6ovWXrt7gpdPNQv6Afn01cuCrOZ7bbrzrJOk//vesKfga47PFG403HVYZaXWTtb9Q8pLU7r0XVW9yZq6xIBSjLyJGlIQjEKZThsfyd9GsqmUYOV5kNAVaMnFqU2HrkT+pZBWX+2suGwC70ucwQhWLAH089nOA2LN62TgweFhEb7DkcaHO6emOwIQjM2806d8YnOEfy6i66DESGJmh6u+I/3R0xXZDIaofLQN5KqWIONdwTHyEaDPY2SaIxt9tKzfkFa6/djthMKYIbJLGfOwXQpVuGaT+y5oAwIibgFrFN94bKfcDys8GM265fDN9Ru95Fco90zOBCgVLPEdTkwKFFpYuK5ISqppovkPYjSw06oM2myXaj5R13GXYSlhuddy7m4E8sfY+V7XD/hn0+It8+NHvnLS2Y0mTYy80NvB+VQB1+TtuzqU+AY4lPYbSN5ko4jqW62xNMDxbDSQlPa9ddlgd6Nyx0veKBnhHe4AA6BekJy4wdoJFt3dNNPr1vfI= 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)(44144004)(7696005)(1076003)(36756003)(316002)(66946007)(33656002)(186003)(26005)(66556008)(6666004)(52116002)(8676002)(5660300002)(33964004)(38100700002)(38350700002)(508600001)(66616009)(8886007)(8936002)(66476007)(6916009)(55016002)(235185007)(2616005)(4743002)(44832011)(4326008)(2906002)(86362001)(956004)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1728 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: VE1EUR03FT039.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 24eabd0e-a339-4a22-4bf5-08d98364f585 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: b0qwSx3eivj+TalL/QYN2Q92f2MN6LrnfO2lhl4mHOhz3/VmJkep2na6J/odYAZzxtxh2kK148f9vsgjY0TRYLZ5AhZfbxwoFHCQp31lIXaoE9TZYGTYw+7aXg+55h/cL6Qfx3Db1L56AWjA8jwRoxJlpBdmbmBFTKv/A9gPkb8XDraVrAqgCeISbHaLW6VZ4BMhDZ/uKtw3eu7bqgUQrEi0dUKIX+vlSgSObxcwQ36M6CphpEZ4vL7d4nq5be43sk7g0mX33XoQ8Ukpm/72GFimF4xw8D8h37mcBb5E5grnoTJzKjSkZ3r7LY+vn4y1i/1cIRD5yCOQ7x0yh1hbhRUYsf2Etl3QMjrmmMnaSRU92lVjI81GtLpf3ppQZeTBJ6suOXDU3qX3dJFklR3d2cqphQ41jv3stLRbBbQDEJSpb8FIPMd9kJsTR+EfGdVmDIZJxdZa6lUuVmKchpwTnwdJqWtQTRSMC8ot5Aun8xr5d51JJ/opTRcWfzNo4n2WVQc0Memc9OkN7BeFMXQ/LuIZE61u1UdOPQn2QrmBNO2eivP8PwHl4sk7fgN3+ZyHYOpdtsizU5c+0LZ0DopqrgK/+XQwdDLdcwyG2os/ZkaSnPx+bwbN0slYn2wZ66ko+3eSeM2Yw+cHGbTdBVRDGqbasP3xIno8mV89jjSWmCAoVsHxbCA0pyjTUnu3e/ocBeWny9RzVsmfPhv+HvExlf/PCBtFH+/gJOeoZ6bqiXLThFQKXg997Ah+fkQcno0rXbZc2d4dwCIY9XKQ0Ouc2HRKycC8s31CbuHS2OXmd4ccVjXuypO/q6pMz4uEasPlY6i/tutSZJ65HGo4n1Jm6a5WSv+2Er4a1Q4+t0GNPSs= 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)(5660300002)(7696005)(44144004)(508600001)(6916009)(36860700001)(8886007)(235185007)(336012)(1076003)(4743002)(82310400003)(33964004)(2906002)(36756003)(6666004)(8676002)(55016002)(81166007)(356005)(8936002)(44832011)(47076005)(4326008)(66616009)(26005)(956004)(86362001)(70206006)(70586007)(186003)(316002)(33656002)(2616005)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:20:04.0391 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 25eb2327-76a5-4398-d9bc-08d98364fea4 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: VE1EUR03FT039.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5315 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, When doing a (narrowing) right shift by half the width of the original type then we are essentially shuffling the top bits from the first number down. If we have a hi/lo pair we can just use a single shuffle instead of needing two shifts. 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]) >> 16; } now generates: .L4: ldr q0, [x0, x3] umull v1.4s, v0.4h, v0.4h umull2 v0.4s, v0.8h, v0.8h uzp2 v0.8h, v1.8h, v0.8h str q0, [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, 16 sshr v0.4s, v0.4s, 16 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_topbits_shuffle, *aarch64_topbits_shuffle): New. * config/aarch64/predicates.md (aarch64_simd_shift_imm_vec_exact_top): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/shrn-combine-2.c: New test. * gcc.target/aarch64/shrn-combine-3.c: New test. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index d7b6cae424622d259f97a3d5fa9093c0fb0bd5ce..300bf001b59ca7fa197c580b10adb7f70f20d1e0 100644 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index d7b6cae424622d259f97a3d5fa9093c0fb0bd5ce..300bf001b59ca7fa197c580b10adb7f70f20d1e0 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -1840,6 +1840,36 @@ (define_insn "*aarch64_shrn2_vect" [(set_attr "type" "neon_shift_imm_narrow_q")] ) +(define_insn "*aarch64_topbits_shuffle" + [(set (match_operand: 0 "register_operand" "=w") + (vec_concat: + (truncate: + (SHIFTRT:VQN (match_operand:VQN 1 "register_operand" "w") + (match_operand:VQN 2 "aarch64_simd_shift_imm_vec_exact_top"))) + (truncate: + (SHIFTRT:VQN (match_operand:VQN 3 "register_operand" "w") + (match_dup 2)))))] + "TARGET_SIMD" + "uzp2\\t%0., %1., %3." + [(set_attr "type" "neon_permute")] +) + +(define_insn "*aarch64_topbits_shuffle" + [(set (match_operand: 0 "register_operand" "=w") + (vec_concat: + (unspec: [ + (match_operand:VQN 1 "register_operand" "w") + (match_operand:VQN 2 "aarch64_simd_shift_imm_vec_exact_top") + ] UNSPEC_RSHRN) + (unspec: [ + (match_operand:VQN 3 "register_operand" "w") + (match_dup 2) + ] UNSPEC_RSHRN)))] + "TARGET_SIMD" + "uzp2\\t%0., %1., %3." + [(set_attr "type" "neon_permute")] +) + (define_expand "aarch64_shrn" [(set (match_operand: 0 "register_operand") (truncate: diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md index 49f02ae0381359174fed80c2a2264295c75bc189..7fd4f9e7d06d3082d6f3047290f0446789e1d0d2 100644 --- a/gcc/config/aarch64/predicates.md +++ b/gcc/config/aarch64/predicates.md @@ -545,6 +545,12 @@ (define_predicate "aarch64_simd_shift_imm_offset_di" (and (match_code "const_int") (match_test "IN_RANGE (INTVAL (op), 1, 64)"))) +(define_predicate "aarch64_simd_shift_imm_vec_exact_top" + (and (match_code "const_vector") + (match_test "aarch64_const_vec_all_same_in_range_p (op, + GET_MODE_UNIT_BITSIZE (GET_MODE (op)) / 2, + GET_MODE_UNIT_BITSIZE (GET_MODE (op)) / 2)"))) + (define_predicate "aarch64_simd_shift_imm_vec_qi" (and (match_code "const_vector") (match_test "aarch64_const_vec_all_same_in_range_p (op, 1, 8)"))) diff --git a/gcc/testsuite/gcc.target/aarch64/shrn-combine-2.c b/gcc/testsuite/gcc.target/aarch64/shrn-combine-2.c new file mode 100644 index 0000000000000000000000000000000000000000..924b3b849e449082b8c0b7dc6b955a2bad8d0911 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shrn-combine-2.c @@ -0,0 +1,15 @@ +/* { 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]) >> 16; +} + +/* { dg-final { scan-assembler-times {\tuzp2\t} 1 } } */ +/* { dg-final { scan-assembler-not {\tshrn\t} } } */ +/* { dg-final { scan-assembler-not {\tshrn2\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/shrn-combine-3.c b/gcc/testsuite/gcc.target/aarch64/shrn-combine-3.c new file mode 100644 index 0000000000000000000000000000000000000000..929a55c5c338844e6a5c5ad249af482286ab9c61 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shrn-combine-3.c @@ -0,0 +1,14 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 --save-temps --param=vect-epilogues-nomask=0" } */ + + +#include + +uint16x8_t foo (uint32x4_t a, uint32x4_t b) +{ + return vrshrn_high_n_u32 (vrshrn_n_u32 (a, 16), b, 16); +} + +/* { dg-final { scan-assembler-times {\tuzp2\t} 1 } } */ +/* { dg-final { scan-assembler-not {\tshrn\t} } } */ +/* { dg-final { scan-assembler-not {\tshrn2\t} } } */ From patchwork Wed Sep 29 16:20:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1534462 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=KxJfWcjO; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKMBZ3Vbjz9sPT for ; Thu, 30 Sep 2021 02:23:50 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 323E6385803C for ; Wed, 29 Sep 2021 16:23:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 323E6385803C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932627; bh=3GZPMRa5Z5sRUQKhiuQjrG9ROvqSL+OotmnoqSacgCE=; 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=KxJfWcjOIQwy9AFup5fEAq9ETzy9kv4kQ1yqxOC9QMG2appx0/S6lrNt9iC5BJ5TI gDqjxW7wTekW6U7FfHebtAOL79jB4F5xMX2tGb1GPpB3ZcTUxFCUY3oruHmX1IThQM Vg3LQAk4NAJoW2KLpl1uMZCQ8FFgHDteYrBoCRgY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40041.outbound.protection.outlook.com [40.107.4.41]) by sourceware.org (Postfix) with ESMTPS id 095FB3858406 for ; Wed, 29 Sep 2021 16:20:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 095FB3858406 Received: from AM4PR05CA0011.eurprd05.prod.outlook.com (2603:10a6:205::24) by AM6PR08MB4311.eurprd08.prod.outlook.com (2603:10a6:20b:b4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.18; Wed, 29 Sep 2021 16:20:20 +0000 Received: from AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com (2603:10a6:205:0:cafe::34) by AM4PR05CA0011.outlook.office365.com (2603:10a6:205::24) 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:20:20 +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 AM5EUR03FT023.mail.protection.outlook.com (10.152.16.169) 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:20:20 +0000 Received: ("Tessian outbound ac52c8afb262:v103"); Wed, 29 Sep 2021 16:20:20 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: cec3cc4d40e2053e X-CR-MTA-TID: 64aa7808 Received: from 661a67355e49.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C5CA813C-3F11-4785-B1DA-258DC9234266.1; Wed, 29 Sep 2021 16:20:08 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 661a67355e49.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:20:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TbsJSMq22vmL/saRzfHj3gW0ooH4P5Ogxs1+zWTI37xUVDgGqXpzao2B0JCjP3flklhyJi2TVocSLjs2scjJ9v+h0QhBp6595ST8SEcyOhnh9UnCKP5q4RHCok67Jwa3omTGNqsATuD7m/S7Nq0o/oggZY91QnEbSAMidQylwqXoTAbBQumoWmA7jbTCZ2vlwCkCPXYH5ncbSkqi/ftYaD9XGItm1pJAPth/qpQEzJwrvFgcNbf0PUCVCLTl1g9cIcgKRlb5zE4d62Zf+NKwBWJEDs9tpnRmOYxXNfPOGTo+myoTPdfBWt9uQJoZu6VIbZfOtsHdP+3Mq/a6EuECHQ== 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=3GZPMRa5Z5sRUQKhiuQjrG9ROvqSL+OotmnoqSacgCE=; b=fUCeWh1AuyKjIjfz+HRNW9ydoYv72+9P3TwXZYrjcmUAJxQjcwvkCHBkudXUeeicKmisvBiVoLn89UFYBEchfnZhFsfpT+AeLetO9UB3ODuFjio3wF1h60Pode2d1KlUXS/i27+aOFt5mMzA1Gzohs9AjJKJLBotiygm6oO3NJNpd3dWSkWQoOYXa/kDKcV/f2f7TIQ+yD4R4pQcjWc65Ydfzd5DTXJHZS4Gj3CKkMz+haE6rDuKxzzIl/D6uLqSsF8Jpcg4joRz9yjgFLYpBlsemVtSo/brGBXIcsVhN4KXEw8ikdKqw4atS5sXHT/kEd2Nd5BVRw6A81inbL96WQ== 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 VI1PR0801MB1728.eurprd08.prod.outlook.com (2603:10a6:800:54::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.20; Wed, 29 Sep 2021 16:20:05 +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:20:05 +0000 Date: Wed, 29 Sep 2021 17:20:02 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 3/7]AArch64 Add pattern for sshr to cmlt Message-ID: <20210929162001.GA31867@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: LO2P265CA0387.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:f::15) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by LO2P265CA0387.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:f::15) 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:20:04 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a47fec62-7c62-42bc-7b0a-08d98365085d X-MS-TrafficTypeDiagnostic: VI1PR0801MB1728:|AM6PR08MB4311: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:6108;OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: WAxX8B8OR5+jErmV06zmyqRYwLpRBJAy8f8IvcOACXznHefDK6BD1BAtaE2xEUAnL44xrEArWGorv293Ss7YpvDUXdV8P0kMbQI+2N2BpoAlLfMEfe3sqVK31hGOMixCllYRJvH7IchAHQUjq3cEMe31JeABg3uMA7v/vVp1EOtxDAaHBt56k7zx/LxQQup9wztDZL/60A32mkxyaHN1d0Leo9odFi6v7nzmtEbSuLcTbh0b0YkrINA0uo/4SBZwWxWGFpunPzR3zmKZ/hFl2XvunTwEumkG7D1PPjmTSN3i4HLUa3GzjW9f7jUuG2+KDozxHXj4fKGC0vHdIDyxJo3d+9IgT61F0A27wA+hgmx223GEwVV6orj/fe3gaINvc1ZRUQGvshrhDM5cgQ2xcp6tBC9jyUToEq+zrPOby6HeoUckHuH57S88JH4WS464zZWrHt6uFu5Gk1UFokZOsRuT1DkltVZVcwTEAVqj3LJKsLhFNs1FS24t8HqGnFmn+W3I4QR8j4dbz77mrmHOrosf75Kxu/FMYDuXkko3Qxfu/EpbJxiVnUgCvyDbaB5DYNHDXPCv8IGUJx5J+Lr8xC/PqdQWC15rbbM/UKrHUVid7CsvgGA6+YI7UJeYA0xu+p/uMsNWDS5Se09ZcHIY5+ZUdDi0ABn+QhHwjbGefnX0UvTkYCgxHBhEA25x0yuvCQtIsbWL4gBDRcYMTnCSIEQF0blicMv79Ws7m0IGPAUWiYYzZqy4whJKX1S0JzwWDBCqsge+T3KwdnrpPr5xjWpxRBk/TFf8hQDCbPXWnnglf/DQ9rgWgU9iD84vdHFL 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)(44144004)(7696005)(1076003)(36756003)(316002)(66946007)(33656002)(186003)(26005)(66556008)(52116002)(8676002)(5660300002)(33964004)(38100700002)(38350700002)(508600001)(66616009)(8886007)(8936002)(66476007)(6916009)(55016002)(235185007)(2616005)(4743002)(44832011)(4326008)(2906002)(86362001)(956004)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1728 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: AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: a602b144-f79a-4d55-485d-08d98364ff33 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SyaZCfhJvnnUhq/K0YCcWhpjosElZs66hakp1S7v0+Z4yXTwZbPmDUN2twPLO9Btw4Y0ttmU+LLFfxKZMPTUdCUcdVHQLuHT8IHbS4eft0x5R0ZXevuW5Pgks14JeeTgIYp7CjfrPRMWbhJzGvpsHkDOGJXdEwhCHbtJnD81nuyQ1/IxR2MLZRtTcM6eAJ3xblK4EWRQJeXApoCm/qmjI1/futMDNStbLX28HNKY5rAoK4ogenWfhrviZDeagfpUNkb3hwVkE4W9gIBVXk8LzYzl/3gzQ7qjSR6u5MmqTOIFq7WSNn0A+YrPC1L/Y+EGvkOBamJ32HQKyG7MiF1RzeMOO2tyquojx4TJggXSBMBuEfzl5IKEv/ociaSmB8wwdAkmkX/fqB8QwFyxUnh7NRk/HgThymttVCCoJZ284KiIMO7NYp0BmiRSiyx60gO9yaB92Z4tXXs9J9pHpbNaK9gR766G9f0tepRK/wSwaIQVE07akGfv58lU8WSoZz+Z3UHI4MtZq857Y45L07r/4TxCaRN+qAPq3EG4saEVuJwAPdGDN7Nu6SN5eMIx17xtHQt4M4FdKRDr85OwfS4djjjBOTVU+BNXqmd4MssZBLpVh66sxu5tpb1T4h2X/RGOBBGF0ffhtLwWBNT9mVUiSBNQhwK0gYJkpT+vlu/TtYFZx2tm5b7T086OS5d/O7SqIMl7Z92sjc6oiUU3lN0WWS0ZqFyjGTKBTYdn6TEL1qWuqPwDJe1BOXNIdQWmitPnhImSQ96EJBjpchfrbU4TlvF1h5CetoxEQmhrUHQwgoQjrDTgCh/sFw5JQZrnBouO 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)(8676002)(4326008)(508600001)(55016002)(6916009)(81166007)(82310400003)(4743002)(44832011)(956004)(8936002)(33964004)(8886007)(1076003)(2616005)(186003)(33656002)(235185007)(44144004)(26005)(66616009)(36860700001)(356005)(70586007)(70206006)(7696005)(36756003)(336012)(86362001)(5660300002)(316002)(2906002)(47076005)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:20:20.2966 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a47fec62-7c62-42bc-7b0a-08d98365085d 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: AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4311 X-Spam-Status: No, score=-11.6 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This optimizes signed right shift by BITSIZE-1 into a cmlt operation which is more optimal because generally compares have a higher throughput than shifts. On AArch64 the result of the shift would have been either -1 or 0 which is the results of the compare. i.e. void e (int * restrict a, int *b, int n) { for (int i = 0; i < n; i++) b[i] = a[i] >> 31; } now generates: .L4: ldr q0, [x0, x3] cmlt v0.4s, v0.4s, #0 str q0, [x1, x3] add x3, x3, 16 cmp x4, x3 bne .L4 instead of: .L4: ldr q0, [x0, x3] sshr v0.4s, v0.4s, 31 str q0, [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_simd_ashr): Add case cmp case. * config/aarch64/constraints.md (D1): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/shl-combine-2.c: New test. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 300bf001b59ca7fa197c580b10adb7f70f20d1e0..19b2d0ad4dab4d5742698297ded861228ee22007 100644 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 300bf001b59ca7fa197c580b10adb7f70f20d1e0..19b2d0ad4dab4d5742698297ded861228ee22007 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -1127,12 +1127,14 @@ (define_insn "aarch64_simd_lshr" ) (define_insn "aarch64_simd_ashr" - [(set (match_operand:VDQ_I 0 "register_operand" "=w") - (ashiftrt:VDQ_I (match_operand:VDQ_I 1 "register_operand" "w") - (match_operand:VDQ_I 2 "aarch64_simd_rshift_imm" "Dr")))] + [(set (match_operand:VDQ_I 0 "register_operand" "=w,w") + (ashiftrt:VDQ_I (match_operand:VDQ_I 1 "register_operand" "w,w") + (match_operand:VDQ_I 2 "aarch64_simd_rshift_imm" "D1,Dr")))] "TARGET_SIMD" - "sshr\t%0., %1., %2" - [(set_attr "type" "neon_shift_imm")] + "@ + cmlt\t%0., %1., #0 + sshr\t%0., %1., %2" + [(set_attr "type" "neon_compare,neon_shift_imm")] ) (define_insn "*aarch64_simd_sra" diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md index 3b49b452119c49320020fa9183314d9a25b92491..18630815ffc13f2168300a899db69fd428dfb0d6 100644 --- a/gcc/config/aarch64/constraints.md +++ b/gcc/config/aarch64/constraints.md @@ -437,6 +437,14 @@ (define_constraint "Dl" (match_test "aarch64_simd_shift_imm_p (op, GET_MODE (op), true)"))) +(define_constraint "D1" + "@internal + A constraint that matches vector of immediates that is bits(mode)-1." + (and (match_code "const,const_vector") + (match_test "aarch64_const_vec_all_same_in_range_p (op, + GET_MODE_UNIT_BITSIZE (mode) - 1, + GET_MODE_UNIT_BITSIZE (mode) - 1)"))) + (define_constraint "Dr" "@internal A constraint that matches vector of immediates for right shifts." diff --git a/gcc/testsuite/gcc.target/aarch64/shl-combine-2.c b/gcc/testsuite/gcc.target/aarch64/shl-combine-2.c new file mode 100644 index 0000000000000000000000000000000000000000..bdfe35d09ffccc7928947c9e57f1034f7ca2c798 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shl-combine-2.c @@ -0,0 +1,12 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 --save-temps --param=vect-epilogues-nomask=0" } */ + +void e (int * restrict a, int *b, int n) +{ + for (int i = 0; i < n; i++) + b[i] = a[i] >> 31; +} + +/* { dg-final { scan-assembler-times {\tcmlt\t} 1 } } */ +/* { dg-final { scan-assembler-not {\tsshr\t} } } */ + From patchwork Wed Sep 29 16:20:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1534463 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=gAGuw/zi; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKMCh4PCZz9sPT for ; Thu, 30 Sep 2021 02:24:48 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5FE073858001 for ; Wed, 29 Sep 2021 16:24:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5FE073858001 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932686; bh=zVGYh3/jTiKzrYE0cJZVArZD/IWtxT/GjJa8uXVec2I=; 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=gAGuw/zidOiQcd4oPva5Pnvdb4Tk2RWLCdT3fcVY6Mi/F+51ogtS081r+Am8hcCnS r+IKMMkcg1ZI86XOxAEtBRARNRUOL30Po6F+0BKIoK58a1p0atoSrxjoNBKeHFbphC Mu6xcs4QHLgf91vJEybwCAxEV6uaaApuygRgRlXQ= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40066.outbound.protection.outlook.com [40.107.4.66]) by sourceware.org (Postfix) with ESMTPS id DBB0B385803C for ; Wed, 29 Sep 2021 16:20:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DBB0B385803C Received: from AM5PR1001CA0032.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::45) by PAXPR08MB6432.eurprd08.prod.outlook.com (2603:10a6:102:154::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.16; Wed, 29 Sep 2021 16:20:51 +0000 Received: from VE1EUR03FT032.eop-EUR03.prod.protection.outlook.com (2603:10a6:206:2:cafe::3d) by AM5PR1001CA0032.outlook.office365.com (2603:10a6:206:2::45) 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:20:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (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=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT032.mail.protection.outlook.com (10.152.18.121) 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:20:51 +0000 Received: ("Tessian outbound a492f2284909:v103"); Wed, 29 Sep 2021 16:20:51 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 955c5197002cc50b X-CR-MTA-TID: 64aa7808 Received: from b4fd40df80de.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id A121A1A7-8B60-477E-8A71-840D1FDFA6FF.1; Wed, 29 Sep 2021 16:20:38 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b4fd40df80de.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:20:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SJXm8HsT71CkN3vI2MdczigpyL/B8GywLJ/5W0/eJA/l4g2tyhMgkJdN6pG5rizpQB8/YNX1ejhWwikw4JT76dIJui5fPCBfz2St8GlPfytokheqjyCfGE2FgGmY5srMTc7DBF2w6lwXHGn8uo3EooBgZOfrFfGx7brk849vxfburXJEovSgiwirdJDfwrXIfafCSwgz5Jb9fWL7qroc/dQpo+339Mz2pxZJGyRcH3G+6ThgJxZ5IkXi4iPvwdjpPM8k6m3ROMjIHdYEh9V1WCXjlTItLZI1abKaRhVuhyMsk+3vBuzFvH+LoxUoocXEbJW31hRRP25QThfPuo7dZw== 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=zVGYh3/jTiKzrYE0cJZVArZD/IWtxT/GjJa8uXVec2I=; b=aStZDo11pd3e5Sam4mQpQQyIYhUMEK5vAAdD9yM3QP0MA0XQVPFztHyE95sMg0z1UuBdfLW6Yd6tEwQ220UKtxkUjc2eUfYn4ss6lsBrpdLmM7QzFpk6Bj/KGUFLbCETGFcWJ50WSwiNUNFir8ygEXHAoBukWq+vN1RZmL9uC1uAWvb6Ok5YQDshXUz3G27yx2lx72+e4AsXLMLHyBrLPfDtFefxbOwgp9r6jEKNzKrUA+BWxnzwzKusrGbMVseKk9HxYsFaCm5k/AeT5Y3O4nVw/YLN1nwwcv9g482pl0NQ1earEZgIBAKcbDNpGxUSPWxcEEpjjZg57rRlhr0Y4w== 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 VI1PR0801MB1728.eurprd08.prod.outlook.com (2603:10a6:800:54::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.20; Wed, 29 Sep 2021 16:20:35 +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:20:35 +0000 Date: Wed, 29 Sep 2021 17:20:27 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 4/7]AArch64 Add pattern xtn+xtn2 to uzp2 Message-ID: <20210929162024.GA1924@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: SA0PR11CA0112.namprd11.prod.outlook.com (2603:10b6:806:d1::27) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by SA0PR11CA0112.namprd11.prod.outlook.com (2603:10b6:806:d1::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13 via Frontend Transport; Wed, 29 Sep 2021 16:20:33 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b927e56f-812c-41dd-875e-08d983651ada X-MS-TrafficTypeDiagnostic: VI1PR0801MB1728:|PAXPR08MB6432: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:7691;OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: ZnE+SlrXhBKrcSFNCl8bNAnGMJgFVjRYGn9g62OI7iF8IQ/3bZamA00DykW/vIx30tJnkgzSdjFXA/tqNLZyEmCU2BQREcKJye/oaXFr2aP/Jv7bk/IMiD1yECJfgOAi23Eu5mfxegpJWAd5HInpbeVK97XAvILvXLj9abcfQFLWDQs6QvrV0nEMxV/Zl6Sk6Qh/ZxNdG9tx1aXp7HnGOOa9c3EzJX1JgDuFSwMYKg2Ra1x+FAib0/y5swlieyQFu/M/lfLfNm7lHjJhQrIC7AurOsze0YdbaFyq+n2YisXlnuWsKiHCrpSHM99Z040gll4KAfn8LNln6dSSCk/h5lFYwE9SzanKViO61sxNkEa5cVnvn8HH5gX+tOfWFIUlhoOBRDLAcPCffH4blLPRpMib5yvD9efKBDW3ZMBWX7xDxpfjsfeiC0pikTOGNhxcVzNgEXf8YI4XXk8rHeWEaQ17dpHc9xT4ix573Ho9och7hdqGVpXeoQm3GtfZOMlwBURdbmru9AYcMUKsL36cPgrBkneYv8oZZcah6eKe0izZHQHO89tcY/N0YDUALik5NVeKaS31FHzpbvvmWD/9RDUy/2VQbGHazo4DKZx3+TlohwXX5FruG3URpyqn7+A2I2U/szvLUe5K5MEaZ0Cn0Hn0rENPALZauRxRIUbvDI1/e3Dva88Pv2vxS/cKT66Rv9vcSkXo8b06G6iAVv0hGa7yskWOsRjOfMDrdOrQVL8uqnuiVgV6fOx1SEpFUgAhcHaoBpwy2ubUkW952x7YsxvlNrHlrLMn0vrAn05w963eNa/IlrSHuS2+Xsf865pMMdZ+wfP7UzOMBbl4Tf6Wd8twRExMlyojFvyk/YL7ra8= 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)(44144004)(7696005)(1076003)(36756003)(316002)(66946007)(33656002)(186003)(26005)(66556008)(6666004)(52116002)(8676002)(5660300002)(33964004)(38100700002)(38350700002)(508600001)(66616009)(8886007)(8936002)(83380400001)(66476007)(6916009)(55016002)(235185007)(2616005)(4743002)(44832011)(4326008)(2906002)(86362001)(956004)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1728 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: VE1EUR03FT032.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 86cc4b79-747d-47c1-4fd8-08d983651167 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gP0AaDiEp2OvTWyYg0FxYwhUBor7unCb7eQowJHrQ5nWq/xkPsijdZElrwjigeM5HQPwwiHmvWE1tWKXbc/7cRV5ssxYTUU835VahD/5Y0q+Pu14R1j4TBPViRrvl38+Q8AzDg6uSooyhYErL2Qmd/zV7mK2aXmh5X761p3wlWeL30SqwGXxtCs6CNYCzKU751zkZ1X4ZmKAbnO6QWIyqaK4UJGZBVnucUCFBuHgRgGzlVXXC8GYjgOibj0QadkENgooI3Hdcb5JotTdCAlKtnuwFijVmAExNw0ccd4vpKWqnQqVJqmszlLK38Bu+aJGxaLTMkYAgVBEPQF0KzfMhbZOmKKa69bprK1KBcUNAsqyQBKvjS2imTazgJ+Aa50tGp6WlAixik/G9lJqjz8WmzjjlMeQeYFmk0byTFzKMa6cFtfsZiQZA/2LvfOKSTS2P37nQKz5Iq4t3tVjC81phgk2qakspICbuaNvdu8LBPpgn4E40UZB0bDlh1ITBjjiDcIwxNMmXJd/S+l84ZdPwuAsjFAnzqQR6n3IUtg0X0cNpBgYdwGnHunYS0XhuLDVswysoLpQz9JHOiVAp/UZ5FPYo/lcSqpEkVuC2jKy2UCCUKex63oiVptniRsftwVV0p3fpAqw+tK6d/3m9pnIjYhLv2rIZTzFhcn7J3tK3MFdHKkcvFC13eSIP+VIVwtJicwdnEYJjAtgcVREqhDI+oNtLtm8yIFIAnS88U2tpr1n6BIdEJ6WlGBwv4UQy/qFutJVTYMG1TsbXfWd4ujo2xXaIsynTwEuT2uAU0z+/u8V3rkf+sbu53pP0iRk3NmhjLDc3WbXah4g+bjmAOWL4Y1AZfzpMx0dUgnO80bY0y4= X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(55016002)(6666004)(7696005)(186003)(81166007)(33656002)(36756003)(8886007)(4326008)(86362001)(8676002)(8936002)(356005)(66616009)(70206006)(316002)(70586007)(26005)(6916009)(2906002)(5660300002)(956004)(336012)(44832011)(36860700001)(508600001)(2616005)(235185007)(47076005)(44144004)(33964004)(1076003)(82310400003)(4743002)(83380400001)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:20:51.3751 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b927e56f-812c-41dd-875e-08d983651ada X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT032.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6432 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_LOTSOFHASH, KAM_NUMSUBJECT, 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This turns truncate operations with a hi/lo pair into a single permute of half the bit size of the input and just ignoring the top bits (which are truncated out). i.e. void d2 (short * restrict a, int *b, int n) { for (int i = 0; i < n; i++) a[i] = b[i]; } now generates: .L4: ldp q0, q1, [x3] add x3, x3, 32 uzp1 v0.8h, v0.8h, v1.8h str q0, [x5], 16 cmp x4, x3 bne .L4 instead of .L4: ldp q0, q1, [x3] add x3, x3, 32 xtn v0.4h, v0.4s xtn2 v0.8h, v1.4s str q0, [x5], 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_narrow_trunc): New. * config/aarch64/iterators.md (VNARROWSIMD, Vnarrowsimd): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/xtn-combine-1.c: New test. * gcc.target/aarch64/narrow_high_combine.c: Update case. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 36396ef236e8c476d5e2f1acee80dc54ec5ebe4e..33e3301d229366022a5b9481b6c3ae8f8d93f9e2 100644 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 36396ef236e8c476d5e2f1acee80dc54ec5ebe4e..33e3301d229366022a5b9481b6c3ae8f8d93f9e2 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -1753,6 +1753,18 @@ (define_expand "aarch64_xtn2" } ) +(define_insn "*aarch64_narrow_trunc" + [(set (match_operand: 0 "register_operand" "=w") + (vec_concat: + (truncate: + (match_operand:VQN 1 "register_operand" "w")) + (truncate: + (match_operand:VQN 2 "register_operand" "w"))))] + "TARGET_SIMD" + "uzp1\\t%0., %1., %2." + [(set_attr "type" "neon_permute")] +) + ;; Packing doubles. (define_expand "vec_pack_trunc_" diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 8dbeed3b0d4a44cdc17dd333ed397b39a33f386a..95b385c0c9405fe95fcd07262a9471ab13d5488e 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -270,6 +270,14 @@ (define_mode_iterator VDQHS [V4HI V8HI V2SI V4SI]) ;; Advanced SIMD modes for H, S and D types. (define_mode_iterator VDQHSD [V4HI V8HI V2SI V4SI V2DI]) +;; Modes for which we can narrow the element and increase the lane counts +;; to preserve the same register size. +(define_mode_attr VNARROWSIMD [(V4HI "V8QI") (V8HI "V16QI") (V4SI "V8HI") + (V2SI "V4HI") (V2DI "V4SI")]) + +(define_mode_attr Vnarrowsimd [(V4HI "v8qi") (V8HI "v16qi") (V4SI "v8hi") + (V2SI "v4hi") (V2DI "v4si")]) + ;; Advanced SIMD and scalar integer modes for H and S. (define_mode_iterator VSDQ_HSI [V4HI V8HI V2SI V4SI HI SI]) diff --git a/gcc/testsuite/gcc.target/aarch64/narrow_high_combine.c b/gcc/testsuite/gcc.target/aarch64/narrow_high_combine.c index 50ecab002a3552d37a5cc0d8921f42f6c3dba195..fa61196d3644caa48b12151e12b15dfeab8c7e71 100644 --- a/gcc/testsuite/gcc.target/aarch64/narrow_high_combine.c +++ b/gcc/testsuite/gcc.target/aarch64/narrow_high_combine.c @@ -225,7 +225,8 @@ TEST_2_UNARY (vqmovun, uint32x4_t, int64x2_t, s64, u32) /* { dg-final { scan-assembler-times "\\tuqshrn2\\tv" 6} } */ /* { dg-final { scan-assembler-times "\\tsqrshrn2\\tv" 6} } */ /* { dg-final { scan-assembler-times "\\tuqrshrn2\\tv" 6} } */ -/* { dg-final { scan-assembler-times "\\txtn2\\tv" 12} } */ +/* { dg-final { scan-assembler-times "\\txtn2\\tv" 6} } */ +/* { dg-final { scan-assembler-times "\\tuzp1\\tv" 6} } */ /* { dg-final { scan-assembler-times "\\tuqxtn2\\tv" 6} } */ /* { dg-final { scan-assembler-times "\\tsqxtn2\\tv" 6} } */ /* { dg-final { scan-assembler-times "\\tsqxtun2\\tv" 6} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/xtn-combine-1.c b/gcc/testsuite/gcc.target/aarch64/xtn-combine-1.c new file mode 100644 index 0000000000000000000000000000000000000000..ed655cc970a602da4ace78dc8dbd64ab18b0d4ab --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/xtn-combine-1.c @@ -0,0 +1,12 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 --save-temps --param=vect-epilogues-nomask=0" } */ + +void d2 (short * restrict a, int *b, int n) +{ + for (int i = 0; i < n; i++) + a[i] = b[i]; +} + +/* { dg-final { scan-assembler-times {\tuzp1\t} 1 } } */ +/* { dg-final { scan-assembler-not {\txtn\t} } } */ +/* { dg-final { scan-assembler-not {\txtn2\t} } } */ From patchwork Wed Sep 29 16:21:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1534464 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=RoJCY151; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKMF11lGkz9sPT for ; Thu, 30 Sep 2021 02:25:55 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 57BCB385803C for ; Wed, 29 Sep 2021 16:25:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 57BCB385803C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932753; bh=HSq+kLIHiRr62ZBr4AB1185bAEm6iGPadKR/NcuDI7Y=; 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=RoJCY151JBm6MJ+6m6unsauclx9xq96ZbmZ0ca8T4LFSkF5B/k4czITZ48TWLy+CR 55ee2w4ktpxaRZUaIzVyUjPrQQwBcNCoMUkAIfAhg1eBAzceIwwBrbpBPORPfzoJVs 5kR5VnMHqdKUJzMKfrHH3rwBx0W1rh0CpvwJgWKM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20054.outbound.protection.outlook.com [40.107.2.54]) by sourceware.org (Postfix) with ESMTPS id AFC923858036 for ; Wed, 29 Sep 2021 16:21:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AFC923858036 Received: from DB8P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:130::12) by PR3PR08MB5596.eurprd08.prod.outlook.com (2603:10a6:102:88::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.15; Wed, 29 Sep 2021 16:21:31 +0000 Received: from DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:130:cafe::6) by DB8P191CA0002.outlook.office365.com (2603:10a6:10:130::12) 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:21:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (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=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT044.mail.protection.outlook.com (10.152.21.167) 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:21:31 +0000 Received: ("Tessian outbound ab2dc3678fa9:v103"); Wed, 29 Sep 2021 16:21:31 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 8c10d9dc10b14617 X-CR-MTA-TID: 64aa7808 Received: from f9d19cf25aff.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 443CD751-E108-4730-966D-C56F47C6DAC9.1; Wed, 29 Sep 2021 16:21:18 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f9d19cf25aff.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:21:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IMNZN7xDzcU0auEsLyWZHzgBGTNh+cccvHowXsftIpH+emrq47hxTa7GQvOXLgN+48qnZQgeub9MtuB3jDYELYrrzjzrColKf2HR3B9FVhKjeqvGz/tplxMSHRGMxpqCMTbmPUtg7dyn+JkAfqR5/6mh6wpIonQH+gzEyitjH1nLzXahVfmqpQsLMq9n0ULWXBRzHhl6Hir6qbQNT3K9Dq+VyiCynQiravPHrd5fnbz2TJ/RlT6/ZF2H+DSpqIHXOGN5xywiqsbfc3k4QUmK6Am81GqQCKiA/SLL5lTiS4jdN8BbWky+f8BwNHCn9ldY/4CtrYDyFUz8N1Qgfouhtw== 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=HSq+kLIHiRr62ZBr4AB1185bAEm6iGPadKR/NcuDI7Y=; b=R1YBVt2eFShXxBo/4bVtLOPS/aB7fzXUs0688Lr6qU61PuKg0WeQh5eYJ4lmqKoFVvIcUuS5oFRI/yzDTKJSDMzJisufrp7vM3cX3IZtBhyWtD/uZWEVnBHMP8Z+oK07EhWU0N4kxzkIJbYFKGkK/KTHmZ6ZbpCyeYxDtjWhMDA2PJoLQwsP5/mtNyIaSVONUIxvBbFijlKWuaODQ2aeo3itN+INePdFXhnOH8yGgiGULM2OgLPaIK5tm2QbWu/c+4aroeKshhbZn7IooqwzH9gi4d3NC7oYNkbBawl0QuovLwa0+WTGP6XJ+GFZxlya7saly6XaRAO/WR/ZTQMFYg== 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 VI1PR08MB3437.eurprd08.prod.outlook.com (2603:10a6:803:7e::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13; Wed, 29 Sep 2021 16:21:15 +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:21:15 +0000 Date: Wed, 29 Sep 2021 17:21:08 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 5/7]middle-end Convert bitclear + cmp #0 into cm Message-ID: <20210929162106.GA5336@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: SA0PR12CA0022.namprd12.prod.outlook.com (2603:10b6:806:6f::27) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by SA0PR12CA0022.namprd12.prod.outlook.com (2603:10b6:806:6f::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13 via Frontend Transport; Wed, 29 Sep 2021 16:21:14 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a1ed8892-ca36-47c4-132b-08d98365329c X-MS-TrafficTypeDiagnostic: VI1PR08MB3437:|PR3PR08MB5596: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:3631;OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: CXgqlbCndEkrJgr+lLyHdpm/pRTKlSYsUpEfdc+IX1s5qTOH/RGkEVC5Cg5aNtK/9wQs5L91MDDtELjTdqOeNPLIH9sMSAdzmS5VezN93IAkyB4V3fhlhfa47gB0EIO6wT0ZDwnhM8+RaZRPPAz2/8q1gdaoFGkIFTt+713AwfBp5JPY5JSquIWpBOPIZ90nZ3IvzXL4kVU/OuWmmUYvFH70umpdy9v7Z27BhOChV1gX9yT6wOzRh88x5QRhNG1x+vQV3M4upsT3MteKQNgbt5o0Q6nnMw4lVqF6yuSzyNV8fTTojAbYj+TA6cx6N59wtaCMtqmN5nfU479WGY5ifJkTCj6OS4a6vPmc4nXDCyoPiREJoCJ0UyoxgqtOU+b6zMGm4dZCfluAK+6vPA0TrkneEjPcm5hYQw/q2ykTVcAb8ZFce//ZOP6VLqSWH/UF2dQOFTWny1wm6rByg0H2+sCFKCnMnuIOyRMTq9faI6DkysLWRQ1YXBi+VNgCrTwqE/BcaDVw2o34AXiP15S3cTuPsCaHZiZGvdzaPcWcpmIll9rS41QkQvl9bSsMW4e2VdHf5i+KlewpUOPAspQCpi+PMJFNsveqGuh99hgOftnobGZ7nRdZFGbmdZbXycD00ghyK1opD+MY+udrelQMP7zkvK2PDlK12zYNxJySOUpJKgwH40uJkmwQXYPEUgAXNKGqympZBb+xVOugtf5S21sv16UOQ7gMsGXtN1IYJxTveib6OwI4CzgIJXIC8l6a5PH3GMp+I+qNvZVOyg87L7g0MuNcN+UtU70wpTbez+gRIiWBqSyX+haubewnsuQJ9c059WS4ODo8BvkZwwnXvgp250HNZ97g9zMh7GS3Qgg= 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)(8936002)(6666004)(8886007)(8676002)(36756003)(86362001)(2906002)(30864003)(4743002)(66556008)(66476007)(66616009)(55016002)(33656002)(316002)(38350700002)(38100700002)(1076003)(26005)(235185007)(5660300002)(33964004)(508600001)(52116002)(66946007)(44832011)(44144004)(7696005)(6916009)(956004)(2616005)(4326008)(186003)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-Forked: True X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3437 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: DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 20b0b3c6-3e47-4748-95bf-08d98365290e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: c4FbtUTWbYx0G1Imxnk63F9gcIJJAAP+NpZH4qdUXN6RCVuMbxnDZdZb1nOXmhHMFmcOo4IZM/R2/mdxRkbrvzNfCOfZalhGPUnbAaFAEUB1wnaK4QJ6v+uO11KKp4Yoxz9orkjoFSUrlyqno83TqYYqim3dm6PU4m9cbs1uF/cx203fqSHyTDHK1aPmweqqiA/Wy5AYUHE7kQtbbBcwUVYr34qSFa62p1+dwaDlQRsNR0IfjWR1d7PVfHJAgKQBqRatjSKN6UI7GYN/9ILjnSuj7kPSdNQ3JG5nsxkyI+4876SNYzjZ/FGyy2hdDyxI6q86Wk6+dSPuFLNHbMuKPLAUF3LHkfiYb5/wt3EqRqSl9wCHVKZ+Qz1JoSDC4HJuGhWNHFDajNteOd9sY1GmulIewowUk6/TbVPP+9aPqLU80EWUehiRrzkN5ba7PNjM7fTkjvWObPjiTqrZULsQfg/uHoDR2YVIQ92ufKwhqbz0OLHAI1OPy0gLxQElantnsh9L3JmWl8BL/WIOwOX6xvSMzFZ8WAyIke2+ak247D3YX8I2ap3rHzBNUh5VYWTHRh+5IFVx5Yo9OklTiB/S7fublfBr6n7YXaegd2ipQ1tD3UAmlaEWkoprCb6GV3UOskeVS3dPmNXs+afHZnuJRcXaLrTk/pqfF4AWrE/Aut3AR/IV++K2Ap4jxib7JdbYHwNBTUsci6QIcf65tE9gbpv70YsY97j/XMEsyQqkGXIRzpaNNxVi0JF3+IM3i5KEvT8G9OH+TqgaJUj9WD+cmVSD1Bv5FvV95x49z9m4GBK7Dy5o333hqNNn6sM74inxFq0CYEW0AEb5T8sViWm6JVDKUhbBiVgJRcZNTJ+0WD0= X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(8886007)(235185007)(107886003)(4743002)(33656002)(6666004)(82310400003)(36860700001)(66616009)(55016002)(70586007)(70206006)(86362001)(30864003)(7696005)(508600001)(2906002)(81166007)(186003)(336012)(316002)(44144004)(47076005)(33964004)(4326008)(356005)(5660300002)(2616005)(8676002)(956004)(26005)(36756003)(6916009)(44832011)(8936002)(1076003)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:21:31.3396 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a1ed8892-ca36-47c4-132b-08d98365329c X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5596 X-Spam-Status: No, score=-13.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: nd@arm.com, rguenther@suse.de Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This optimizes the case where a mask Y which fulfills ~Y + 1 == pow2 is used to clear a some bits and then compared against 0 into one without the masking and a compare against a different bit immediate. We can do this for all unsigned compares and for signed we can do it for comparisons of EQ and NE: (x & (~255)) == 0 becomes x <= 255. Which for leaves it to the target to optimally deal with the comparison. This transformation has to be done in the mid-end because in RTL you don't have the signs of the comparison operands and if the target needs an immediate this should be floated outside of the loop. The RTL loop invariant hoisting is done before split1. i.e. void fun1(int32_t *x, int n) { for (int i = 0; i < (n & -16); i++) x[i] = (x[i]&(~255)) == 0; } now generates: .L3: ldr q0, [x0] cmhs v0.4s, v2.4s, v0.4s and v0.16b, v1.16b, v0.16b str q0, [x0], 16 cmp x0, x1 bne .L3 and floats the immediate out of the loop. instead of: .L3: ldr q0, [x0] bic v0.4s, #255 cmeq v0.4s, v0.4s, #0 and v0.16b, v1.16b, v0.16b str q0, [x0], 16 cmp x0, x1 bne .L3 Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * match.pd: New bitmask compare pattern. gcc/testsuite/ChangeLog: * gcc.dg/bic-bitmask-10.c: New test. * gcc.dg/bic-bitmask-11.c: New test. * gcc.dg/bic-bitmask-12.c: New test. * gcc.dg/bic-bitmask-2.c: New test. * gcc.dg/bic-bitmask-3.c: New test. * gcc.dg/bic-bitmask-4.c: New test. * gcc.dg/bic-bitmask-5.c: New test. * gcc.dg/bic-bitmask-6.c: New test. * gcc.dg/bic-bitmask-7.c: New test. * gcc.dg/bic-bitmask-8.c: New test. * gcc.dg/bic-bitmask-9.c: New test. * gcc.dg/bic-bitmask.h: New test. * gcc.target/aarch64/bic-bitmask-1.c: New test. --- inline copy of patch -- diff --git a/gcc/match.pd b/gcc/match.pd index 0fcfd0ea62c043dc217d0d560ce5b7e569b70e7d..df9212cb27d172856b9d43b0875262f96e8993c4 100644 diff --git a/gcc/match.pd b/gcc/match.pd index 0fcfd0ea62c043dc217d0d560ce5b7e569b70e7d..df9212cb27d172856b9d43b0875262f96e8993c4 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -4288,6 +4288,56 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (ic == ncmp) (ncmp @0 @1)))))) +/* Transform comparisons of the form (X & Y) CMP 0 to X CMP2 Z + where ~Y + 1 == pow2 and Z = ~Y. */ +(for cmp (simple_comparison) + (simplify + (cmp (bit_and:c @0 VECTOR_CST@1) integer_zerop) + (if (VECTOR_INTEGER_TYPE_P (TREE_TYPE (@1)) + && uniform_vector_p (@1)) + (with { tree elt = vector_cst_elt (@1, 0); } + (switch + (if (TYPE_UNSIGNED (TREE_TYPE (@1)) && tree_fits_uhwi_p (elt)) + (with { unsigned HOST_WIDE_INT diff = tree_to_uhwi (elt); + tree tdiff = wide_int_to_tree (TREE_TYPE (elt), (~diff) + 1); + tree newval = wide_int_to_tree (TREE_TYPE (elt), ~diff); + tree newmask = build_uniform_cst (TREE_TYPE (@1), newval); } + (if (integer_pow2p (tdiff)) + (switch + /* ((mask & x) < 0) -> 0. */ + (if (cmp == LT_EXPR) + { build_zero_cst (TREE_TYPE (@1)); }) + /* ((mask & x) <= 0) -> x < mask. */ + (if (cmp == LE_EXPR) + (lt @0 { newmask; })) + /* ((mask & x) == 0) -> x < mask. */ + (if (cmp == EQ_EXPR) + (le @0 { newmask; })) + /* ((mask & x) != 0) -> x > mask. */ + (if (cmp == NE_EXPR) + (gt @0 { newmask; })) + /* ((mask & x) >= 0) -> x <= mask. */ + (if (cmp == GE_EXPR) + (le @0 { newmask; })) + /* ((mask & x) > 0) -> x < mask. */ + (if (cmp == GT_EXPR) + (lt @0 { newmask; })))))) + (if (!TYPE_UNSIGNED (TREE_TYPE (@1)) && tree_fits_shwi_p (elt)) + (with { unsigned HOST_WIDE_INT diff = tree_to_shwi (elt); + tree ustype = unsigned_type_for (TREE_TYPE (elt)); + tree uvtype = unsigned_type_for (TREE_TYPE (@1)); + tree tdiff = wide_int_to_tree (ustype, (~diff) + 1); + tree udiff = wide_int_to_tree (ustype, ~diff); + tree cst = build_uniform_cst (uvtype, udiff); } + (if (integer_pow2p (tdiff)) + (switch + /* ((mask & x) == 0) -> x < mask. */ + (if (cmp == EQ_EXPR) + (le (convert:uvtype @0) { cst; })) + /* ((mask & x) != 0) -> x > mask. */ + (if (cmp == NE_EXPR) + (gt (convert:uvtype @0) { cst; }))))))))))) + /* Transform comparisons of the form X - Y CMP 0 to X CMP Y. ??? The transformation is valid for the other operators if overflow is undefined for the type, but performing it here badly interacts diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-10.c b/gcc/testsuite/gcc.dg/bic-bitmask-10.c new file mode 100644 index 0000000000000000000000000000000000000000..76a22a2313137a2a75dd711c2c15c2d3a34e15aa --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-10.c @@ -0,0 +1,26 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(int32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(int32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +#define TYPE int32_t +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump {<=\s*.+\{ 255,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967290,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-11.c b/gcc/testsuite/gcc.dg/bic-bitmask-11.c new file mode 100644 index 0000000000000000000000000000000000000000..32553d7ba2f823f7a21237451990d0a216d2f912 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-11.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) != 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) != 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump {>\s*.+\{ 255,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967290,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-12.c b/gcc/testsuite/gcc.dg/bic-bitmask-12.c new file mode 100644 index 0000000000000000000000000000000000000000..e10cbf7fabe2dbf7ce436cdf37b0f8b207c58408 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-12.c @@ -0,0 +1,17 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 -fdump-tree-dce" } */ + +#include + +typedef unsigned int v4si __attribute__ ((vector_size (16))); + +__attribute__((noinline, noipa)) +void fun(v4si *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +/* { dg-final { scan-tree-dump {<=\s*.+\{ 255,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967290,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-2.c b/gcc/testsuite/gcc.dg/bic-bitmask-2.c new file mode 100644 index 0000000000000000000000000000000000000000..da30fad89f6c8239baa4395b3ffaec0be577e13f --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-2.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {<=\s*.+\{ 255,.+\}} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-3.c b/gcc/testsuite/gcc.dg/bic-bitmask-3.c new file mode 100644 index 0000000000000000000000000000000000000000..da30fad89f6c8239baa4395b3ffaec0be577e13f --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-3.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) == 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {<=\s*.+\{ 255,.+\}} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-4.c b/gcc/testsuite/gcc.dg/bic-bitmask-4.c new file mode 100644 index 0000000000000000000000000000000000000000..1bcf23ccf1447d6c8c999ed1eb25ba0a450028e1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-4.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) >= 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) >= 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {=\s*.+\{ 1,.+\}} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-5.c b/gcc/testsuite/gcc.dg/bic-bitmask-5.c new file mode 100644 index 0000000000000000000000000000000000000000..6e5a2fca9992efbc01f8dbbc6f95936e86643028 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-5.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) > 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) > 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {>\s*.+\{ 255,.+\}} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {&`s*.+\{ 4294967040,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-6.c b/gcc/testsuite/gcc.dg/bic-bitmask-6.c new file mode 100644 index 0000000000000000000000000000000000000000..018e7a4348c9fc461106c3d9d01291325d3406c2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-6.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) <= 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~255)) <= 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {<=\s*.+\{ 255,.+\}} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967040,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-7.c b/gcc/testsuite/gcc.dg/bic-bitmask-7.c new file mode 100644 index 0000000000000000000000000000000000000000..798678fb7555052c93abc4ca34f617d640f73bb4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-7.c @@ -0,0 +1,24 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~1)) < 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~1)) < 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {__builtin_memset} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-8.c b/gcc/testsuite/gcc.dg/bic-bitmask-8.c new file mode 100644 index 0000000000000000000000000000000000000000..1dabe834ed57dfa0be48c1dc3dbb226092c79a1a --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-8.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~1)) != 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~1)) != 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-times {>\s*.+\{ 1,.+\}} 1 dce7 } } */ +/* { dg-final { scan-tree-dump-not {&\s*.+\{ 4294967294,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask-9.c b/gcc/testsuite/gcc.dg/bic-bitmask-9.c new file mode 100644 index 0000000000000000000000000000000000000000..9c1f8ee0adfc45d1b9fc212138ea26bb6b693e49 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask-9.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -save-temps -fdump-tree-dce" } */ + +#include + +__attribute__((noinline, noipa)) +void fun1(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~5)) == 0; +} + +__attribute__((noinline, noipa, optimize("O1"))) +void fun2(uint32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (x[i]&(~5)) == 0; +} + +#include "bic-bitmask.h" + +/* { dg-final { scan-tree-dump-not {<=\s*.+\{ 4294967289,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump {&\s*.+\{ 4294967290,.+\}} dce7 } } */ +/* { dg-final { scan-tree-dump-not {\s+bic\s+} dce7 { target { aarch64*-*-* } } } } */ + diff --git a/gcc/testsuite/gcc.dg/bic-bitmask.h b/gcc/testsuite/gcc.dg/bic-bitmask.h new file mode 100644 index 0000000000000000000000000000000000000000..2b94065c025e0cbf71a21ac9b9d6314e24b0c2d9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bic-bitmask.h @@ -0,0 +1,43 @@ +#include + +#ifndef N +#define N 50 +#endif + +#ifndef TYPE +#define TYPE uint32_t +#endif + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#define BASE ((TYPE) -1 < 0 ? -126 : 4) + +int main () +{ + TYPE a[N]; + TYPE b[N]; + + for (int i = 0; i < N; ++i) + { + a[i] = BASE + i * 13; + b[i] = BASE + i * 13; + if (DEBUG) + printf ("%d: 0x%x\n", i, a[i]); + } + + fun1 (a, N); + fun2 (b, N); + + for (int i = 0; i < N; ++i) + { + if (DEBUG) + printf ("%d = 0x%x == 0x%x\n", i, a[i], b[i]); + + if (a[i] != b[i]) + __builtin_abort (); + } + return 0; +} + diff --git a/gcc/testsuite/gcc.target/aarch64/bic-bitmask-1.c b/gcc/testsuite/gcc.target/aarch64/bic-bitmask-1.c new file mode 100644 index 0000000000000000000000000000000000000000..568c1ffc8bc4148efaeeba7a45a75ecbd3a7a3dd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bic-bitmask-1.c @@ -0,0 +1,13 @@ +/* { dg-do assemble } */ +/* { dg-options "-O2 -save-temps" } */ + +#include + +uint32x4_t foo (int32x4_t a) +{ + int32x4_t cst = vdupq_n_s32 (255); + int32x4_t zero = vdupq_n_s32 (0); + return vceqq_s32 (vbicq_s32 (a, cst), zero); +} + +/* { dg-final { scan-assembler-not {\tbic\t} { xfail { aarch64*-*-* } } } } */ From patchwork Wed Sep 29 16:21:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1534468 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=KB3EUEby; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKMGG52n4z9sPT for ; Thu, 30 Sep 2021 02:27:02 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D6FC33858430 for ; Wed, 29 Sep 2021 16:26:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D6FC33858430 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932819; bh=DogPRINw7uQduMs0hJgi+6CrpDkROZRPkHXJWR6mrEE=; 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=KB3EUEbyO6S8QQxtKQvwUTtBBYIkQ8pCmUiFYySCiCiAfbKFgNesExSkk4KhSB8rl gzc1UKzn8Ir8THm0OAx4si3ybjAe4hGd1/SWYTvU0UgnhUbffgWgSKXcBmrW2nSJo1 FRWjbXqIoQpRZlEfq7TQW/HqPuJxmoFeZcLsycSM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150084.outbound.protection.outlook.com [40.107.15.84]) by sourceware.org (Postfix) with ESMTPS id D48AA3857C51 for ; Wed, 29 Sep 2021 16:21:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D48AA3857C51 Received: from DB6PR0202CA0026.eurprd02.prod.outlook.com (2603:10a6:4:a5::12) by AS8PR08MB5877.eurprd08.prod.outlook.com (2603:10a6:20b:291::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13; Wed, 29 Sep 2021 16:21:45 +0000 Received: from DB5EUR03FT040.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:a5:cafe::17) by DB6PR0202CA0026.outlook.office365.com (2603:10a6:4:a5::12) 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:21:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (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=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT040.mail.protection.outlook.com (10.152.20.243) 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:21:45 +0000 Received: ("Tessian outbound ab2dc3678fa9:v103"); Wed, 29 Sep 2021 16:21:45 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 00a541aad4122a5a X-CR-MTA-TID: 64aa7808 Received: from 7450dcf15dd1.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 0BDDBC24-C6FF-474D-BE9C-920C218D2EBE.1; Wed, 29 Sep 2021 16:21:34 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 7450dcf15dd1.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:21:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=auDWIxVYy/Esgj9p79qrtKLDqsOxlFjyMoDSRtzK5rrC7zXPCbgj1935f4jk/8q+BvYiLEegB3VmZSbrTQYHRFr7+QoprWoKfMUIprMUvz/1XO//d4NuYXBs6Ys8sHqlmQr+opQ7NMwmPTjpBbUO9qqJeE4sEjXIy70ltMbmamB86UW6QLFvbYBjmPN36n3PrFIoHeoMvlusRrBPM+zGaFErFF5/j5I3sgQcl0+NV24vxc+Qy3lxokeUGfY/fHD7yTI4QWJwemm5YYyIgWIlSRQ6UoztbkoYJ8WvRYu/glZks/loaDYGNxsYYNIPnfXdJ6ktYg/fI+wbUhsogocmfw== 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=DogPRINw7uQduMs0hJgi+6CrpDkROZRPkHXJWR6mrEE=; b=Bcaz2mHoB/VGuZ1JSp5HGRQC9scEltg8DGfX/rp40cDjvND57AQSyNQO/7vIfZFCijxlnOlpyepdJgqb8ejvk/pxXS5uBrYzGHh76Mo/8s1cp3TJrNpyKS5apu2vu6DLLEyDjRXwSgvmv+utLsqgOz/xDmCug/5WHQmK40O5dZmZhcyHJMFNG6sGM7IVXwdbe6eJLVt5vWNz407s41/ALXqmsem48LOQNUsEbUAJu5GgGYPSVmE6Z2WmpJ2otU/u43V4nGm6/oPV+MjrVP26xM5UNinCN0t88uw1xsADdOh/sQ3nJ+WLrFYbmPhrsRKYp1v7CpPOUK8FbzXJvFe6HQ== 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 VI1PR08MB3437.eurprd08.prod.outlook.com (2603:10a6:803:7e::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13; Wed, 29 Sep 2021 16:21:33 +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:21:33 +0000 Date: Wed, 29 Sep 2021 17:21:31 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 6/7]AArch64 Add neg + cmle into cmgt Message-ID: <20210929162129.GA9709@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: LO4P265CA0021.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ae::22) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by LO4P265CA0021.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ae::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13 via Frontend Transport; Wed, 29 Sep 2021 16:21:32 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5af209d3-5466-4819-426f-08d983653b04 X-MS-TrafficTypeDiagnostic: VI1PR08MB3437:|AS8PR08MB5877: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:4714;OLM:4714; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 9uDWQwBhNgvC96WDs0upXzRfCFG3VprMqRvFQpbKe/Sg5ZIHgA2dJ2COQizTRjFdGf7aEjPtpAjhXiLuzhsugA85vsCXPT882DtQO7oYedfb197oJZX0Xdze5MbTjDlei8korNmoCRCm9+XTPmwW2SxhgnUJAW+e0M23VC1PXCpOdGfMfnCuyTezZrFVMkrRsOuux2hnHFG78lhjulq4cQa4OMEl4h5zn7fgBJsM+cfrbfZ+oJeAbi5TaIkzWUPB2vVldDwZoA4ZZ4/tyefk6DBkjKb0VTfrG+0JHdeHnGHET3lzlH34p8GtDA8sBkyCjz67BoMeC2NcbXNs+qz54HLvfeKZoFuKfbRHOgwZc4yodHM6woJcu/+LPV6DkOZ+UGsirGgr8KlAMvIMI6hc4ixBRWKv5yhEY2hw80hz2PC28ni/aVf8eBONar0+B5JQVd2zU8G7kBnUTB30EqVk/YiFXRbYLSusclBKPREPFar+uGTz18gK3gUHV87yCqxuiS3+ytkUFKmZac+8/g5AOCSqKrqKRuJPvWLs2NCIs8Wyzs8wV3nHtw7CqcnkfB0KagtSJzt3s18Y9Dd2tsc7TBkAgyyvjfN+OLj5milIUvxwoFkpMfuxMpsHlVk8OAmeNNUGg9f4CICiWzB/KkWX8q4nFU6rfcn0DB9lwo/5X6HUTrTyUBo7qjOx6IicXBczOGIJQ8Cs05qVLsPmT9VEnWiDOH/AEWweW7QHq//GTy7nxFmVAnfCbDGFXVdQahap8iq9AdvTwZ2MPEFQEjmupPxhZXQOB16F4BaBLPqoTXaDmmOVpHZjyhjpsfjXLSi6 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)(8936002)(8886007)(8676002)(36756003)(86362001)(2906002)(4743002)(66556008)(66476007)(66616009)(55016002)(33656002)(316002)(38350700002)(38100700002)(1076003)(26005)(235185007)(5660300002)(33964004)(508600001)(52116002)(66946007)(44832011)(44144004)(7696005)(6916009)(956004)(2616005)(4326008)(186003)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3437 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: DB5EUR03FT040.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: e6ac3b31-3ce3-41b7-a0a9-08d983653392 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ru08qi/s45+rw/4p4MwZNU06GCnqgmOKh2ZHeg8YIeKEW7S+MHjCrrt9x8IgsHCOI6OBM4R/MyjGjhbBri3tfdXXP+rryIJaw23p4tvt5D+/76sMmRVilFPM1kv0DQJ1ClNxCnZinqpD04/57UeQZODULDyjmirKKMDO7x9AdDap6slKKLMr1tc8grsKFn1d9ivOeSFJ6F6MJRuqZ5uJS2urSh8xY+V/X2xduex+mmVjpeqw5+3O1zIhvjkq4VOFKvPNDLOuxsYQlr9Oe1kK5WrvollJEpK0/zJlxqujjQYxWqfXU+DUZLTrKOcDuUQ3rBRQK+kiWKa6UJpQ38cKoCDU4fDSeQq01STzyVyVVap6Phe/AHBfkcuT2Qx7yuG/eHvKULTXqqalFT85qnfFvO4UuUVEv87wNL+7vLk2bmGFzRbI1hALZ6q28bVK0K4WTZRWp2apHmgHsZlDrd4YPEuJRF1Y8YLsZxME1lblv7PpllouugatbkwvOempEzafSf1dODEQKgsDNxxHeIB256eQErdAV1gxLavvBnVSCMfS7hY51z18/8TSNUqodZG4jPdq1EeTRjytEj+U//nGsYDv82Fuq1JRSR87reRZUwlW+0kQ2kfMPazyyPHA53iIokkgiryoofCMaupMeVPqjAl1X/DMOv4y91hjwAH3ryb3WLfQ7L57/DGaH/7L0FuZaX/X2CyVf/7QoJeiBwUxWmNQY+gN6dJrCCZhRGWKsd0X1mHZQi5OyT4PJETIh2NKXIcaeQLknBcn1LVEp4PALD6ZhnYFuV3UHoVaWojNxQbEsFZ2oCRWujaawxO7IItS X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(26005)(47076005)(8886007)(8676002)(86362001)(1076003)(508600001)(36860700001)(316002)(356005)(81166007)(44832011)(235185007)(33964004)(956004)(6916009)(2906002)(82310400003)(36756003)(70206006)(8936002)(44144004)(2616005)(4326008)(336012)(70586007)(5660300002)(7696005)(55016002)(4743002)(33656002)(186003)(66616009)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:21:45.4626 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5af209d3-5466-4819-426f-08d983653b04 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT040.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB5877 X-Spam-Status: No, score=-13.6 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This turns an inversion of the sign bit + arithmetic right shift into a comparison with 0. i.e. void fun1(int32_t *x, int n) { for (int i = 0; i < (n & -16); i++) x[i] = (-x[i]) >> 31; } now generates: .L3: ldr q0, [x0] cmgt v0.4s, v0.4s, #0 str q0, [x0], 16 cmp x0, x1 bne .L3 instead of: .L3: ldr q0, [x0] neg v0.4s, v0.4s sshr v0.4s, v0.4s, 31 str q0, [x0], 16 cmp x0, x1 bne .L3 Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64-simd.md (*aarch64_simd_neg_ashr): New. * config/aarch64/predicates.md (aarch64_simd_shift_imm_vec_signbit): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/signbit-1.c: New test. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 0045b100c6af1c007293ee26506199868be90e9f..9d936428b438c95b56614c94081d7e2ebc47d89f 100644 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 0045b100c6af1c007293ee26506199868be90e9f..9d936428b438c95b56614c94081d7e2ebc47d89f 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -1137,6 +1137,18 @@ (define_insn "aarch64_simd_ashr" [(set_attr "type" "neon_compare,neon_shift_imm")] ) +;; Additional opt when we negate the sign bit and then shift right +(define_insn "*aarch64_simd_neg_ashr" + [(set (match_operand:VDQ_I 0 "register_operand" "=w") + (ashiftrt:VDQ_I + (neg:VDQ_I + (match_operand:VDQ_I 1 "register_operand" "w")) + (match_operand:VDQ_I 2 "aarch64_simd_shift_imm_vec_signbit" "D1")))] + "TARGET_SIMD" + "cmgt\t%0., %1., #0" + [(set_attr "type" "neon_compare_zero")] +) + (define_insn "*aarch64_simd_sra" [(set (match_operand:VDQ_I 0 "register_operand" "=w") (plus:VDQ_I diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md index 7fd4f9e7d06d3082d6f3047290f0446789e1d0d2..12e7d35da154b10f0190274d0279cab313563455 100644 --- a/gcc/config/aarch64/predicates.md +++ b/gcc/config/aarch64/predicates.md @@ -545,6 +545,12 @@ (define_predicate "aarch64_simd_shift_imm_offset_di" (and (match_code "const_int") (match_test "IN_RANGE (INTVAL (op), 1, 64)"))) +(define_predicate "aarch64_simd_shift_imm_vec_signbit" + (and (match_code "const_vector") + (match_test "aarch64_const_vec_all_same_in_range_p (op, + GET_MODE_UNIT_BITSIZE (mode) - 1, + GET_MODE_UNIT_BITSIZE (mode) - 1)"))) + (define_predicate "aarch64_simd_shift_imm_vec_exact_top" (and (match_code "const_vector") (match_test "aarch64_const_vec_all_same_in_range_p (op, diff --git a/gcc/testsuite/gcc.target/aarch64/signbit-1.c b/gcc/testsuite/gcc.target/aarch64/signbit-1.c new file mode 100644 index 0000000000000000000000000000000000000000..3ebfb0586f37de29cf58635b27fe48503714447e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/signbit-1.c @@ -0,0 +1,18 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 --save-temps" } */ + +#include + +void fun1(int32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (-x[i]) >> 31; +} + +void fun2(int32_t *x, int n) +{ + for (int i = 0; i < (n & -16); i++) + x[i] = (-x[i]) >> 30; +} + +/* { dg-final { scan-assembler-times {\tcmgt\t} 1 } } */ From patchwork Wed Sep 29 16:21:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1534470 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=bb/RYtT7; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HKMHN5MWlz9sPT for ; Thu, 30 Sep 2021 02:28:00 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9272F3858430 for ; Wed, 29 Sep 2021 16:27:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9272F3858430 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632932878; bh=8+RskaDLN9be9DjFyqlYo1zfv+ESTgcJ53RBRphi4dI=; 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=bb/RYtT7f5D5wdsAIz9U8uZgSve4JHTyD/wHlGlRAptdQzQhDrBmaQDPIQmsRAh3v ELPG9oFkw/2lPjqCuVuWhno7eVsO4CUggFS9a/l69fy98x205n8hE34Bfgj4B3FdWW Hg0lRNUhSnu2232/mJt/mVpqRI146rB+9lpsRVLA= 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-eopbgr80075.outbound.protection.outlook.com [40.107.8.75]) by sourceware.org (Postfix) with ESMTPS id DBE25385801D for ; Wed, 29 Sep 2021 16:22:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DBE25385801D Received: from DU2P250CA0018.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:231::23) by HE1PR0801MB2012.eurprd08.prod.outlook.com (2603:10a6:3:4d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.18; Wed, 29 Sep 2021 16:22:12 +0000 Received: from DB5EUR03FT023.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:231:cafe::3b) by DU2P250CA0018.outlook.office365.com (2603:10a6:10:231::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13 via Frontend Transport; Wed, 29 Sep 2021 16:22:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (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=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT023.mail.protection.outlook.com (10.152.20.68) 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:22:12 +0000 Received: ("Tessian outbound a77cafe56b47:v103"); Wed, 29 Sep 2021 16:22:12 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 8fdff116c2ea7b0e X-CR-MTA-TID: 64aa7808 Received: from 1a62dab6eb6b.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 5B764206-13C7-45AF-B97E-5864AB1C5F1F.1; Wed, 29 Sep 2021 16:21:59 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1a62dab6eb6b.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 Sep 2021 16:21:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c5/t8kgcELaaYxA0LDLFFQc+2w8gi4EvPETxoywchp9XoAoMpwrl/KgCWk48Wy8x95jfSYKQC93QpqFhyt+uuvZ/eXWk21jPx67MfklX5d1euuBIqrdyRAshBAJrdKRYQ0BGORSh9/Og73ho0eW4aUkzsEwkD3gvFHJc1SordIeF0RRMHoYaWlCMeRukdH45emmaTVpLA4WDHMdWZo40vZCTAWkPv2T7oDR+U18T923dpDYNt6PA/L637NNe2t2fjsvDtSNEx8A7y3/x6xLlxTVllkzRKQwdWrfqt+cM5xooMtAfdGRaOirY9UCAvmAUq01fH4IYsZBW9hEPNMj2kw== 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=8+RskaDLN9be9DjFyqlYo1zfv+ESTgcJ53RBRphi4dI=; b=IjFnzu7p9yecgMzCsXxw4d2gqzTQcAQPsK/wbpunWRl0xeoEEvBPLZHG8kMIrhQDx9hPhYubJxmygKZaLYt5qoJgyR2S/BEPHC2Mng3RZJRSWeCDKjUzqoTNZSWc9tXPmUNITUYNRGhrwBGIols2CuuB/XhjJmivscobvppf0W9tGJfBOVsgpsBBCZuTmAun9/R411C1YcUnnBbdyqsNdhwCgfv35HKYpsDzUM1d4QZECURSW74n8xO/CCTD6Drmo3HZvWbyk977lK5bnlCdNW7QI2nbQYZVSPSMeb2Y1yMBDYlhfJDyhj+N3puiO2Jary5CjeMNSRuZSiXnwuu3cQ== 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 VI1PR08MB3437.eurprd08.prod.outlook.com (2603:10a6:803:7e::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.13; Wed, 29 Sep 2021 16:21:58 +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:21:58 +0000 Date: Wed, 29 Sep 2021 17:21:49 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 7/7]AArch64 Combine cmeq 0 + not into cmtst Message-ID: <20210929162147.GA12194@arm.com> Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: SA9P223CA0025.NAMP223.PROD.OUTLOOK.COM (2603:10b6:806:26::30) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 Received: from arm.com (217.140.106.55) by SA9P223CA0025.NAMP223.PROD.OUTLOOK.COM (2603:10b6:806:26::30) 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:21:56 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 463f7320-3b51-4d7c-07f0-08d983654b0e X-MS-TrafficTypeDiagnostic: VI1PR08MB3437:|HE1PR0801MB2012: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:1122;OLM:1122; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: osyKC2Q8xMgpQmlYY55QPwhL/FuUdzSbm1oJXfrZGv/WkpwcCx7w0S3fPHYQXHCxIdNCQABS2eyxJg6aT5WVBKrSQ0yidhIhiN67z9w87Fij+bOqc29vl9twSO/g7w48DSxbw6UQIzagXndrw43jg+7lXf22e1CbSj6/Dgan4jwgE3Bh7f/k+xe9VfOVxKO2NXLGGgZ6POT5uZ9GLJlSJuOGA/LAQgO86PVyhsrmAxbUgE32HDyeyMenp985okxI9zGG2emj3TDYYzjugPiuS5FpdQZ2WYXHZS4G+jAVXctstT7vXcZufp14gEVvn5c06Wh3AjOQvgHaq3+RLNUFGtIJKa3TvUROG6S7rtK+FGGHl3LNFuGZ0BC3lHGaQUD/aJ2U3l3sZOMejJSUdf3sEEBDtRMAbVqRxacTcM8Pq+mfv4SyYp02ZViis2DV0PQs8E2z+aiVVpeOLuh6+RiKmO5Odt/U6znDGw7H8B/NHVQjfjWPuF6veOnDiI6MsdeS+sR0+GaahQYFJw//j+wcCacXOyEZvBOKH7mjfMLnhzXqVJd92VX98mOym182YgY50IcobhkyGxEkyowsFIokJjjiYVhEBJBRxGbg+6NI/zCGH0g67iaBPuL9WITPOMBPwHPXlVCNsnDnuy5b2kD1rlikxok0fLtLo1hcYTB/1zKSXQZx2WMu8VJ4AopUTIbCwZvKcsILvI00m9gj72Ze6HYSSph1o8PLaOkpi3t4EC7JxDrucjGViQaL82dDjViISYu4rWlKfcUnw8BK8rrMLwhESFGaioJSCuqd9S9ID2v/F43WWR0gzy2RxNMMFz0i 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)(8936002)(6666004)(8886007)(8676002)(36756003)(86362001)(2906002)(4743002)(66556008)(66476007)(66616009)(55016002)(33656002)(316002)(38350700002)(38100700002)(1076003)(26005)(235185007)(5660300002)(33964004)(508600001)(52116002)(66946007)(44832011)(44144004)(7696005)(6916009)(956004)(2616005)(4326008)(186003)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3437 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: DB5EUR03FT023.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: d264319c-3927-4df8-bf8c-08d98365427f X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OeuLBz61Ty3DbsvoqNNupxi5pkqmYyCjURNiWjyevFvOoJP3ZtnvLDi7v34UaiGDc/RffghvT9rjQyFS5aywqZ94Wxut8kxJZ6Qi4qcpXYNmCY/eNjobzEhfarqik1F7vtEL1WDoOvgl8fJfCZi7CKQIPO0TqpRAQrrqB3ocPKsQ132KIwuqC6V6F52D/gIBGlYUJ4WGcFy7qTQVBHjM3M4mHvF4MHOBvcPzaU9TPCZoLNAGU5I0GTjOTnwDVyMBVxs904XSaUVRzwgn06f/c5l5wi0XfZO421AsHT0kv6zT2L0yAiu2gMSjEfPv695AKMsroY8cmTlQEMDVki+A2r3NmmUaTOf2c3H0HL7QEP9pbO2ZHzL7zQAjH8X70qSUs9lxOtHPmGJtauwgagxDfLy7+5Ftg87hygACpaJuL1ye83XdeRLez7gVnoY8cw2FNbAN+chRjctP4IsL/jhEviUyCM+6tD1JNwjIj8VSO03bpfxoch2UkSBdpCBNZnlNuhmmKVK65FHvK8Q0SFU0f/hxQMB0or9iOFmy4ONQ/GOYVh3aYKtB6bRwd+W3AZeSkcl30iA3vQabgc3yVG+0K2UegfobR4MeaepFsHawmfIahii09K/11Pzd3wWhIzO6R7W/Hlkd9y4gmwP2HZAD3aG4ogCMA1Yn0KxR2u64onln/C6MuVzrm6VcRvTQXR8wHYA8kukJv5i9qhr9iGJeurrSezW4NCbRFZJ4Bk1Hi1CrQB0XfpUs20ggJyEvCkuypcxthTZRsfryxGl6BkEh7bG2ctZvVb0r0C2+Kf/ewFx12WpE/phvHz2/ynLHPLi8 X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(508600001)(44832011)(44144004)(33964004)(4743002)(36860700001)(86362001)(26005)(7696005)(55016002)(186003)(6916009)(316002)(235185007)(5660300002)(82310400003)(2906002)(47076005)(70206006)(70586007)(66616009)(36756003)(8936002)(81166007)(356005)(6666004)(33656002)(2616005)(956004)(8886007)(8676002)(336012)(4326008)(1076003)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2021 16:22:12.3642 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 463f7320-3b51-4d7c-07f0-08d983654b0e X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT023.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB2012 X-Spam-Status: No, score=-13.6 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This turns a bitwise inverse of an equality comparison with 0 into a compare of bitwise nonzero (cmtst). We already have one pattern for cmsts, this adds an additional one which does not require an additional bitwise and. i.e. #include uint8x8_t bar(int16x8_t abs_row0, int16x8_t row0) { uint16x8_t row0_diff = vreinterpretq_u16_s16(veorq_s16(abs_row0, vshrq_n_s16(row0, 15))); uint8x8_t abs_row0_gt0 = vmovn_u16(vcgtq_u16(vreinterpretq_u16_s16(abs_row0), vdupq_n_u16(0))); return abs_row0_gt0; } now generates: bar: cmtst v0.8h, v0.8h, v0.8h xtn v0.8b, v0.8h ret instead of: bar: cmeq v0.8h, v0.8h, #0 not v0.16b, v0.16b xtn v0.8b, v0.8h ret Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64-simd.md (*aarch64_cmtst_same_): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/mvn-cmeq0-1.c: New test. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 9d936428b438c95b56614c94081d7e2ebc47d89f..bce01c36386074bf475b8b7e5c69a1959a13fef3 100644 diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 9d936428b438c95b56614c94081d7e2ebc47d89f..bce01c36386074bf475b8b7e5c69a1959a13fef3 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -6585,6 +6585,23 @@ (define_insn "aarch64_cmtst" [(set_attr "type" "neon_tst")] ) +;; One can also get a cmtsts by having to combine a +;; not (neq (eq x 0)) in which case you rewrite it to +;; a comparison against itself + +(define_insn "*aarch64_cmtst_same_" + [(set (match_operand: 0 "register_operand" "=w") + (plus: + (eq: + (match_operand:VDQ_I 1 "register_operand" "w") + (match_operand:VDQ_I 2 "aarch64_simd_imm_zero")) + (match_operand: 3 "aarch64_simd_imm_minus_one"))) + ] + "TARGET_SIMD" + "cmtst\t%0, %1, %1" + [(set_attr "type" "neon_tst")] +) + (define_insn_and_split "aarch64_cmtstdi" [(set (match_operand:DI 0 "register_operand" "=w,r") (neg:DI diff --git a/gcc/testsuite/gcc.target/aarch64/mvn-cmeq0-1.c b/gcc/testsuite/gcc.target/aarch64/mvn-cmeq0-1.c new file mode 100644 index 0000000000000000000000000000000000000000..59f3a230271c70d3bb51d0338d9ec2613bd4394b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvn-cmeq0-1.c @@ -0,0 +1,17 @@ +/* { dg-do assemble } */ +/* { dg-options "-O3 --save-temps --param=vect-epilogues-nomask=0" } */ + +#include + +uint8x8_t bar(int16x8_t abs_row0, int16x8_t row0) { + uint16x8_t row0_diff = + vreinterpretq_u16_s16(veorq_s16(abs_row0, vshrq_n_s16(row0, 15))); + uint8x8_t abs_row0_gt0 = + vmovn_u16(vcgtq_u16(vreinterpretq_u16_s16(abs_row0), vdupq_n_u16(0))); + return abs_row0_gt0; +} + + +/* { dg-final { scan-assembler-times {\tcmtst\t} 1 } } */ +/* { dg-final { scan-assembler-not {\tcmeq\t} } } */ +/* { dg-final { scan-assembler-not {\tnot\t} } } */