From patchwork Fri Sep 23 11:42:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 57962 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4E9483857348 for ; Fri, 23 Sep 2022 11:43:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4E9483857348 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663933390; bh=1s5KgygkdGhQdpuVxwCnVPj8ombvlB4Tu2srkRhjVuE=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=ISK5wty2r/UtRU3COZ4cJaQ2hA6ZFi1GRvfuGuyYEHcpd0KV/xJYGtakHX1L1x9Ye X4d+KVG03jDL4uPSqRr4rbi6onwEkv3LUDCxzfPnoDL0Bg2SQ+FK9deu/gfdXgCtm2 jkkJ5RGnq8sTveJoP2Nr02NbZ2sV90CsM++BuX+I= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2088.outbound.protection.outlook.com [40.107.20.88]) by sourceware.org (Postfix) with ESMTPS id ABE553858C52 for ; Fri, 23 Sep 2022 11:42:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ABE553858C52 ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=kT2+JRUTFWUTLrsPM2ACHlCj3HrNp3AzBk5/r6c5GykWax50eYWmXJ7I5cwhJtVXEgZQHG38fA9+mJN3O2462UCz763C1L5nIkyAErAbmBWmOCPT+Sk6ZCbr1M8wenjAsgGMdf8GPMZ8tokQqEsqGcw8c0fWp5Ghugt5qFGN91LShb3/HVb0pySfScUX6fZdOtKXGgdmy/+564Qt1vQw4dbFe0UActxVQ0zNJSUxgLMm1s/XWJFo2IjTnXjzIvXem+ko9PwirHTZGIONxtvmxRULbw6VwUkOJ8CKU+w7qbqQ9QmKP24YoPooSDAFZN3J3goZnL1bRYJE8UCXGIXzQA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1s5KgygkdGhQdpuVxwCnVPj8ombvlB4Tu2srkRhjVuE=; b=XnANI7gu7L+QlBLiUCpZjOAtof5LltJioIX7HHK9bCORQN7sE0WSl5U6xfhrqOmDNGl3ccOTkdvUtQUmeDtd6xbZUIOPGSKa2ZsKRgBKQmxnBFknVd5f5G5jkHi/IJ2KLlunaj6hJyUFclEiD3B2Kuw6DL8c45AEsh4Bqf2J09g+3lmku3lL2GJ0k58YelprCuq/3pkmY/809JYJIjBVnBIlUFvJwyzQQucp3ko2q9M7r53q6UKKly1f7wjTyO0nx1WvLRjS1I0dBpu3c9B7V3fYs21FnbA3DVcweADv4y3SSOYPHh5A6AGXmh2u9jynZlA/H4KnUpT5L0N7GuSZ6A== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from FR3P281CA0136.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:95::9) by GV1PR08MB7802.eurprd08.prod.outlook.com (2603:10a6:150:59::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.18; Fri, 23 Sep 2022 11:42:30 +0000 Received: from VE1EUR03FT059.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:95:cafe::92) by FR3P281CA0136.outlook.office365.com (2603:10a6:d10:95::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.7 via Frontend Transport; Fri, 23 Sep 2022 11:42:30 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT059.mail.protection.outlook.com (10.152.19.60) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 11:42:30 +0000 Received: ("Tessian outbound 88978e6d60db:v124"); Fri, 23 Sep 2022 11:42:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 0d61a997da7cd853 X-CR-MTA-TID: 64aa7808 Received: from aff847d2372a.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 1084B5D2-B003-4127-BFDE-DF74A83D1C08.1; Fri, 23 Sep 2022 11:42:23 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id aff847d2372a.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 23 Sep 2022 11:42:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FF+XJzgRnAUSr1M5E9ACMGaVOmlfdpoqWg3IYIW5Se/IMtqrRcqhdcysstVNalaDy1jyg7x3eGMu9JJ3egaTGOA1MhrczIF4NeiTMbq6K/0ZlbdJW9PaWXZKW+sjfGrXMrKd1Q7KxHYdvwGXjHlcxfJNjwdOBWjDnUar52jKJP9r2hICmGF+fjKRWT5s5aad6vwQihiLL7J7oO7wg1C4OMDgD96HWPXbh/XUJbJ1MY1Qlusmtw95302HDrBJ8002YZD5bQMQZfYU2I1g2dmGBFdj8gxrojmhmj7LL2lA9+RT+ju1tV6X5QGd1+6aU4fbij9dez5vHaRtq3RJgR2g+w== 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:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1s5KgygkdGhQdpuVxwCnVPj8ombvlB4Tu2srkRhjVuE=; b=WozsUmQkAnaDgh+Q2EttlvL/sYNhqgHDCuCdWCmzCym4gmQwbbBmO2bKtWMPY5EB6yvqfzIuvCUJesbW974dvxowqMZ1jo8oobrlGmSzvFrz4+ybifU2BC1jmLFZc8UzWg48Ue9b7x9hg5tdCzB9wldBy0dUJUWNq0SeDJrWuYADoDPgiAr1WkdmtVDbYEYeeEBuZPkxOq/daivmtUzwDxDSGFnpGXBJ1l+OkmFoZPQ0n0QbV7QDoTvfMESO0Py7MkH7jvdnwYLEuNhCGNl0WRo1e5gbcO7cMc9ai5wm087mYvuMuQc+UFTt49wpxM5++cpZPE867rNmH+Gu2RxppA== 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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PAVPR08MB9580.eurprd08.prod.outlook.com (2603:10a6:102:31b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 11:42:21 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::6529:66e5:e7d4:1a40]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::6529:66e5:e7d4:1a40%4]) with mapi id 15.20.5632.021; Fri, 23 Sep 2022 11:42:21 +0000 Date: Fri, 23 Sep 2022 12:42:12 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2]middle-end Fold BIT_FIELD_REF and Shifts into BIT_FIELD_REFs alone Message-ID: Content-Disposition: inline X-ClientProxiedBy: SA9PR13CA0055.namprd13.prod.outlook.com (2603:10b6:806:22::30) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB5325:EE_|PAVPR08MB9580:EE_|VE1EUR03FT059:EE_|GV1PR08MB7802:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a4c0986-cdc6-49db-79ae-08da9d58b2a5 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Rx3k7gbmWKQ/9HNDkEFcGJZj6LCDae34mVJF583JACoTR7yBcVh2Xp60TYdahZPgszZFXT4bfRUDmkxMszjPsC3kjxrBrXptysFG9PQlTEXzrjei0+OVZ0OEO74NxCPO03haftFWzbYLcPGpEqUxcYGgFTfeWqkgjrvDapf+609YhlvWwWahQM2WQwlQLZmF7JCDoMM5jRf/20RPqifXAJ685/caXo7BJ6eJD+LIgNy15qJrcGdfvrfRUEW9NZH6HJykn6FDyYLk7aIEMyqpZrM/1baqAgDcy7kk72+dCZWXlq9akv+qo8YoX3S0PfHZkd8JtG0UwWFn7lOeaDzSaIsdoGP6+4p2LB2CIxOekrKtL/BvibcO+R/qzmzPddRhC/NK+EoMXGMP/rBxw0SCP7bfGQw6q2rQnJYuZtJcY8rjBZebd5rsCBIV+UrSoVA/VNPlzlN4X0wLkagptuA6JutFDpA/c99k030PXrPM9S/1XnJWhL5/Rrq4QkT/uRmwFEJyz1uA6zuIKxRFkjxUmZQaliIf6oX7HUX/XvtFfGiMnXP7eAosXKsNa29HqFRfEaDqYgBErjClg7nez04qViS6P3TynEGg+LmQzLrgJwyYafImMLZB1R8FnOzP85i3s7X/aShbuC7LMPFHqfucNs5mp9GNkSqcH8BilqZ2wcodKu2RUsfsekvCLW0e11dDfX/HmYFvV2CQuUYq8FZX2uwFMm5+yf8TC2aw5AwjjTfMEaNb6jqobNRrRrPXK/ahO8qf48vzZJa3FoLME52cx+MTB5ZXJ/skAMFt5fU8wFU= 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:(13230022)(4636009)(366004)(376002)(396003)(136003)(39860400002)(346002)(451199015)(44144004)(186003)(6506007)(38100700002)(316002)(5660300002)(33964004)(235185007)(4326008)(8676002)(8936002)(6666004)(86362001)(36756003)(478600001)(6486002)(2616005)(44832011)(6512007)(66476007)(2906002)(4743002)(66556008)(66946007)(26005)(6916009)(83380400001)(41300700001)(4216001)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9580 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT059.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: df52b505-89f6-4cba-b8f1-08da9d58acd7 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JEioLRE7h+0JR+Qi4vRZiOCXCRHJUEIPoKDtNlFQ3NQvYTl7EeHg2TL7I2mT1dpZsa8ipOoPSiU//I0H1vXAAFuSaBI8bQR9VgMJrc9eUntaVtcgkcb8uQnrO3FJmAeerr6xR3dhZpyNUHBtn//BoruVz97NBHa9Yzf2OYuRA50qyLxDhZuA2yyoS2NybPoporHOk+g9kfXU6v2z+USif6nINGEADO/nubIGtOUEqJ+6Z3VuqI6LxDwx1QLq4xxqM+DGRAb5aQtGKN7JR0RkZqa77HqHhce8qs8xJAn4vRWlC1UOtN3hXEFNOz5rRnHRu8/N+G9OEgbhPhwLFJF2eGrpVKmr8S+P61CgN/ggY05ZxcaD9nmhEk3n65iIdNgfKfRN3GkXwrawyw4p8eO97rtSQZ9s2fBgq8+6r9I2ik9AcNgWtRV+nVaLFRSns7SvWh9buuOQLiAkzlHBBYsheSErdoXQ5M0cT5m2N2MaWJcDp9Kn+mJkPWnp0s0qKMYjGsJs5c1scs290pOwldoDMdl3HuYbDDnmfbq5VQUX/sYQUnTdYqMY9ucEXEQgY2KgOybuvuyMN5fSgo/Tv8wY4G0EU6hWasOA6JjLKDFWfM3rotjuPO98VngOh9y/GTKg2fXJKjVxylCfbpQ0l6zheopnTkz0vYP6vgsdcxh4WaZ6LZvQ66wteeTmRAVE/AwnhJhbQFUeqCGGBTO2SkRSf3nq3+DiKGsaqyMH2jTXsB9ZMXKlyXB/KSyBsikvIWLUzA2L6Yq/2hSmRqAMseQle+wlJxfq97KL1W5og67mUOfyAuRbtDaoWFNYTqAaeBi5uCC4zUPbhUkk26hcZ3gwqw== 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:(13230022)(4636009)(136003)(346002)(376002)(39860400002)(396003)(451199015)(40470700004)(46966006)(36840700001)(40460700003)(356005)(36756003)(33964004)(86362001)(82740400003)(81166007)(316002)(6916009)(8676002)(70586007)(70206006)(235185007)(5660300002)(2906002)(82310400005)(8936002)(4326008)(47076005)(83380400001)(36860700001)(6486002)(41300700001)(107886003)(40480700001)(6666004)(26005)(44144004)(44832011)(2616005)(6506007)(478600001)(6512007)(4743002)(336012)(186003)(4216001)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 11:42:30.4968 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2a4c0986-cdc6-49db-79ae-08da9d58b2a5 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: VE1EUR03FT059.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB7802 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.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+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, This adds a match.pd rule that can fold right shifts and bit_field_refs of integers into just a bit_field_ref by adjusting the offset and the size of the extract and adds an extend to the previous size. Concretely turns: #include unsigned int foor (uint32x4_t x) { return x[1] >> 16; } which used to generate: _1 = BIT_FIELD_REF ; _3 = _1 >> 16; into _4 = BIT_FIELD_REF ; _2 = (unsigned int) _4; I currently limit the rewrite to only doing it if the resulting extract is in a mode the target supports. i.e. it won't rewrite it to extract say 13-bits because I worry that for targets that won't have a bitfield extract instruction this may be a de-optimization. Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu and no issues. Testcase are added in patch 2/2. Ok for master? Thanks, Tamar gcc/ChangeLog: * match.pd: Add bitfield and shift folding. --- inline copy of patch -- diff --git a/gcc/match.pd b/gcc/match.pd index 1d407414bee278c64c00d425d9f025c1c58d853d..b225d36dc758f1581502c8d03761544bfd499c01 100644 Signed-off-by: Andrew Pinski --- diff --git a/gcc/match.pd b/gcc/match.pd index 1d407414bee278c64c00d425d9f025c1c58d853d..b225d36dc758f1581502c8d03761544bfd499c01 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -7245,6 +7245,23 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && ANY_INTEGRAL_TYPE_P (type) && ANY_INTEGRAL_TYPE_P (TREE_TYPE(@0))) (IFN_REDUC_PLUS_WIDEN @0))) +/* Canonicalize BIT_FIELD_REFS and shifts to BIT_FIELD_REFS. */ +(for shift (rshift) + op (plus) + (simplify + (shift (BIT_FIELD_REF @0 @1 @2) integer_pow2p@3) + (if (INTEGRAL_TYPE_P (type)) + (with { /* Can't use wide-int here as the precision differs between + @1 and @3. */ + unsigned HOST_WIDE_INT size = tree_to_uhwi (@1); + unsigned HOST_WIDE_INT shiftc = tree_to_uhwi (@3); + unsigned HOST_WIDE_INT newsize = size - shiftc; + tree nsize = wide_int_to_tree (bitsizetype, newsize); + tree ntype + = build_nonstandard_integer_type (newsize, 1); } + (if (ntype) + (convert:type (BIT_FIELD_REF:ntype @0 { nsize; } (op @2 @3)))))))) + (simplify (BIT_FIELD_REF (BIT_FIELD_REF @0 @1 @2) @3 @4) (BIT_FIELD_REF @0 @3 { const_binop (PLUS_EXPR, bitsizetype, @2, @4); })) --- a/gcc/match.pd +++ b/gcc/match.pd @@ -7245,6 +7245,23 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && ANY_INTEGRAL_TYPE_P (type) && ANY_INTEGRAL_TYPE_P (TREE_TYPE(@0))) (IFN_REDUC_PLUS_WIDEN @0))) +/* Canonicalize BIT_FIELD_REFS and shifts to BIT_FIELD_REFS. */ +(for shift (rshift) + op (plus) + (simplify + (shift (BIT_FIELD_REF @0 @1 @2) integer_pow2p@3) + (if (INTEGRAL_TYPE_P (type)) + (with { /* Can't use wide-int here as the precision differs between + @1 and @3. */ + unsigned HOST_WIDE_INT size = tree_to_uhwi (@1); + unsigned HOST_WIDE_INT shiftc = tree_to_uhwi (@3); + unsigned HOST_WIDE_INT newsize = size - shiftc; + tree nsize = wide_int_to_tree (bitsizetype, newsize); + tree ntype + = build_nonstandard_integer_type (newsize, 1); } + (if (ntype) + (convert:type (BIT_FIELD_REF:ntype @0 { nsize; } (op @2 @3)))))))) + (simplify (BIT_FIELD_REF (BIT_FIELD_REF @0 @1 @2) @3 @4) (BIT_FIELD_REF @0 @3 { const_binop (PLUS_EXPR, bitsizetype, @2, @4); })) From patchwork Fri Sep 23 11:43:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 57963 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 229D03857346 for ; Fri, 23 Sep 2022 11:44:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 229D03857346 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663933451; bh=9R0Uv45BfzE70NKyy31JHIX0uDtBUKHX0t31VTy0K44=; 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=rQbtb8hFshJCNu5V2RYjJxJsDsZcMyHRXe9RUqBnhzjy4YSubfIiv1rZf52AhTTlt KoJVX0rOY6yK7MftxjcpNLKKd+xMkNjeLffiLkou3w/aqAkfbvpD2gsJUZ3dhPIzIn V1HhaRh+bp6uUaaF1YuYUhbjYdqnnqjl0JUtORCA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2045.outbound.protection.outlook.com [40.107.20.45]) by sourceware.org (Postfix) with ESMTPS id E2BCA3857BA0 for ; Fri, 23 Sep 2022 11:43:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E2BCA3857BA0 ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=YWTbsZ9q1mQI1iEACVDQlYY3MMY3EAaVCtZtzxNqIEyfuAeE6N9A9QeUUhpQDsu3lLeuW5AiCsSskTb1eudV2kSQ0VarxJFntrFMJr1qR/DMLqI5C/n3yo8kGiCe8qBOiisNeLtGQdBSfUIKoEwNFvhQl+vQvxG8CjemjahTrY2S8/FQqkO4vPWm3aN0ITFmMxkY/His8ps5SOIyySR9z2dAcvvXspWZhmHhqs1lQ/wmGR5J5Lbya3QdOcrHvNHf89ONue4YOrbcbbmW3rbCDD8hel21h2lRPrYIQJN9aEy+n4ucoDUq86BSr2+0mRYcA44x4vrtRYLA5xuBRtCjUA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9R0Uv45BfzE70NKyy31JHIX0uDtBUKHX0t31VTy0K44=; b=WHuEoqpEHJ6cpmD67oRu6eXIMsS8lZ4ICLiG4okpXptiJMB2lhaDozl6tyyG8dIvQ5fqu/fO0tWa77AU2xYCD3NNaYVpJWfgr/zdp+LQVMV4EHqlaSGVKtFqEBmPQQb5gzwV6mAy6m4CTJ5ZV8Q7mq5LHaL3j78a5FYruiob/vNSgjqaOckAw/7uDw6ZPmK76okDNSQT9Gk1D1MqribhrQafB2vSpH2wc2LNGf8r7NVL8U6n5fl+JTcvBfDj1ITIXxJCy6yWxMLWCM9Yv18oO1Aw2n+mH9ON9PzGlAGaeql2FYPpzHc2Rudx8Yep0ZBbPeaoAOXcqZExnsUM9MFbZw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=bestguesspass action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from AM6PR0202CA0041.eurprd02.prod.outlook.com (2603:10a6:20b:3a::18) by DB4PR08MB9863.eurprd08.prod.outlook.com (2603:10a6:10:3f0::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.17; Fri, 23 Sep 2022 11:43:36 +0000 Received: from AM7EUR03FT018.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:3a:cafe::b9) by AM6PR0202CA0041.outlook.office365.com (2603:10a6:20b:3a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20 via Frontend Transport; Fri, 23 Sep 2022 11:43:36 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=bestguesspass 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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT018.mail.protection.outlook.com (100.127.140.97) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 11:43:35 +0000 Received: ("Tessian outbound ee41cdb23966:v124"); Fri, 23 Sep 2022 11:43:34 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: d7592df247ae0227 X-CR-MTA-TID: 64aa7808 Received: from dce00970daf7.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 26588329-FC18-44C5-90EB-224481B1B6EF.1; Fri, 23 Sep 2022 11:43:27 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dce00970daf7.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 23 Sep 2022 11:43:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h8bZkorJGS11e4BdtRDun68R94OmgKL4dLoHrHSjxamH8Gv+g2fcnt5Va8C6k9SWO4o9U01buuftsLtZ91GKqw4ukrvBUezZFxMukRvghiI68QuDm0ChpLxFzuWExMShG+F+7+Rb9JqB7rgfikmbDaNbjIBEDlj3v34UhW4OIPYk3Z7BEebgfBjRksSHhimUEp5Kisxc+dcRd921r1DrMRfBic6T3LQHgcgKj6p0c4ytcTvr//i4xqQNceDKqBvabpUuJRGVAGCJnr+WTs105PPZC+1NGbNWGWKG8gO1EAYwNNSAPxctu4cATtAHReqfvJuzm9e7hsZ/V+TvhCG/kw== 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:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9R0Uv45BfzE70NKyy31JHIX0uDtBUKHX0t31VTy0K44=; b=UZqi4mvJA2tBG3hWfV1bzp8QKIJRSfd6nNEGWXNv6hiPLpIvFhAS+L4qButCT2SPLFmNxBGm6RII7Oxg8+a9TdrB7+djKTHYhoaP2rdT4W62qNLzqIWuYtO59X03BuExkoKBJBD4MHfw/ftYm5lFNpDJfB48Z6AwJOfWeASxokoi5xGDvFcnSeKd1fzBHC7LAYcA0pEfkFtsMXpbf2BefQYDSCakmpSOZ7h67yI30l5Q/vmruBZ3RE0gUMhz/JTpDhpuc6U4w++EFx5YN10WzvLt/WAHdgXnDWpwizW8DASr+Y3OFFwxOW3JWmWqMXgAv+sAA1IjiLjDFFig9GFtFQ== 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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS8PR08MB8993.eurprd08.prod.outlook.com (2603:10a6:20b:5b4::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.16; Fri, 23 Sep 2022 11:43:26 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::6529:66e5:e7d4:1a40]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::6529:66e5:e7d4:1a40%4]) with mapi id 15.20.5632.021; Fri, 23 Sep 2022 11:43:26 +0000 Date: Fri, 23 Sep 2022 12:43:18 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH 2/2]AArch64 Perform more late folding of reg moves and shifts which arrive after expand Message-ID: Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: SA0PR11CA0100.namprd11.prod.outlook.com (2603:10b6:806:d1::15) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB5325:EE_|AS8PR08MB8993:EE_|AM7EUR03FT018:EE_|DB4PR08MB9863:EE_ X-MS-Office365-Filtering-Correlation-Id: 1310ef1e-dcf8-4712-9ef7-08da9d58d91a x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: PVcTgF441PiaxhRAf485n7lAN1tCTR8DRW55RLnqMlkfUG64XnkjZHryfs4OynckXnrudlUFbqWsTeonFv/DU0g0OST2zXLZYLFvMhOWhwXddnRCqesdJJ4QDVimVwxKxPI8EIoURUeZq0KhEbzsFwtgxrmFv/NqEh/ITNLrVgO6gK3TiSXTTIgkbuHi389K8yFfuWSR8D/j9E+mYTTisMnr+NSCwW0NrK6ZOPhmxtOzK26QPTolrEgB5KR3FoNJmZxN89+MO6eUk1jBzjeOAeiw+YMBHpb+7DpyeRgO+aZ+WWUkPElbpMi3LbzDUm6dL0nYTwBioAFki8POipjq6pxznqHvFtXGVf6z1ctHDN5vsQckdjz1G2RN38x5BsW4dPWOxH4lRfRKK9lB/ShHrTgJ7yma3U+/EkMUpb3i7sQiiV1CH34f6FYY0gglI/s38NP/ZMXgrTg53iDWzQWhB7B9oLSnZrqzgtlCozcdYLOnnOcLN9NK2LLB5kV6XV/E0NFK2RwKqm5Z8v/r87Cm/Wh1NP4EjLr0QeTkjYRfXLQfiMRZRExnsFgUJamsQSkCRcROVcpbrftdIGOJ69GKyrsAMbAmdEi9qCTcXd06I1p/qzx+eJgk6zneOC1UL8js2A+J8FzsvnCDFkC0MVBdJbXeabcG3F7vx4fkzM3ebRKIjIniLMoP/NrSDRYWYiIMBMfUlYII9JgvnBkhZYg50Uxy67Bzj52tbVfkeZEGwBPOfGr4Q7lLeLeiMCZ9EWOeoL4bUiNA6/pXrJzzYYRuJH5+AKgDAFQjhG6PKckeS7k= 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:(13230022)(4636009)(396003)(366004)(39860400002)(376002)(136003)(346002)(451199015)(4326008)(66899012)(186003)(2616005)(4743002)(44832011)(38100700002)(6506007)(5660300002)(41300700001)(6512007)(44144004)(6486002)(26005)(235185007)(33964004)(8936002)(478600001)(8676002)(66946007)(84970400001)(6666004)(86362001)(316002)(66556008)(66476007)(6916009)(2906002)(36756003)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB8993 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT018.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: c4321047-5aab-4862-61bf-08da9d58d379 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1YFMLKPPmpvYUPll5l8/M10D83RJMljh93R36a/lSqcF/DTmMbi0GCCYcrvKYs6D4JTEGes/XTJVs/sUqz5NQCKCLXSVeP3o0rMw3myvanWjR8775LpXC1Okykp6HWWIQ1aR6SkR/5OPtv6WtpnZJuLmm1nbLHONhUo+2mwcK9R1fPv33MKdjHyaalGZcdLSBuKltoV/Rfww5Zb9JO8hrVjli1tdWvq9JFJB6Lfo5wBOglB7kWJc8Y8DD4o30cLG0qT47ftQvoOSt3mdpZ3IPJ19PjolZR6vcVkJqhOAYefWeRf6KJ3Phh3CY7h8nt7FHN3aVeE+AjNjX0uMzoGub61VwCVvVEaKyxzvsiO8x3FcmahDzmM06J6ILa3MBcvbRszHGsQ3UtxooPB/ix4cADhPnRkBnPzZicC56uojSK9aVToXx73FxOI/EQ4U/AzY5GX6CZzuQid9Bg8PrPjsRjBLmrQq93u1EmJz9vbQxcmHn6RKHHOyB41Pm+ZcDEP/Sj6CoUicGFJdsLmsbKfc9H4pMbofc5i265xfvvtVGWGzs+iAGXmbN3PWf3RumigKV1rqUmj7jrQM8vLr1rjNk1lqWVvKgTQn7p0I0TA1IXeyXamEkFJG0+a2zIabS8HOH0Zkf1PbrCBGnhrhgDSy32fjWuTDBewCICM7xCVsbJG6IIzqlq6KvCHozfy3aiEuE118Q+xKJIN7SykepVUhmPRHUJo4Q/RefV9gR5RtngauBt4mITgkBDJ88cDkQEr5xYaK6wgY7RKGrNQXk4O6fUT3scfWwrHRAktTLUdcnAJjEg8bhS6J97kaJulu+OhT72VcfnUMg7ArKXxPkrJvXA== 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:(13230022)(4636009)(39860400002)(346002)(376002)(396003)(136003)(451199015)(36840700001)(46966006)(40470700004)(478600001)(41300700001)(6486002)(2906002)(6506007)(44144004)(6916009)(6666004)(26005)(8676002)(5660300002)(4326008)(70206006)(8936002)(82740400003)(33964004)(70586007)(44832011)(316002)(66899012)(235185007)(6512007)(84970400001)(40460700003)(36756003)(82310400005)(40480700001)(356005)(86362001)(36860700001)(47076005)(81166007)(336012)(186003)(2616005)(4743002)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 11:43:35.0804 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1310ef1e-dcf8-4712-9ef7-08da9d58d91a 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: AM7EUR03FT018.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB9863 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, KAM_LOTSOFHASH, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tamar Christina via Gcc-patches From: Tamar Christina Reply-To: Tamar Christina Cc: Richard.Earnshaw@arm.com, nd@arm.com, richard.sandiford@arm.com, Marcus.Shawcroft@arm.com Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, Similar to the 1/2 patch but adds additional back-end specific folding for if the register sequence was created as a result of RTL optimizations. Concretely: #include unsigned int foor (uint32x4_t x) { return x[1] >> 16; } generates: foor: umov w0, v0.h[3] ret instead of foor: umov w0, v0.s[1] lsr w0, w0, 16 ret Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64.md (*si3_insn_uxtw): Split SHIFT into left and right ones. * config/aarch64/constraints.md (Usl): New. * config/aarch64/iterators.md (SHIFT_NL, LSHIFTRT): New. gcc/testsuite/ChangeLog: * gcc.target/aarch64/shift-read.c: New test. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index c333fb1f72725992bb304c560f1245a242d5192d..6aa1fb4be003f2027d63ac69fd314c2bbc876258 100644 --- diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index c333fb1f72725992bb304c560f1245a242d5192d..6aa1fb4be003f2027d63ac69fd314c2bbc876258 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -5493,7 +5493,7 @@ (define_insn "*rol3_insn" ;; zero_extend version of shifts (define_insn "*si3_insn_uxtw" [(set (match_operand:DI 0 "register_operand" "=r,r") - (zero_extend:DI (SHIFT_no_rotate:SI + (zero_extend:DI (SHIFT_arith:SI (match_operand:SI 1 "register_operand" "r,r") (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "Uss,r"))))] "" @@ -5528,6 +5528,60 @@ (define_insn "*rolsi3_insn_uxtw" [(set_attr "type" "rotate_imm")] ) +(define_insn "*si3_insn2_uxtw" + [(set (match_operand:DI 0 "register_operand" "=r,?r,r") + (zero_extend:DI (LSHIFTRT:SI + (match_operand:SI 1 "register_operand" "w,r,r") + (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "Usl,Uss,r"))))] + "" + { + switch (which_alternative) + { + case 0: + { + machine_mode dest, vec_mode; + int val = INTVAL (operands[2]); + int size = 32 - val; + if (size == 16) + dest = HImode; + else if (size == 8) + dest = QImode; + else + gcc_unreachable (); + + /* Get nearest 64-bit vector mode. */ + int nunits = 64 / size; + auto vector_mode + = mode_for_vector (as_a (dest), nunits); + if (!vector_mode.exists (&vec_mode)) + gcc_unreachable (); + operands[1] = gen_rtx_REG (vec_mode, REGNO (operands[1])); + operands[2] = gen_int_mode (val / size, SImode); + + /* Ideally we just call aarch64_get_lane_zero_extend but reload gets + into a weird loop due to a mov of w -> r being present most time + this instruction applies. */ + switch (dest) + { + case QImode: + return "umov\\t%w0, %1.b[%2]"; + case HImode: + return "umov\\t%w0, %1.h[%2]"; + default: + gcc_unreachable (); + } + } + case 1: + return "\\t%w0, %w1, %2"; + case 2: + return "\\t%w0, %w1, %w2"; + default: + gcc_unreachable (); + } + } + [(set_attr "type" "neon_to_gp,bfx,shift_reg")] +) + (define_insn "*3_insn" [(set (match_operand:SHORT 0 "register_operand" "=r") (ASHIFT:SHORT (match_operand:SHORT 1 "register_operand" "r") diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md index ee7587cca1673208e2bfd6b503a21d0c8b69bf75..470510d691ee8589aec9b0a71034677534641bea 100644 --- a/gcc/config/aarch64/constraints.md +++ b/gcc/config/aarch64/constraints.md @@ -166,6 +166,14 @@ (define_constraint "Uss" (and (match_code "const_int") (match_test "(unsigned HOST_WIDE_INT) ival < 32"))) +(define_constraint "Usl" + "@internal + A constraint that matches an immediate shift constant in SImode that has an + exact mode available to use." + (and (match_code "const_int") + (and (match_test "satisfies_constraint_Uss (op)") + (match_test "(32 - ival == 8) || (32 - ival == 16)")))) + (define_constraint "Usn" "A constant that can be used with a CCMN operation (once negated)." (and (match_code "const_int") diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index e904407b2169e589b7007ff966b2d9347a6d0fd2..bf16207225e3a4f1f20ed6f54321bccbbf15d73f 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -2149,8 +2149,11 @@ (define_mode_attr sve_lane_pair_con [(VNx8HF "y") (VNx4SF "x")]) ;; This code iterator allows the various shifts supported on the core (define_code_iterator SHIFT [ashift ashiftrt lshiftrt rotatert rotate]) -;; This code iterator allows all shifts except for rotates. -(define_code_iterator SHIFT_no_rotate [ashift ashiftrt lshiftrt]) +;; This code iterator allows arithmetic shifts +(define_code_iterator SHIFT_arith [ashift ashiftrt]) + +;; Singleton code iterator for only logical right shift. +(define_code_iterator LSHIFTRT [lshiftrt]) ;; This code iterator allows the shifts supported in arithmetic instructions (define_code_iterator ASHIFT [ashift ashiftrt lshiftrt]) diff --git a/gcc/testsuite/gcc.target/aarch64/shift-read.c b/gcc/testsuite/gcc.target/aarch64/shift-read.c new file mode 100644 index 0000000000000000000000000000000000000000..e6e355224c96344fe1cdabd6b0d3d5d609cd95bd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shift-read.c @@ -0,0 +1,85 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" { target { le } } } } */ + +#include + +/* +** foor: +** umov w0, v0.h\[3\] +** ret +*/ +unsigned int foor (uint32x4_t x) +{ + return x[1] >> 16; +} + +/* +** fool: +** umov w0, v0.s\[1\] +** lsl w0, w0, 16 +** ret +*/ +unsigned int fool (uint32x4_t x) +{ + return x[1] << 16; +} + +/* +** foor2: +** umov w0, v0.h\[7\] +** ret +*/ +unsigned short foor2 (uint32x4_t x) +{ + return x[3] >> 16; +} + +/* +** fool2: +** fmov w0, s0 +** lsl w0, w0, 16 +** ret +*/ +unsigned int fool2 (uint32x4_t x) +{ + return x[0] << 16; +} + +typedef int v4si __attribute__ ((vector_size (16))); + +/* +** bar: +** addv s0, v0.4s +** fmov w0, s0 +** lsr w1, w0, 16 +** add w0, w1, w0, uxth +** ret +*/ +int bar (v4si x) +{ + unsigned int sum = vaddvq_s32 (x); + return (((uint16_t)(sum & 0xffff)) + ((uint32_t)sum >> 16)); +} + +/* +** foo: +** lsr w0, w0, 16 +** ret +*/ +unsigned short foo (unsigned x) +{ + return x >> 16; +} + +/* +** foo2: +** ... +** umov w0, v[0-8]+.h\[1\] +** ret +*/ +unsigned short foo2 (v4si x) +{ + int y = x[0] + x[1]; + return y >> 16; +} --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -5493,7 +5493,7 @@ (define_insn "*rol3_insn" ;; zero_extend version of shifts (define_insn "*si3_insn_uxtw" [(set (match_operand:DI 0 "register_operand" "=r,r") - (zero_extend:DI (SHIFT_no_rotate:SI + (zero_extend:DI (SHIFT_arith:SI (match_operand:SI 1 "register_operand" "r,r") (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "Uss,r"))))] "" @@ -5528,6 +5528,60 @@ (define_insn "*rolsi3_insn_uxtw" [(set_attr "type" "rotate_imm")] ) +(define_insn "*si3_insn2_uxtw" + [(set (match_operand:DI 0 "register_operand" "=r,?r,r") + (zero_extend:DI (LSHIFTRT:SI + (match_operand:SI 1 "register_operand" "w,r,r") + (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "Usl,Uss,r"))))] + "" + { + switch (which_alternative) + { + case 0: + { + machine_mode dest, vec_mode; + int val = INTVAL (operands[2]); + int size = 32 - val; + if (size == 16) + dest = HImode; + else if (size == 8) + dest = QImode; + else + gcc_unreachable (); + + /* Get nearest 64-bit vector mode. */ + int nunits = 64 / size; + auto vector_mode + = mode_for_vector (as_a (dest), nunits); + if (!vector_mode.exists (&vec_mode)) + gcc_unreachable (); + operands[1] = gen_rtx_REG (vec_mode, REGNO (operands[1])); + operands[2] = gen_int_mode (val / size, SImode); + + /* Ideally we just call aarch64_get_lane_zero_extend but reload gets + into a weird loop due to a mov of w -> r being present most time + this instruction applies. */ + switch (dest) + { + case QImode: + return "umov\\t%w0, %1.b[%2]"; + case HImode: + return "umov\\t%w0, %1.h[%2]"; + default: + gcc_unreachable (); + } + } + case 1: + return "\\t%w0, %w1, %2"; + case 2: + return "\\t%w0, %w1, %w2"; + default: + gcc_unreachable (); + } + } + [(set_attr "type" "neon_to_gp,bfx,shift_reg")] +) + (define_insn "*3_insn" [(set (match_operand:SHORT 0 "register_operand" "=r") (ASHIFT:SHORT (match_operand:SHORT 1 "register_operand" "r") diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md index ee7587cca1673208e2bfd6b503a21d0c8b69bf75..470510d691ee8589aec9b0a71034677534641bea 100644 --- a/gcc/config/aarch64/constraints.md +++ b/gcc/config/aarch64/constraints.md @@ -166,6 +166,14 @@ (define_constraint "Uss" (and (match_code "const_int") (match_test "(unsigned HOST_WIDE_INT) ival < 32"))) +(define_constraint "Usl" + "@internal + A constraint that matches an immediate shift constant in SImode that has an + exact mode available to use." + (and (match_code "const_int") + (and (match_test "satisfies_constraint_Uss (op)") + (match_test "(32 - ival == 8) || (32 - ival == 16)")))) + (define_constraint "Usn" "A constant that can be used with a CCMN operation (once negated)." (and (match_code "const_int") diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index e904407b2169e589b7007ff966b2d9347a6d0fd2..bf16207225e3a4f1f20ed6f54321bccbbf15d73f 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -2149,8 +2149,11 @@ (define_mode_attr sve_lane_pair_con [(VNx8HF "y") (VNx4SF "x")]) ;; This code iterator allows the various shifts supported on the core (define_code_iterator SHIFT [ashift ashiftrt lshiftrt rotatert rotate]) -;; This code iterator allows all shifts except for rotates. -(define_code_iterator SHIFT_no_rotate [ashift ashiftrt lshiftrt]) +;; This code iterator allows arithmetic shifts +(define_code_iterator SHIFT_arith [ashift ashiftrt]) + +;; Singleton code iterator for only logical right shift. +(define_code_iterator LSHIFTRT [lshiftrt]) ;; This code iterator allows the shifts supported in arithmetic instructions (define_code_iterator ASHIFT [ashift ashiftrt lshiftrt]) diff --git a/gcc/testsuite/gcc.target/aarch64/shift-read.c b/gcc/testsuite/gcc.target/aarch64/shift-read.c new file mode 100644 index 0000000000000000000000000000000000000000..e6e355224c96344fe1cdabd6b0d3d5d609cd95bd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shift-read.c @@ -0,0 +1,85 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" { target { le } } } } */ + +#include + +/* +** foor: +** umov w0, v0.h\[3\] +** ret +*/ +unsigned int foor (uint32x4_t x) +{ + return x[1] >> 16; +} + +/* +** fool: +** umov w0, v0.s\[1\] +** lsl w0, w0, 16 +** ret +*/ +unsigned int fool (uint32x4_t x) +{ + return x[1] << 16; +} + +/* +** foor2: +** umov w0, v0.h\[7\] +** ret +*/ +unsigned short foor2 (uint32x4_t x) +{ + return x[3] >> 16; +} + +/* +** fool2: +** fmov w0, s0 +** lsl w0, w0, 16 +** ret +*/ +unsigned int fool2 (uint32x4_t x) +{ + return x[0] << 16; +} + +typedef int v4si __attribute__ ((vector_size (16))); + +/* +** bar: +** addv s0, v0.4s +** fmov w0, s0 +** lsr w1, w0, 16 +** add w0, w1, w0, uxth +** ret +*/ +int bar (v4si x) +{ + unsigned int sum = vaddvq_s32 (x); + return (((uint16_t)(sum & 0xffff)) + ((uint32_t)sum >> 16)); +} + +/* +** foo: +** lsr w0, w0, 16 +** ret +*/ +unsigned short foo (unsigned x) +{ + return x >> 16; +} + +/* +** foo2: +** ... +** umov w0, v[0-8]+.h\[1\] +** ret +*/ +unsigned short foo2 (v4si x) +{ + int y = x[0] + x[1]; + return y >> 16; +}