From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2050.outbound.protection.outlook.com [40.107.104.50]) by sourceware.org (Postfix) with ESMTPS id 0C147385E83E; Wed, 15 May 2024 10:28:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0C147385E83E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0C147385E83E Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.104.50 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1715768937; cv=pass; b=DJ9idTMOqfBIht9Bl7vSmDBtiWf+YTrXToAU3LNq7/xsvCj0loaXVltbkBjg69htAYlKFIsEWQ2X5c8/u2qT/hMXy94CIaw0F8Gby+ouD+WOR70AzG6k4VSLBjjY/OJ2x2zDIp9TzGhXFozjL0Fwj0GkcZcXts54oQ++hARdH64= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1715768937; c=relaxed/simple; bh=Kx2zvSUs8+NMvExlrvcPfI73w6ramCUxVv6Bk4ZYK5A=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=UW57bFkhA8svjejLRZgiEDaBTE4ZyLpSFKoK3iLzU70dGMRoAjS/Ye1mAuE2Bi/O497a8McEsixa6j/4X2MNJEtIB5cpZPd0WUbiZytYiYEZmlaY7SjoycydddL4cI3q2GD7dPvaI/FScI1IePyfSJ6K273bFUfvrzRV2LeEZuo= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=jXxhpe0X0xp4QVytcV8y59tAbQxh7QQuyOhal+oghrUiQyyfobvalH6U/0rilX3Jfd1O3XCIRDMVuWuZdytYyASNkkBWE4OXRUj7G6OitxPK3sbBfITW+gLkCj40zUwoKqtyFBk77Bt31lDjdRySZedJIM6q8+6S2DD/DKJUoQPyetN3YT8K/9OXWgAsUDMxK49YPhKGXSLEFfb3Kqb1MFQ+oe8uxUMEtXCJDLqk/pBh1gVXI/O+lxiqFsmdrnvhct7Hoy4cI9NQ9GcbQjh/hwWfGompuffPuX/Pe/kjA2qyUNPdD1ZgWW+3+BSkBgX+XCIFB27SGOFoN0KzqsBR1Q== 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=ooYYn67OSau/4CD4zlesKqG4ppq7nmt8YIXgeP/AEf0=; b=MxyqSFXPw/1vvudLWX6pW/X7FmqUQby39X5hofFRTm3MBs6axe5Im66KBRNZ/jnIFuejgT2696xqynSGeB/V+WojZ00CCvuL/eFU6L89jpZmV0Cz6KX26fNy5jQK3ES3mU6PMwHQSpF5ZN+PtWQXqTE6TRogIi2ypvtis1WG60K9rbgqPq2W+awjJNhopW8A/TWNvct5ica6S8xK+xC+8Rcov+3CtS8YXLsGvwxW3QRMJ/QcPK9FoULiYXHp2lBRntyxk6cPfnjnNqNKebv+ApdIrCqutCkV8NL52QkoCSwXqNbAIn22xCk0j9lQfbhy7Mx0f64hGfFcfFKe3SVlLQ== 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=arm.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]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ooYYn67OSau/4CD4zlesKqG4ppq7nmt8YIXgeP/AEf0=; b=NJeVmSkttVDGCavBUw3i1cfpnuXcounGiwIHZhH69dFbMw0sOSJIEzUIA8P2Lvl4Xhu5rcOJzcW/KtIKK4p9EZMJM6IBn7wX2NiNhcg14jwbO3e/8RXM5M6g0W3Ogn9XjFH/6M/xu74YF2WeabNH7tthU45W0DR8ckOKY0vSJ1Q= Received: from DB9PR06CA0023.eurprd06.prod.outlook.com (2603:10a6:10:1db::28) by PAWPR08MB9686.eurprd08.prod.outlook.com (2603:10a6:102:2e2::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55; Wed, 15 May 2024 10:28:48 +0000 Received: from DU6PEPF0000A7E4.eurprd02.prod.outlook.com (2603:10a6:10:1db:cafe::97) by DB9PR06CA0023.outlook.office365.com (2603:10a6:10:1db::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55 via Frontend Transport; Wed, 15 May 2024 10:28:48 +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=arm.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 DU6PEPF0000A7E4.mail.protection.outlook.com (10.167.8.43) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7587.21 via Frontend Transport; Wed, 15 May 2024 10:28:48 +0000 Received: ("Tessian outbound af213ececc3d:v315"); Wed, 15 May 2024 10:28:48 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f1f5f51aaafa9c9f X-CR-MTA-TID: 64aa7808 Received: from c484a87a7b42.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 723D2794-D1FA-43AF-BC08-C5D291ECD62E.1; Wed, 15 May 2024 10:28:41 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c484a87a7b42.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 15 May 2024 10:28:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l218zJJpT4jTgvpgYaNbR6hYnXA/+EOem7ZUoqMx9EkAdeiaHXPxIcM4DYzZf6cAMHGwAs6rCMvzog/FNeve3+A+Jwm+abbXq/AxMN1S71bQQpCK2lBBHplNdR0pFaeJw4yFhcR1HZqqeFYE5Zoxris695qHk8Y2I/J8Z6/jo31OrygTj6Oahf4QHbdjCu2Q2xfjdQymfpCgjeR/AVfOdMUbZ/xesG7G0p4iVjw5KSybHJeJO0syfUSlb90WNQ22khf4OJ3JmE+DkRUjwIvS7CPccERzdAVu3DC0H9vpKR2g6ft6Zh3JxzFVTjp/Qv3bae2X424LrD0twTrhUrQLyw== 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=ooYYn67OSau/4CD4zlesKqG4ppq7nmt8YIXgeP/AEf0=; b=dg8Y0ohB9KdIaojD3zYomR4pNKyIpboZy+T6coyaDknG+D5fEVK3+4vpQHPFKfDQXccwWg1klL1fZ3j+MbZ2u3b4xUq39YI6tm9e5rL2Ad7o2CGKhFRP8ri3/majS/TA7vapMxtvM2KsyvKqwbNRtr7f1tYRxURSMPVdqiWOUso38Z8BZ1DIGvGWqLuTSvG/po1Nb1drvPwmONLHDqyB15fYONXkDI+NmqymnjIaMuFlzWJssgo0ZTjY8SPandVpP/AGLe0rekdf6pIEzlDx4IFCbkKsyrfFNKcPPAMQ/iMek5h/m32O6X/8XJdpnK8TJPM10CRtB7szVqE8MxWz6A== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ooYYn67OSau/4CD4zlesKqG4ppq7nmt8YIXgeP/AEf0=; b=NJeVmSkttVDGCavBUw3i1cfpnuXcounGiwIHZhH69dFbMw0sOSJIEzUIA8P2Lvl4Xhu5rcOJzcW/KtIKK4p9EZMJM6IBn7wX2NiNhcg14jwbO3e/8RXM5M6g0W3Ogn9XjFH/6M/xu74YF2WeabNH7tthU45W0DR8ckOKY0vSJ1Q= 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 AS2PR08MB8950.eurprd08.prod.outlook.com (2603:10a6:20b:5f9::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.27; Wed, 15 May 2024 10:28:36 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::89dc:c731:362b:7c69]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::89dc:c731:362b:7c69%4]) with mapi id 15.20.7587.025; Wed, 15 May 2024 10:28:36 +0000 Date: Wed, 15 May 2024 11:28:32 +0100 From: Tamar Christina To: gcc-patches@gcc.gnu.org Cc: nd@arm.com, Richard.Earnshaw@arm.com, Marcus.Shawcroft@arm.com, ktkachov@gcc.gnu.org, richard.sandiford@arm.com Subject: [PATCH 1/4]AArch64: convert several predicate patterns to new compact syntax Message-ID: Content-Type: multipart/mixed; boundary="+nCpBuEHvZ8RTMmk" Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: LO4P123CA0045.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:152::14) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB5325:EE_|AS2PR08MB8950:EE_|DU6PEPF0000A7E4:EE_|PAWPR08MB9686:EE_ X-MS-Office365-Filtering-Correlation-Id: 428e0cc9-8e6e-4de7-a930-08dc74c9ce80 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230031|376005|1800799015|366007; X-Microsoft-Antispam-Message-Info-Original: =?us-ascii?Q?yZI+nKk99L245KY/tlq5USYpmifcutYpIW49yv7YO9qoCI0KydwNUGBRBvPO?= =?us-ascii?Q?YYIgwrLOglWaPPP7qmNoOpo4QL7CuLLQzxh/GrIVTUvcoA3RlairI+vVa/ni?= =?us-ascii?Q?7oDGPYXLXr3R4KBejC0HrpojmAjrEHJd9DQtaS+b6ZEfdGRk5ovO8+2EU3e8?= =?us-ascii?Q?wzb+OaZU8NDjYpN6jM4iHcxf9qoqGbL+KTkij38Xv7gGrZqyLFi01phcw57N?= =?us-ascii?Q?o98fY6zYkrglRA6u9m+eFtkNzvwGWOtW183e7j7bLTEq2QtyHQHw7y2U6Phl?= =?us-ascii?Q?TI9Apjy99Py787GOIY5BAY1YYvaAmrzg+2rafUyWmdA3JiI0R2HT187tN7LM?= =?us-ascii?Q?PyzTIXUfsjI9tKPqBtnd8+lUrxx7AM8tIJk2YcxCDN1/Seh8Z1NgUFEcn0nL?= =?us-ascii?Q?ZnTiwpvQc8Wyv5wfhw7vz90GPRrL40s0gKarVt8nm/RJqqBJenZXIyoGo8dp?= =?us-ascii?Q?rxUwrGSm5tIaqk2yQY6VwjaE71zVbQ9t4AhVpj5TosycgcbpKXCEwhkFE68V?= =?us-ascii?Q?mXZiyukzE+B5/W1Raz8KJDTprrJAZRpiAIEYxHZf/zmaTkQZgf0/5RZt5TUf?= =?us-ascii?Q?IIXI/MYYWPVof95rPhaIHC8vGRA71s5XNxGyJXjlawXXVczwie30friXYoaS?= =?us-ascii?Q?+l+F6bIohPrWWI9aLJ029aPrLNw9STfzcU5n/eYOUZx4LEsGWB0AumfHLYzM?= =?us-ascii?Q?YPtAbkexJQ2rD3+9huZBSufKm47ECbDRho/TQ/rMLeQ84rdioV/sjR9X1v0y?= =?us-ascii?Q?HoLEInB0WhCa1htR9ze1AAiRNqRBqxxnQjL5QdEYGLtBDuusSxfvUbk485mq?= =?us-ascii?Q?5gtH6wGJ4iP87lPT+StyEUWZ4TMQvdvVURKKfqx50tedf/CDKZNmeyNj9Vqq?= =?us-ascii?Q?qW0wzPb05myRnjoDDcfgqjXyTjHvNwJbyqjqW9seD2VYxZsSc7y3QYSral0b?= =?us-ascii?Q?jan2Zrf2hYU9yXkayHsuMKdhvUAcJ/xC9R0aw5OEGr4t51HNIv5rXDDD+NyI?= =?us-ascii?Q?KmVkIcvjFrwbYPospd2MP9aUvXqtmXK5+3BdnQ4G+3fJ2D6aAbUmLqgycfPw?= =?us-ascii?Q?K3FNcT8hzEGZM1ejsHB7GbM4dTxXgCmaW3TL8iVx/PdkZcEtyPwg8NqvEd97?= =?us-ascii?Q?izgShVEC9JZCjA0eSeFF0bWQu2erS+5VtC01h795y3mSz8TzgAq5A10j+hfY?= =?us-ascii?Q?2JMDQC7gEO8YZKZe/ca6y1yFpAispylcdJvW97lLsgBeqMdp28rG8xff+svc?= =?us-ascii?Q?OSA5P/X2mDODy/C6h4FzqBGH2RrYWwa2a5HSkEo91Q=3D=3D?= 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:(13230031)(376005)(1800799015)(366007);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8950 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: DU6PEPF0000A7E4.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9037fee0-7ea4-4bd0-ff04-08dc74c9c769 X-Microsoft-Antispam: BCL:0;ARA:13230031|35042699013|376005|1800799015|82310400017|36860700004; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZUlWcDdJL285YzBFc0hxM0I5Zjd3QWVNMUtzNEI0OHFoRWRBQ2JTRk1aNnIr?= =?utf-8?B?aHAzUFBoN1Z2dWVleEhMMm0wVFRBbnF4VUp4WmR3S0RJME9RZWlwbEp1WERV?= =?utf-8?B?YUgybExiREtsSCtsM29JMGJkdklPeTE4eS91dTNGQ2Q5aGtPbWlCNXBaalNQ?= =?utf-8?B?aE93bXdEb0NlSVZ6STVGTkZoRVEveG5Sbm81dndkRkFJekpzR0NyMWZ6TlJQ?= =?utf-8?B?QnU4MUpOdW5QRWRUZlp3WlRQaFhlc3NkVUt3SXpxT0hieGNwSkxLQ0MrNDQz?= =?utf-8?B?LzRXcEYyazR2MzdDU1p5a2RBaThSS0pPWno3K000c0VhZ1ZBMlpUTlZ0S2Ji?= =?utf-8?B?a2l6OE5PSDQ2YnY5WUMyMlo3VlcwMXcrTDNNQ1VUelEza2w1WFV3THRwMVVx?= =?utf-8?B?anZnbGF1djlmM21ZZm1VNVhkbXcxSHFyRVpYRXlRWjNJTlhELzBHQlRlWm0x?= =?utf-8?B?U0RvT1pUbHAxRFMvVFptTzU1TzZIcjdHQTZyblQ1Tkxpai9qSGJVejlyRnNZ?= =?utf-8?B?amluY09Dc2FZTHV2YmNTd2ZvSDV4ek9IYnp4c2hWTmJNUjg5OXlDR05ia3Zs?= =?utf-8?B?WlpOZ3hDekM4ZTRVTncxbzhOS3lzTkM5eXdZcmp5SU5MdG1ManV1RVFBWFVx?= =?utf-8?B?eVQrUDRBVXhuT2ZhellQSml3cGFrSnNXdmpBeTE0S1JzYjN5SzN0WnhESXVE?= =?utf-8?B?ektUL2F4N1NWMTFEcHpWYmpxZTE5Z1ZpMjVvQWpvU1BUNC9HcHovS3ZEY0Vu?= =?utf-8?B?TzkvbWFxRTF2bjdSOU5hT0ZWdkUvR0l2VnVKT05XRjJ4c05wSzd3eG9EUDI0?= =?utf-8?B?MTY1N2hDQm1lL0I1MkhzVk44NXlwUFY4dzNzS0EyeWR1ODJXMGl2OTlSM01k?= =?utf-8?B?TFJybzRmc3NYMzRwcHF1WUl3ZlFJeEdnZEhqalJxdGhWcm53bm5BV0dkbVNH?= =?utf-8?B?VnB1QmFkamI2YmNxMUR2N0xSMDZvd3hYUHlwYnZxc1dnbGRuNUI2YlhVQnZh?= =?utf-8?B?eUJlUDJLZm05RFNVU0F4TDhyYjZmREIya1JFZDlPWE5XcWlSNEtmSjQyNkJt?= =?utf-8?B?NFZtbktVUEdtbk8rMVgraGZpMHBqeUE3b0hRbUk1aDU5TUVCOEVnTXVsMmtx?= =?utf-8?B?VWYyWXNPdFl5aTB5MnhIM2FzRE9oRjlYeHc5MVVwdGtDaitJb1ZKa3VUREFR?= =?utf-8?B?MGhpU1B5eTVFNTEwdTRDQU5va2ZkaWNWenFIaW55VEFMdzZjUjVPQlJOUEZB?= =?utf-8?B?bSsyRjJLNzhzQ1NyanRpNndtbko0OVh1YVlya21BVlZoK0x0c2xWWFV0TXlE?= =?utf-8?B?a29TMlBVMG0xOEk3MXllclRjNUNzOWtWWTNjSjRyOEIrSVNOaENUZ2tPQ0RV?= =?utf-8?B?ZlZsYzJPUHJRWG0xSXdhbC9xNjhzWVI4M09ralJXOVhEWFJ2NjBEcEsrOE1Y?= =?utf-8?B?QmNnUDZzQlVCRDlJbUZEdFdleUZFdzdGOFNDUnhiS2ZyWlQrOFI3UHQrcThr?= =?utf-8?B?OE5NQnRNd3JBbmFKeUpiVnpub2N2L3JkV3Vzc2RVQTlpdGsyWTdxM2cwSzY4?= =?utf-8?B?alM1MVQwTmdGbEtRTzVIQ2JYQlRNVU9EbGNGK2EyVm5xcjQzK0d5Q1hNOW12?= =?utf-8?B?WEtoSU5JUjJ6dFI0dmJIbGFrd1RVZ1VlRXVZQjJJSVFJQ0FoTllvczJIS0g4?= =?utf-8?B?SHVEVFFHcEtiMmNUL3U1SVhnRVU5Nm03ZGZ4NmZrNWlNV2EyRHVrZThhM1Z3?= =?utf-8?B?aFk1OFZSaDU2NWNGbXpQNGMxNFM4d2kyL2lzNUt1SkxQRElNL29mSTQ3eThI?= =?utf-8?B?RjFMdzUvbm03VUVWdGViQ3RqUCttRmN5V1Z2TUdhL0NFWW9scDhnOS84Tk5o?= =?utf-8?Q?gp/ZWSwL86n2u?= 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:(13230031)(35042699013)(376005)(1800799015)(82310400017)(36860700004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2024 10:28:48.1398 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 428e0cc9-8e6e-4de7-a930-08dc74c9ce80 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: DU6PEPF0000A7E4.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9686 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,KAM_LOTSOFHASH,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,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 List-Id: --+nCpBuEHvZ8RTMmk Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Hi All, This converts the single alternative patterns to the new compact syntax such that when I add the new alternatives it's clearer what's being changed. Note that this will spew out a bunch of warnings from geninsn as it'll warn that @ is useless for a single alternative pattern. These are not fatal so won't break the build and are only temporary. No change in functionality is expected with this patch. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64-sve.md (and3, @aarch64_pred__z, *3_cc, *3_ptest, aarch64_pred__z, *3_cc, *3_ptest, aarch64_pred__z, *3_cc, *3_ptest, *cmp_ptest, @aarch64_pred_cmp_wide, *aarch64_pred_cmp_wide_cc, *aarch64_pred_cmp_wide_ptest, *aarch64_brk_cc, *aarch64_brk_ptest, @aarch64_brk, *aarch64_brkn_cc, *aarch64_brkn_ptest, *aarch64_brk_cc, *aarch64_brk_ptest, aarch64_rdffr_z, *aarch64_rdffr_z_ptest, *aarch64_rdffr_ptest, *aarch64_rdffr_z_cc, *aarch64_rdffr_cc): Convert to compact syntax. * config/aarch64/aarch64-sve2.md (@aarch64_pred_): Likewise. --- diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index 0434358122d2fde71bd0e0f850338e739e9be02c..839ab0627747d7a49bef7b0192ee9e7a42587ca0 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -1156,76 +1156,86 @@ (define_insn "aarch64_rdffr" ;; Likewise with zero predication. (define_insn "aarch64_rdffr_z" - [(set (match_operand:VNx16BI 0 "register_operand" "=Upa") + [(set (match_operand:VNx16BI 0 "register_operand") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) - (match_operand:VNx16BI 1 "register_operand" "Upa")))] + (match_operand:VNx16BI 1 "register_operand")))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffr\t%0.b, %1/z" + {@ [ cons: =0, 1 ] + [ Upa , Upa ] rdffr\t%0.b, %1/z + } ) ;; Read the FFR to test for a fault, without using the predicate result. (define_insn "*aarch64_rdffr_z_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 2 "aarch64_sve_ptrue_flag") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. (define_insn "*aarch64_rdffr_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (const_int SVE_KNOWN_PTRUE) (reg:VNx16BI FFRT_REGNUM)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 ] + [ Upa , Upa ] rdffrs\t%0.b, %1/z + } ) ;; Read the FFR with zero predication and test the result. (define_insn "*aarch64_rdffr_z_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 2 "aarch64_sve_ptrue_flag") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1))] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1)))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. (define_insn "*aarch64_rdffr_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (const_int SVE_KNOWN_PTRUE) (reg:VNx16BI FFRT_REGNUM)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (reg:VNx16BI FFRT_REGNUM))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; [R3 in the block comment above about FFR handling] @@ -6637,11 +6647,13 @@ (define_insn "@aarch64_pred_" ;; Doubling the second operand is the preferred implementation ;; of the MOV alias, so we use that instead of %1/z, %1, %2. (define_insn "and3" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") - (and:PRED_ALL (match_operand:PRED_ALL 1 "register_operand" "Upa") - (match_operand:PRED_ALL 2 "register_operand" "Upa")))] + [(set (match_operand:PRED_ALL 0 "register_operand") + (and:PRED_ALL (match_operand:PRED_ALL 1 "register_operand") + (match_operand:PRED_ALL 2 "register_operand")))] "TARGET_SVE" - "and\t%0.b, %1/z, %2.b, %2.b" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, Upa ] and\t%0.b, %1/z, %2.b, %2.b + } ) ;; Unpredicated predicate EOR and ORR. @@ -6660,14 +6672,16 @@ (define_expand "3" ;; Predicated predicate AND, EOR and ORR. (define_insn "@aarch64_pred__z" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + [(set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (LOGICAL:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa") - (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 1 "register_operand" "Upa")))] + (match_operand:PRED_ALL 2 "register_operand") + (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - "\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + } ) ;; Perform a logical operation on operands 2 and 3, using operand 1 as @@ -6676,38 +6690,42 @@ (define_insn "@aarch64_pred__z" (define_insn "*3_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (LOGICAL:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa") - (match_operand:PRED_ALL 3 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand") + (match_operand:PRED_ALL 3 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + (set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (LOGICAL:PRED_ALL (match_dup 2) (match_dup 3)) (match_dup 4)))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same with just the flags result. (define_insn "*3_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (LOGICAL:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa") - (match_operand:PRED_ALL 3 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand") + (match_operand:PRED_ALL 3 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; ------------------------------------------------------------------------- @@ -6720,56 +6738,62 @@ (define_insn "*3_ptest" ;; Predicated predicate BIC and ORN. (define_insn "aarch64_pred__z" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + [(set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL - (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 2 "register_operand" "Upa")) - (match_operand:PRED_ALL 1 "register_operand" "Upa")))] + (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 2 "register_operand")) + (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - "\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + } ) ;; Same, but set the flags as a side-effect. (define_insn "*3_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 2 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + (set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL (match_dup 3)) (match_dup 2)) (match_dup 4)))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same with just the flags result. (define_insn "*3_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 2 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; ------------------------------------------------------------------------- @@ -6782,58 +6806,64 @@ (define_insn "*3_ptest" ;; Predicated predicate NAND and NOR. (define_insn "aarch64_pred__z" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + [(set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL - (not:PRED_ALL (match_operand:PRED_ALL 2 "register_operand" "Upa")) - (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand" "Upa"))) - (match_operand:PRED_ALL 1 "register_operand" "Upa")))] + (not:PRED_ALL (match_operand:PRED_ALL 2 "register_operand")) + (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand"))) + (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - "\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + } ) ;; Same, but set the flags as a side-effect. (define_insn "*3_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand")) (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa"))) + (match_operand:PRED_ALL 3 "register_operand"))) (match_dup 4))] UNSPEC_PTEST)) - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + (set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL (match_dup 2)) (not:PRED_ALL (match_dup 3))) (match_dup 4)))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same with just the flags result. (define_insn "*3_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand")) (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa"))) + (match_operand:PRED_ALL 3 "register_operand"))) (match_dup 4))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; ========================================================================= @@ -8133,12 +8163,12 @@ (define_insn_and_rewrite "*cmp_ptest" (match_operand:SVE_I 3 "aarch64_sve_cmp__operand"))] UNSPEC_PRED_Z)] UNSPEC_PTEST)) - (clobber (match_scratch: 0 "=Upa, Upa"))] + (clobber (match_scratch: 0))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - {@ [ cons: 1 , 2 , 3 ] - [ Upl , w , ] cmp\t%0., %1/z, %2., #%3 - [ Upl , w , w ] cmp\t%0., %1/z, %2., %3. + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upl, w , ] cmp\t%0., %1/z, %2., #%3 + [ Upa , Upl, w , w ] cmp\t%0., %1/z, %2., %3. } "&& !rtx_equal_p (operands[4], operands[6])" { @@ -8180,18 +8210,20 @@ (define_insn_and_split "*cmp_and" ;; Predicated integer wide comparisons. (define_insn "@aarch64_pred_cmp_wide" - [(set (match_operand: 0 "register_operand" "=Upa") + [(set (match_operand: 0 "register_operand") (unspec: - [(match_operand:VNx16BI 1 "register_operand" "Upl") + [(match_operand:VNx16BI 1 "register_operand") (match_operand:SI 2 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHSI 3 "register_operand" "w") - (match_operand:VNx2DI 4 "register_operand" "w")] + [(match_operand:SVE_FULL_BHSI 3 "register_operand") + (match_operand:VNx2DI 4 "register_operand")] SVE_COND_INT_CMP_WIDE)] UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE" - "cmp\t%0., %1/z, %3., %4.d" + {@ [ cons: =0, 1 , 2, 3, 4 ] + [ Upa , Upl, , w, w ] cmp\t%0., %1/z, %3., %4.d + } ) ;; Predicated integer wide comparisons in which both the flag and @@ -8199,19 +8231,19 @@ (define_insn "@aarch64_pred_cmp_wide" (define_insn "*aarch64_pred_cmp_wide_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upl") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:VNx16BI 6 "register_operand" "Upl") + [(match_operand:VNx16BI 6 "register_operand") (match_operand:SI 7 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHSI 2 "register_operand" "w") - (match_operand:VNx2DI 3 "register_operand" "w")] + [(match_operand:SVE_FULL_BHSI 2 "register_operand") + (match_operand:VNx2DI 3 "register_operand")] SVE_COND_INT_CMP_WIDE)] UNSPEC_PRED_Z)] UNSPEC_PTEST)) - (set (match_operand: 0 "register_operand" "=Upa") + (set (match_operand: 0 "register_operand") (unspec: [(match_dup 6) (match_dup 7) @@ -8222,7 +8254,9 @@ (define_insn "*aarch64_pred_cmp_wide_cc" UNSPEC_PRED_Z))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - "cmp\t%0., %1/z, %2., %3.d" + {@ [ cons: =0, 1 , 2, 3, 4, 5, 6 , 7 ] + [ Upa , Upl, w, w, , , Upl, ] cmp\t%0., %1/z, %2., %3.d + } ) ;; Predicated integer wide comparisons in which only the flags result @@ -8230,22 +8264,24 @@ (define_insn "*aarch64_pred_cmp_wide_cc" (define_insn "*aarch64_pred_cmp_wide_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upl") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:VNx16BI 6 "register_operand" "Upl") + [(match_operand:VNx16BI 6 "register_operand") (match_operand:SI 7 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHSI 2 "register_operand" "w") - (match_operand:VNx2DI 3 "register_operand" "w")] + [(match_operand:SVE_FULL_BHSI 2 "register_operand") + (match_operand:VNx2DI 3 "register_operand")] SVE_COND_INT_CMP_WIDE)] UNSPEC_PRED_Z)] UNSPEC_PTEST)) - (clobber (match_scratch: 0 "=Upa"))] + (clobber (match_scratch: 0))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - "cmp\t%0., %1/z, %2., %3.d" + {@ [ cons: =0, 1 , 2, 3, 4, 5, 6 , 7 ] + [ Upa , Upl, w, w, , , Upl, ] cmp\t%0., %1/z, %2., %3.d + } ) ;; ------------------------------------------------------------------------- @@ -9922,41 +9958,45 @@ (define_insn "@aarch64_brk" (define_insn "*aarch64_brk_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") + (match_operand:VNx16BI 2 "register_operand") (match_operand:VNx16BI 3 "aarch64_simd_imm_zero")] SVE_BRK_UNARY)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI [(match_dup 1) (match_dup 2) (match_dup 3)] SVE_BRK_UNARY))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b" + {@ [ cons: =0, 1 , 2 , 3, 4 ] + [ Upa , Upa, Upa, , ] brks\t%0.b, %1/z, %2.b + } ) ;; Same, but with only the flags result being interesting. (define_insn "*aarch64_brk_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") + (match_operand:VNx16BI 2 "register_operand") (match_operand:VNx16BI 3 "aarch64_simd_imm_zero")] SVE_BRK_UNARY)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b" + {@ [ cons: =0, 1 , 2 , 3, 4 ] + [ Upa , Upa, Upa, , ] brks\t%0.b, %1/z, %2.b + } ) ;; ------------------------------------------------------------------------- @@ -9973,14 +10013,16 @@ (define_insn "*aarch64_brk_ptest" ;; Binary BRKs (BRKN, BRKPA, BRKPB). (define_insn "@aarch64_brk" - [(set (match_operand:VNx16BI 0 "register_operand" "=Upa") + [(set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI - [(match_operand:VNx16BI 1 "register_operand" "Upa") - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "")] + [(match_operand:VNx16BI 1 "register_operand") + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] SVE_BRK_BINARY))] "TARGET_SVE" - "brk\t%0.b, %1/z, %2.b, %.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, ] brk\t%0.b, %1/z, %2.b, %.b + } ) ;; BRKN, producing both a predicate and a flags result. Unlike other @@ -9992,19 +10034,21 @@ (define_insn_and_rewrite "*aarch64_brkn_cc" (match_operand:VNx16BI 5) (const_int SVE_KNOWN_PTRUE) (unspec:VNx16BI - [(match_operand:VNx16BI 1 "register_operand" "Upa") - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "0")] + [(match_operand:VNx16BI 1 "register_operand") + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] UNSPEC_BRKN)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI [(match_dup 1) (match_dup 2) (match_dup 3)] UNSPEC_BRKN))] "TARGET_SVE" - "brkns\t%0.b, %1/z, %2.b, %0.b" + {@ [ cons: =0, 1 , 2 , 3, 4, 5 ] + [ Upa , Upa, Upa, 0, , ] brkns\t%0.b, %1/z, %2.b, %0.b + } "&& (operands[4] != CONST0_RTX (VNx16BImode) || operands[5] != CONST0_RTX (VNx16BImode))" { @@ -10021,14 +10065,16 @@ (define_insn_and_rewrite "*aarch64_brkn_ptest" (match_operand:VNx16BI 5) (const_int SVE_KNOWN_PTRUE) (unspec:VNx16BI - [(match_operand:VNx16BI 1 "register_operand" "Upa") - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "0")] + [(match_operand:VNx16BI 1 "register_operand") + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] UNSPEC_BRKN)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "brkns\t%0.b, %1/z, %2.b, %0.b" + {@ [ cons: =0, 1 , 2 , 3, 4, 5 ] + [ Upa , Upa, Upa, 0, , ] brkns\t%0.b, %1/z, %2.b, %0.b + } "&& (operands[4] != CONST0_RTX (VNx16BImode) || operands[5] != CONST0_RTX (VNx16BImode))" { @@ -10041,41 +10087,45 @@ (define_insn_and_rewrite "*aarch64_brkn_ptest" (define_insn "*aarch64_brk_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "Upa")] + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] SVE_BRKP)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI [(match_dup 1) (match_dup 2) (match_dup 3)] SVE_BRKP))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4 ] + [ Upa , Upa, Upa, Upa, ] brks\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same, but with only the flags result being interesting. (define_insn "*aarch64_brk_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "Upa")] + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] SVE_BRKP)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4 ] + [ Upa , Upa, Upa, Upa, ] brks\t%0.b, %1/z, %2.b, %3.b + } ) ;; ------------------------------------------------------------------------- diff --git a/gcc/config/aarch64/aarch64-sve2.md b/gcc/config/aarch64/aarch64-sve2.md index 934e57055d3419e5dcc89b473fd110a0d4978b4f..aa12baf48355358ca4fefe88157df3aac6eb09bd 100644 --- a/gcc/config/aarch64/aarch64-sve2.md +++ b/gcc/config/aarch64/aarch64-sve2.md @@ -3338,18 +3338,20 @@ (define_insn "@aarch64_sve2_histseg" ;; Predicated string matching. (define_insn "@aarch64_pred_" - [(set (match_operand: 0 "register_operand" "=Upa") + [(set (match_operand: 0 "register_operand") (unspec: - [(match_operand: 1 "register_operand" "Upl") + [(match_operand: 1 "register_operand") (match_operand:SI 2 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHI 3 "register_operand" "w") - (match_operand:SVE_FULL_BHI 4 "register_operand" "w")] + [(match_operand:SVE_FULL_BHI 3 "register_operand") + (match_operand:SVE_FULL_BHI 4 "register_operand")] SVE2_MATCH)] UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE2 && TARGET_NON_STREAMING" - "\t%0., %1/z, %3., %4." + {@ [ cons: =0, 1 , 2, 3, 4 ] + [ Upa , Upl, , w, w ] \t%0., %1/z, %3., %4. + } ) ;; Predicated string matching in which both the flag and predicate results -- --+nCpBuEHvZ8RTMmk Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename="rb18354.patch" diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index 0434358122d2fde71bd0e0f850338e739e9be02c..839ab0627747d7a49bef7b0192ee9e7a42587ca0 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -1156,76 +1156,86 @@ (define_insn "aarch64_rdffr" ;; Likewise with zero predication. (define_insn "aarch64_rdffr_z" - [(set (match_operand:VNx16BI 0 "register_operand" "=Upa") + [(set (match_operand:VNx16BI 0 "register_operand") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) - (match_operand:VNx16BI 1 "register_operand" "Upa")))] + (match_operand:VNx16BI 1 "register_operand")))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffr\t%0.b, %1/z" + {@ [ cons: =0, 1 ] + [ Upa , Upa ] rdffr\t%0.b, %1/z + } ) ;; Read the FFR to test for a fault, without using the predicate result. (define_insn "*aarch64_rdffr_z_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 2 "aarch64_sve_ptrue_flag") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. (define_insn "*aarch64_rdffr_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (const_int SVE_KNOWN_PTRUE) (reg:VNx16BI FFRT_REGNUM)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 ] + [ Upa , Upa ] rdffrs\t%0.b, %1/z + } ) ;; Read the FFR with zero predication and test the result. (define_insn "*aarch64_rdffr_z_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 2 "aarch64_sve_ptrue_flag") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1))] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (and:VNx16BI (reg:VNx16BI FFRT_REGNUM) (match_dup 1)))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. (define_insn "*aarch64_rdffr_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (const_int SVE_KNOWN_PTRUE) (reg:VNx16BI FFRT_REGNUM)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (reg:VNx16BI FFRT_REGNUM))] "TARGET_SVE && TARGET_NON_STREAMING" - "rdffrs\t%0.b, %1/z" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, ] rdffrs\t%0.b, %1/z + } ) ;; [R3 in the block comment above about FFR handling] @@ -6637,11 +6647,13 @@ (define_insn "@aarch64_pred_" ;; Doubling the second operand is the preferred implementation ;; of the MOV alias, so we use that instead of %1/z, %1, %2. (define_insn "and3" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") - (and:PRED_ALL (match_operand:PRED_ALL 1 "register_operand" "Upa") - (match_operand:PRED_ALL 2 "register_operand" "Upa")))] + [(set (match_operand:PRED_ALL 0 "register_operand") + (and:PRED_ALL (match_operand:PRED_ALL 1 "register_operand") + (match_operand:PRED_ALL 2 "register_operand")))] "TARGET_SVE" - "and\t%0.b, %1/z, %2.b, %2.b" + {@ [ cons: =0, 1 , 2 ] + [ Upa , Upa, Upa ] and\t%0.b, %1/z, %2.b, %2.b + } ) ;; Unpredicated predicate EOR and ORR. @@ -6660,14 +6672,16 @@ (define_expand "3" ;; Predicated predicate AND, EOR and ORR. (define_insn "@aarch64_pred__z" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + [(set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (LOGICAL:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa") - (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 1 "register_operand" "Upa")))] + (match_operand:PRED_ALL 2 "register_operand") + (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - "\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + } ) ;; Perform a logical operation on operands 2 and 3, using operand 1 as @@ -6676,38 +6690,42 @@ (define_insn "@aarch64_pred__z" (define_insn "*3_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (LOGICAL:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa") - (match_operand:PRED_ALL 3 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand") + (match_operand:PRED_ALL 3 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + (set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (LOGICAL:PRED_ALL (match_dup 2) (match_dup 3)) (match_dup 4)))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same with just the flags result. (define_insn "*3_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (LOGICAL:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa") - (match_operand:PRED_ALL 3 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand") + (match_operand:PRED_ALL 3 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; ------------------------------------------------------------------------- @@ -6720,56 +6738,62 @@ (define_insn "*3_ptest" ;; Predicated predicate BIC and ORN. (define_insn "aarch64_pred__z" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + [(set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL - (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 2 "register_operand" "Upa")) - (match_operand:PRED_ALL 1 "register_operand" "Upa")))] + (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 2 "register_operand")) + (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - "\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + } ) ;; Same, but set the flags as a side-effect. (define_insn "*3_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 2 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + (set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL (match_dup 3)) (match_dup 2)) (match_dup 4)))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same with just the flags result. (define_insn "*3_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa")) - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 3 "register_operand")) + (match_operand:PRED_ALL 2 "register_operand")) (match_dup 4))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; ------------------------------------------------------------------------- @@ -6782,58 +6806,64 @@ (define_insn "*3_ptest" ;; Predicated predicate NAND and NOR. (define_insn "aarch64_pred__z" - [(set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + [(set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL - (not:PRED_ALL (match_operand:PRED_ALL 2 "register_operand" "Upa")) - (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand" "Upa"))) - (match_operand:PRED_ALL 1 "register_operand" "Upa")))] + (not:PRED_ALL (match_operand:PRED_ALL 2 "register_operand")) + (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand"))) + (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - "\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + } ) ;; Same, but set the flags as a side-effect. (define_insn "*3_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand")) (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa"))) + (match_operand:PRED_ALL 3 "register_operand"))) (match_dup 4))] UNSPEC_PTEST)) - (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") + (set (match_operand:PRED_ALL 0 "register_operand") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL (match_dup 2)) (not:PRED_ALL (match_dup 3))) (match_dup 4)))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same with just the flags result. (define_insn "*3_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (and:PRED_ALL (NLOGICAL:PRED_ALL (not:PRED_ALL - (match_operand:PRED_ALL 2 "register_operand" "Upa")) + (match_operand:PRED_ALL 2 "register_operand")) (not:PRED_ALL - (match_operand:PRED_ALL 3 "register_operand" "Upa"))) + (match_operand:PRED_ALL 3 "register_operand"))) (match_dup 4))] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "s\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4, 5 ] + [ Upa , Upa, Upa, Upa, , ] s\t%0.b, %1/z, %2.b, %3.b + } ) ;; ========================================================================= @@ -8133,12 +8163,12 @@ (define_insn_and_rewrite "*cmp_ptest" (match_operand:SVE_I 3 "aarch64_sve_cmp__operand"))] UNSPEC_PRED_Z)] UNSPEC_PTEST)) - (clobber (match_scratch: 0 "=Upa, Upa"))] + (clobber (match_scratch: 0))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - {@ [ cons: 1 , 2 , 3 ] - [ Upl , w , ] cmp\t%0., %1/z, %2., #%3 - [ Upl , w , w ] cmp\t%0., %1/z, %2., %3. + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upl, w , ] cmp\t%0., %1/z, %2., #%3 + [ Upa , Upl, w , w ] cmp\t%0., %1/z, %2., %3. } "&& !rtx_equal_p (operands[4], operands[6])" { @@ -8180,18 +8210,20 @@ (define_insn_and_split "*cmp_and" ;; Predicated integer wide comparisons. (define_insn "@aarch64_pred_cmp_wide" - [(set (match_operand: 0 "register_operand" "=Upa") + [(set (match_operand: 0 "register_operand") (unspec: - [(match_operand:VNx16BI 1 "register_operand" "Upl") + [(match_operand:VNx16BI 1 "register_operand") (match_operand:SI 2 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHSI 3 "register_operand" "w") - (match_operand:VNx2DI 4 "register_operand" "w")] + [(match_operand:SVE_FULL_BHSI 3 "register_operand") + (match_operand:VNx2DI 4 "register_operand")] SVE_COND_INT_CMP_WIDE)] UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE" - "cmp\t%0., %1/z, %3., %4.d" + {@ [ cons: =0, 1 , 2, 3, 4 ] + [ Upa , Upl, , w, w ] cmp\t%0., %1/z, %3., %4.d + } ) ;; Predicated integer wide comparisons in which both the flag and @@ -8199,19 +8231,19 @@ (define_insn "@aarch64_pred_cmp_wide" (define_insn "*aarch64_pred_cmp_wide_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upl") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:VNx16BI 6 "register_operand" "Upl") + [(match_operand:VNx16BI 6 "register_operand") (match_operand:SI 7 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHSI 2 "register_operand" "w") - (match_operand:VNx2DI 3 "register_operand" "w")] + [(match_operand:SVE_FULL_BHSI 2 "register_operand") + (match_operand:VNx2DI 3 "register_operand")] SVE_COND_INT_CMP_WIDE)] UNSPEC_PRED_Z)] UNSPEC_PTEST)) - (set (match_operand: 0 "register_operand" "=Upa") + (set (match_operand: 0 "register_operand") (unspec: [(match_dup 6) (match_dup 7) @@ -8222,7 +8254,9 @@ (define_insn "*aarch64_pred_cmp_wide_cc" UNSPEC_PRED_Z))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - "cmp\t%0., %1/z, %2., %3.d" + {@ [ cons: =0, 1 , 2, 3, 4, 5, 6 , 7 ] + [ Upa , Upl, w, w, , , Upl, ] cmp\t%0., %1/z, %2., %3.d + } ) ;; Predicated integer wide comparisons in which only the flags result @@ -8230,22 +8264,24 @@ (define_insn "*aarch64_pred_cmp_wide_cc" (define_insn "*aarch64_pred_cmp_wide_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upl") + [(match_operand:VNx16BI 1 "register_operand") (match_operand 4) (match_operand:SI 5 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:VNx16BI 6 "register_operand" "Upl") + [(match_operand:VNx16BI 6 "register_operand") (match_operand:SI 7 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHSI 2 "register_operand" "w") - (match_operand:VNx2DI 3 "register_operand" "w")] + [(match_operand:SVE_FULL_BHSI 2 "register_operand") + (match_operand:VNx2DI 3 "register_operand")] SVE_COND_INT_CMP_WIDE)] UNSPEC_PRED_Z)] UNSPEC_PTEST)) - (clobber (match_scratch: 0 "=Upa"))] + (clobber (match_scratch: 0))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - "cmp\t%0., %1/z, %2., %3.d" + {@ [ cons: =0, 1 , 2, 3, 4, 5, 6 , 7 ] + [ Upa , Upl, w, w, , , Upl, ] cmp\t%0., %1/z, %2., %3.d + } ) ;; ------------------------------------------------------------------------- @@ -9922,41 +9958,45 @@ (define_insn "@aarch64_brk" (define_insn "*aarch64_brk_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") + (match_operand:VNx16BI 2 "register_operand") (match_operand:VNx16BI 3 "aarch64_simd_imm_zero")] SVE_BRK_UNARY)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI [(match_dup 1) (match_dup 2) (match_dup 3)] SVE_BRK_UNARY))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b" + {@ [ cons: =0, 1 , 2 , 3, 4 ] + [ Upa , Upa, Upa, , ] brks\t%0.b, %1/z, %2.b + } ) ;; Same, but with only the flags result being interesting. (define_insn "*aarch64_brk_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") + (match_operand:VNx16BI 2 "register_operand") (match_operand:VNx16BI 3 "aarch64_simd_imm_zero")] SVE_BRK_UNARY)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b" + {@ [ cons: =0, 1 , 2 , 3, 4 ] + [ Upa , Upa, Upa, , ] brks\t%0.b, %1/z, %2.b + } ) ;; ------------------------------------------------------------------------- @@ -9973,14 +10013,16 @@ (define_insn "*aarch64_brk_ptest" ;; Binary BRKs (BRKN, BRKPA, BRKPB). (define_insn "@aarch64_brk" - [(set (match_operand:VNx16BI 0 "register_operand" "=Upa") + [(set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI - [(match_operand:VNx16BI 1 "register_operand" "Upa") - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "")] + [(match_operand:VNx16BI 1 "register_operand") + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] SVE_BRK_BINARY))] "TARGET_SVE" - "brk\t%0.b, %1/z, %2.b, %.b" + {@ [ cons: =0, 1 , 2 , 3 ] + [ Upa , Upa, Upa, ] brk\t%0.b, %1/z, %2.b, %.b + } ) ;; BRKN, producing both a predicate and a flags result. Unlike other @@ -9992,19 +10034,21 @@ (define_insn_and_rewrite "*aarch64_brkn_cc" (match_operand:VNx16BI 5) (const_int SVE_KNOWN_PTRUE) (unspec:VNx16BI - [(match_operand:VNx16BI 1 "register_operand" "Upa") - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "0")] + [(match_operand:VNx16BI 1 "register_operand") + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] UNSPEC_BRKN)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI [(match_dup 1) (match_dup 2) (match_dup 3)] UNSPEC_BRKN))] "TARGET_SVE" - "brkns\t%0.b, %1/z, %2.b, %0.b" + {@ [ cons: =0, 1 , 2 , 3, 4, 5 ] + [ Upa , Upa, Upa, 0, , ] brkns\t%0.b, %1/z, %2.b, %0.b + } "&& (operands[4] != CONST0_RTX (VNx16BImode) || operands[5] != CONST0_RTX (VNx16BImode))" { @@ -10021,14 +10065,16 @@ (define_insn_and_rewrite "*aarch64_brkn_ptest" (match_operand:VNx16BI 5) (const_int SVE_KNOWN_PTRUE) (unspec:VNx16BI - [(match_operand:VNx16BI 1 "register_operand" "Upa") - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "0")] + [(match_operand:VNx16BI 1 "register_operand") + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] UNSPEC_BRKN)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "brkns\t%0.b, %1/z, %2.b, %0.b" + {@ [ cons: =0, 1 , 2 , 3, 4, 5 ] + [ Upa , Upa, Upa, 0, , ] brkns\t%0.b, %1/z, %2.b, %0.b + } "&& (operands[4] != CONST0_RTX (VNx16BImode) || operands[5] != CONST0_RTX (VNx16BImode))" { @@ -10041,41 +10087,45 @@ (define_insn_and_rewrite "*aarch64_brkn_ptest" (define_insn "*aarch64_brk_cc" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "Upa")] + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] SVE_BRKP)] UNSPEC_PTEST)) - (set (match_operand:VNx16BI 0 "register_operand" "=Upa") + (set (match_operand:VNx16BI 0 "register_operand") (unspec:VNx16BI [(match_dup 1) (match_dup 2) (match_dup 3)] SVE_BRKP))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4 ] + [ Upa , Upa, Upa, Upa, ] brks\t%0.b, %1/z, %2.b, %3.b + } ) ;; Same, but with only the flags result being interesting. (define_insn "*aarch64_brk_ptest" [(set (reg:CC_NZC CC_REGNUM) (unspec:CC_NZC - [(match_operand:VNx16BI 1 "register_operand" "Upa") + [(match_operand:VNx16BI 1 "register_operand") (match_dup 1) (match_operand:SI 4 "aarch64_sve_ptrue_flag") (unspec:VNx16BI [(match_dup 1) - (match_operand:VNx16BI 2 "register_operand" "Upa") - (match_operand:VNx16BI 3 "register_operand" "Upa")] + (match_operand:VNx16BI 2 "register_operand") + (match_operand:VNx16BI 3 "register_operand")] SVE_BRKP)] UNSPEC_PTEST)) - (clobber (match_scratch:VNx16BI 0 "=Upa"))] + (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - "brks\t%0.b, %1/z, %2.b, %3.b" + {@ [ cons: =0, 1 , 2 , 3 , 4 ] + [ Upa , Upa, Upa, Upa, ] brks\t%0.b, %1/z, %2.b, %3.b + } ) ;; ------------------------------------------------------------------------- diff --git a/gcc/config/aarch64/aarch64-sve2.md b/gcc/config/aarch64/aarch64-sve2.md index 934e57055d3419e5dcc89b473fd110a0d4978b4f..aa12baf48355358ca4fefe88157df3aac6eb09bd 100644 --- a/gcc/config/aarch64/aarch64-sve2.md +++ b/gcc/config/aarch64/aarch64-sve2.md @@ -3338,18 +3338,20 @@ (define_insn "@aarch64_sve2_histseg" ;; Predicated string matching. (define_insn "@aarch64_pred_" - [(set (match_operand: 0 "register_operand" "=Upa") + [(set (match_operand: 0 "register_operand") (unspec: - [(match_operand: 1 "register_operand" "Upl") + [(match_operand: 1 "register_operand") (match_operand:SI 2 "aarch64_sve_ptrue_flag") (unspec: - [(match_operand:SVE_FULL_BHI 3 "register_operand" "w") - (match_operand:SVE_FULL_BHI 4 "register_operand" "w")] + [(match_operand:SVE_FULL_BHI 3 "register_operand") + (match_operand:SVE_FULL_BHI 4 "register_operand")] SVE2_MATCH)] UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE2 && TARGET_NON_STREAMING" - "\t%0., %1/z, %3., %4." + {@ [ cons: =0, 1 , 2, 3, 4 ] + [ Upa , Upl, , w, w ] \t%0., %1/z, %3., %4. + } ) ;; Predicated string matching in which both the flag and predicate results --+nCpBuEHvZ8RTMmk--