From patchwork Wed May 22 09:29:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1937728 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Lz8mVCwu; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Lz8mVCwu; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VkmJX4Hn1z20PS for ; Wed, 22 May 2024 19:31:08 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5B450386587A for ; Wed, 22 May 2024 09:31:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2066.outbound.protection.outlook.com [40.107.105.66]) by sourceware.org (Postfix) with ESMTPS id 2CEFF38654B2; Wed, 22 May 2024 09:30:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2CEFF38654B2 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 2CEFF38654B2 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.105.66 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1716370208; cv=pass; b=GGR3u7r2S1bZ/080MdDkiaT91AcxKAwDGmcjg3K7xoeC1NMPiRI2E/ly5i1nBtEN2lmyDtqTcapGvlbJkVzmy7xtZKwclPv7tM9mNavsuIfIFFdaRj7AkhwNyuJmoqTll8MalPs/RItP/CeLp/ZEafmKdUDba0ssDG8oYpj26jY= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1716370208; c=relaxed/simple; bh=vBCpikYCeagojHHfX3o0aKg8gG7vgs8KnJvF2VfOFYA=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=mVUog0jP0Jv/Rn9Xbjno7pgitAUDE7fWb1mk1RU+pdvJdkJZz5SQASKqn7m82gOIUqVnOYh1Uere2ayQv3jwbbL+yLH1juJPUnA/lfgVCHbPavtn0arIqtPKeRTGuZUBV4iAjq6UJKZy5m/4FJjT16SIj69rntsN3cJKcTVfbg4= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=ic4Z63ooOiBDSu+YSBaw3szyk6NzK0Q5DoRQJbputOCa9j/Vjuygb88I4ry9K0knx+uJWDlfm1nJZf6HgwNU5iPlfJvBI2BemjEIanMrWiorLESELMkwiSX3RPvjlMGbi8tWHakgUZeWoYUNXxwm21rNstg/Gdx7EoT2WFgI0fbrx4PQwbo87wqRoNOTxSZFqXnNxmVPke2QXCMU+H+XKRf5JBfmNrorroU2pGV7MIZrOQbSZXocFqv9CSWgur10X43XJpPA/2Yc7fFbKmwmhyGDed+lad5ZbIy2gFWQwnToXBeIf31IyeW9VbvFsstC/F72LtabdjocABMq0c/b/Q== 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=fVUN9VvkN6j5zpFtmjoUWN7HgWWhLALJXhoJKnSFI6o=; b=eGvMeLpGW7ZGS3gzYIEruIo6hM6sL51UCc3Djc39DLeGctC8u+ZoUACj7rcNzgp9r1DZ0UHQUx3ahG1tAnsUQirY8uPIfYIoiINvQ/MuKBbLDVG/Vmm6OP+Zz7WaeeQSQYF9uAMQI06+fMvjmKK95NwIDobyKQplHzZu4TaPBZxrDmc9CdzghqWL6T0Q0UbBm2NeRnEygr4S2Ok2Cc1LfHRO/6D0OX7XmV8AAklj+oWTVW3/NtVvoBlXBj7Zb3/ElDySj9eH83NlJ6PsFyEhJOvPdSqHDb9hE1KdLXDIPA8dJMrgr5Lk4m5fmEN021QaHFR+bLewoRX0QymjvtFdwQ== 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=fVUN9VvkN6j5zpFtmjoUWN7HgWWhLALJXhoJKnSFI6o=; b=Lz8mVCwuoLWlJiWJAm9QhFIONHxucG9OaiLSU+5igB2/8EDkGFPySRuie4rDiN4kkFp/Z1/qrPwQH/knw7BdEpldKPn42mwtG8HWxdVjK+8iaITJdKYUN8qh6PIf/74ok7NLbsqEdA5xLriLiWTBE61y9QkUyzd4a9TAjiX7n1o= Received: from DUZPR01CA0162.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bd::10) by GV2PR08MB9422.eurprd08.prod.outlook.com (2603:10a6:150:dd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.19; Wed, 22 May 2024 09:29:55 +0000 Received: from DB1PEPF000509EB.eurprd03.prod.outlook.com (2603:10a6:10:4bd:cafe::f8) by DUZPR01CA0162.outlook.office365.com (2603:10a6:10:4bd::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.35 via Frontend Transport; Wed, 22 May 2024 09:29:54 +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 DB1PEPF000509EB.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7587.21 via Frontend Transport; Wed, 22 May 2024 09:29:54 +0000 Received: ("Tessian outbound 2fd40f2ccfd7:v327"); Wed, 22 May 2024 09:29:54 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 25f3c2f795eef660 X-CR-MTA-TID: 64aa7808 Received: from 712f4c1e2f72.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 08D586E5-DDEC-4103-9F37-C3822953E0B5.1; Wed, 22 May 2024 09:29:46 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 712f4c1e2f72.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 22 May 2024 09:29:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kjuw1xnJ1h78EU3DitygwYd2AgdW1UOqIx1TzksgKDb+3Y6QdG2Qex19xmI/WZdaBCJFoTFFGFmbsHuRnFZA3FGs++1Tmo6IPDfovLmeNlIbq5e2NVUDyRIcmcKDIflR9cQm6hSnimQZbF16jThxIG3awmWbpbTAfxy4oOOJ6qhNzpN4ZCvdN7ujgZ2UUGiUaOgYvmlLAXtT0/IrOnVY1z9FpqiS6yzJeqLtNCjBZdFBi5lyGqCWrz98sl3qwQBnbg6+cImhBFeVX66mcfMddbvCtfMCV+3P1BeTFFXgSGaDdD9IWaByQuVFnEZp2o0FE0Ti5Glw1dMwrXHQwxaxig== 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=fVUN9VvkN6j5zpFtmjoUWN7HgWWhLALJXhoJKnSFI6o=; b=VdfQ11rj0jyZT52Xrm9eWTvY2V5h8H52T/S/YS8qH0MILgaFJejBBRoaF0EtEP2GyrAxlOjrlKynXSGqfXpCon3Q4K1xph9T8Ti8yHpOhHrCL1cUt/g2yarbnW8aLw5cNI+Mllmgrg9LMcdeOaQ3UqXKyH0XH78qQmNQGn9GXxBz2QD9ABOl1J9oY0PfdBKVz6xWWyktyG5eTwKqKNMUXTcbwaQo3jJRHrvhDG730tbkMLKEe9sHNQtNRNc6A+Nsek4mfMtrzVhgwNozGOrvYteKyEZqE0yIQMxWbrYyAQWWn5Uyjt+y8w2X4L0bkom0kPQY5EM0X70iypYzGXhWqA== 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=fVUN9VvkN6j5zpFtmjoUWN7HgWWhLALJXhoJKnSFI6o=; b=Lz8mVCwuoLWlJiWJAm9QhFIONHxucG9OaiLSU+5igB2/8EDkGFPySRuie4rDiN4kkFp/Z1/qrPwQH/knw7BdEpldKPn42mwtG8HWxdVjK+8iaITJdKYUN8qh6PIf/74ok7NLbsqEdA5xLriLiWTBE61y9QkUyzd4a9TAjiX7n1o= 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 DU0PR08MB10368.eurprd08.prod.outlook.com (2603:10a6:10:408::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.36; Wed, 22 May 2024 09:29:44 +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.7611.016; Wed, 22 May 2024 09:29:44 +0000 Date: Wed, 22 May 2024 10:29:40 +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 3/4]AArch64: add new alternative with early clobber to patterns Message-ID: Content-Disposition: inline X-ClientProxiedBy: LO4P123CA0375.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::20) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB5325:EE_|DU0PR08MB10368:EE_|DB1PEPF000509EB:EE_|GV2PR08MB9422:EE_ X-MS-Office365-Filtering-Correlation-Id: 8862cf3e-b673-4582-8143-08dc7a41bd46 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230031|366007|1800799015|376005; X-Microsoft-Antispam-Message-Info-Original: zHwHM8wLNZKs3jrD9AEVxhDnUhMePBeCgjdE7qXlewlP1hgCMQ5AXrQRJbYhCUjv6XI1masLRROGB9v5fc0wXs8fzsjZgplL3nr7h71i78Z4RxWH8GOEq3vqeneooWQLjFLWaggNhzUUx+dF5S+Cm/mAnjfv1Zs2/yqXavEOQidid8p/brvBOUgSaRRspfyKYj+IdaSRa/zmXldnm1Z11F9JCI4Ki/Vt3QZzuBrN7VhgUWDvEk3IeNAZ81kLT7cDlkn/F5pWso5YDvcT3d1l6mu8I4tOplKZiQL2JJy4jMpCO/xa8r6Mh8QODc1oT8G9USqqqy7HEdVsph5pjl0oEQLuoD8cnXrue/KnovzpgvvsMtwYg1Q2yhsRwaF7p7/cCPEdtO1WyK9G05lYCIvdRqIJbbuSiLDmvAjEjmh1io5Sw6L8YgNC+N6e+g7g3sOXhgpYwVMth2KbE8yO2m7lKr1SaiSZU0Fkm8GQiUHyABnHVyG2xaF745q2Ad2Dz9A6k5ClT7d+N2W+PX7GGeLbuUP82knlEBCnSuWLunuBTUg2qK/3qAELlaMcRjUacBm+FDH28KqpOD2k/38cHSKMxMsUVpAaeRau2FQRszfQcrPFCCB7sKuN65E8T/iQDGBKQzZJYmM7XQDj7YNqdkspvB3YYeuRpdSdJ/7t1rAdhk3qLRvgdsBl3KoxXCtuEwhV3S/EtH88YB8FCFD5VUL/2ewow/O+3FDVBDwqEn3rsGLr0lNI7wNcE5xBjmk5gW/PfZDm+vL0gEcCJS3smSKoZbxkA4XA1aGk4Nv6KhpmDUFfwnRARxFEhQ05WYHCpnXvedDJ9DRa9Dugx+F+mfiPfFWnul28MLFEo2cvBwDkhGG6XiQxru4wBSO1Rr2OJlMYDxAMoosCcTUG9sZnxzXhnzv9/5HOP6va89/gNoNbYm4dnRuUS7hTKqLd0TpJQDn/P6ri15CRDdg+Aj+pag101hLJwIDIdGd1QPqMrT2DPCE/UuWPfbUhQNJDmbORpQiCBc5GOwhxJHWnpAwxQT+eWs8C7h4WC6sRNBF+OyKNq+XeJa70opZOWz/0EjD1jCFzlWEtJYZDPyGg5kwhNOY+mViIOFKtM1l2L3X+/XDvlhO1JIFp0wCxD2cAbKxJqhGIScWf4rMN4iIoYgNSxwY7sHEnA3bu7eYQUu3sv2J3/XSg2aNEzF7ChNlA73aUundUprvZ8SGqyoMgUJD0Q0dWcT1aA84+pMMEPqyGZ6OqjeDzaKgYKcpU/8L+lEHMLiUAr39LE65M+iZoqM+aTVq5XA== 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)(366007)(1800799015)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB10368 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: DB1PEPF000509EB.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 93271fa7-c34f-4040-8898-08dc7a41b6d2 X-Microsoft-Antispam: BCL:0; ARA:13230031|35042699013|82310400017|1800799015|376005|36860700004; X-Microsoft-Antispam-Message-Info: =?utf-8?q?BZiCFNmb8GNgI2MPZ+DmueCFlLJx/3l?= =?utf-8?q?OKUbIzA6sfn7T3syeyyqMmj7gRn6GINK2wBNHdjClIXfSUo1APuIsRyxITbB9B7qb?= =?utf-8?q?Jd31WQmtbt7aGmnWw+5MAYdP37GSm/Tpxkz7SxiAoBm/DayFml3HAxX94aFW3DTyu?= =?utf-8?q?gSSOHyb6PVLAfgYlSYrcPqLEGFvPDU838SoTDOlAbJR3nFdhYcOLMHotcPSYtkf3L?= =?utf-8?q?TE4lEwtpipkkOxX6vKry24OAHwIvwO1iLGZFC1UWSZpMJPMKkGDiKSKm2vniMFmNc?= =?utf-8?q?2i02jyYcgaJWZspTvPZML6Z/+MKCp0YKufhabYu8tIhuZS+SDoTFwx0ZLi1R/KnEm?= =?utf-8?q?E10pGW2161IXy51QFnuXSKxrJWHvpn+5xzEE9g9lchmVzAs1OgGWrs//z5JHSLCow?= =?utf-8?q?VYfnkYEU1QEUmknX9eZ7ny+y1tJjeBMobY/Bdtf8ao0viI9iH4KG9yD7gfh0kY8vv?= =?utf-8?q?rrT/HHOSyzCCPqfygW8pz1IKl5Hmya5u4qIjrj3ZkTvgOI/aGO5jCW7XQVjmadb27?= =?utf-8?q?TNxiYdiKDYrDZ1goN5muFjLRBbfM9Iank5CUzd6H1Oh8niZcQns13jdsBkF9KR9jX?= =?utf-8?q?oYx0ZY0SZbTqnzcPBuLqC+8y/txEQr3GAiZtleNJg6oDFHA2vmz93ElS7IeEzrjSz?= =?utf-8?q?DntYM+VO0NYzuMMqg+WQfzLz9JiJ4tXJd7oYAYjde7wHwrLePhoTyYtAKclChQpA/?= =?utf-8?q?4fT+5tY3MxsMsBHOzqdbbLfoZ7LMvKdXqmx5VBs+0LzAJTYCISk4ZzzmkrAcp+HIW?= =?utf-8?q?pDR90461W+jX/ZV6N/9QHMdrPM8ygE5yGP/zwudab4P3D3etmPwjRIV35413w+GYl?= =?utf-8?q?Tvc+vIBpRBk5hlNx+wgiliN1QsjmXKFpBOkg6gymzCu/eyCAc3Sj+3L1Gvsn9Ju6z?= =?utf-8?q?MqotVLhoy6ChnQjJEOdOxJQOJ2dbBQbDExCmJH4iUn2M13zY8WsQ7EcnIa5jt4MEZ?= =?utf-8?q?jRf5Ywhyh5v4b0RxSUvEakXDKH+i64oxB5y7mxJYa3tfes+uBzHj9jEB1IxYFwNfm?= =?utf-8?q?7mjHXIOhO1TslufFE4LW77KTO+ZHhkXSXK3/8vVMDCjydQqktk3lLmOS7sLpUrESr?= =?utf-8?q?mnun9pzZHHnXb42WA87TzHCAF+VjSRNaLylfBnjn67Ly2eRXPoa4SDKXGbjJiQetY?= =?utf-8?q?SNdxdRCEabLG2i5qcNRceqLC9ethC+bRrTpVgrVmD1ukUQPsI8d6cVTuq1km6qfh4?= =?utf-8?q?E3ashoUXhjX5BPWjUbmP1FmkWZUgBjrct73/KXJmhO1rmegZLN5IEdj0UQaTZh94Q?= =?utf-8?q?22szVqghISTplb5bZC6p3jQDUWIx53jdrvoZCdedVaw/DPeYXIc8bJ2c=3D?= 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)(82310400017)(1800799015)(376005)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2024 09:29:54.6745 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8862cf3e-b673-4582-8143-08dc7a41bd46 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: DB1PEPF000509EB.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB9422 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_LOTSOFHASH, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Hi All, This patch adds new alternatives to the patterns which are affected. The new alternatives with the conditional early clobbers are added before the normal ones in order for LRA to prefer them in the event that we have enough free registers to accommodate them. In case register pressure is too high the normal alternatives will be preferred before a reload is considered as we rather have the tie than a spill. Tests are in the next 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, @aarch64_pred_cmp, *cmp_cc, *cmp_ptest, @aarch64_pred_cmp_wide, *aarch64_pred_cmp_wide_cc, *aarch64_pred_cmp_wide_ptest, @aarch64_brk, *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): Add new early clobber alternative. * 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 e3085c0c636f1317409bbf3b5fbaf5342a2df1f6..8fdc1bc3cd43acfcd675a18350c297428c85fe46 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -1161,8 +1161,10 @@ (define_insn "aarch64_rdffr_z" (reg:VNx16BI FFRT_REGNUM) (match_operand:VNx16BI 1 "register_operand")))] "TARGET_SVE && TARGET_NON_STREAMING" - {@ [ cons: =0, 1 ] - [ Upa , Upa ] rdffr\t%0.b, %1/z + {@ [ cons: =0, 1 ; attrs: pred_clobber ] + [ &Upa , Upa; yes ] rdffr\t%0.b, %1/z + [ ?Upa , Upa; yes ] ^ + [ Upa , Upa; * ] ^ } ) @@ -1179,8 +1181,10 @@ (define_insn "*aarch64_rdffr_z_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - {@ [ cons: =0, 1 ] - [ Upa , Upa ] rdffrs\t%0.b, %1/z + {@ [ cons: =0, 1 ; attrs: pred_clobber ] + [ &Upa , Upa; yes ] rdffrs\t%0.b, %1/z + [ ?Upa , Upa; yes ] ^ + [ Upa , Upa; * ] ^ } ) @@ -1195,8 +1199,10 @@ (define_insn "*aarch64_rdffr_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE && TARGET_NON_STREAMING" - {@ [ cons: =0, 1 ] - [ Upa , Upa ] rdffrs\t%0.b, %1/z + {@ [ cons: =0, 1 ; attrs: pred_clobber ] + [ &Upa , Upa; yes ] rdffrs\t%0.b, %1/z + [ ?Upa , Upa; yes ] ^ + [ Upa , Upa; * ] ^ } ) @@ -1216,8 +1222,10 @@ (define_insn "*aarch64_rdffr_z_cc" (reg:VNx16BI FFRT_REGNUM) (match_dup 1)))] "TARGET_SVE && TARGET_NON_STREAMING" - {@ [ cons: =0, 1 ] - [ Upa , Upa ] rdffrs\t%0.b, %1/z + {@ [ cons: =0, 1 ; attrs: pred_clobber ] + [ &Upa , Upa; yes ] rdffrs\t%0.b, %1/z + [ ?Upa , Upa; yes ] ^ + [ Upa , Upa; * ] ^ } ) @@ -1233,8 +1241,10 @@ (define_insn "*aarch64_rdffr_cc" (set (match_operand:VNx16BI 0 "register_operand") (reg:VNx16BI FFRT_REGNUM))] "TARGET_SVE && TARGET_NON_STREAMING" - {@ [ cons: =0, 1 ] - [ Upa , Upa ] rdffrs\t%0.b, %1/z + {@ [ cons: =0, 1 ; attrs: pred_clobber ] + [ &Upa , Upa; yes ] rdffrs\t%0.b, %1/z + [ ?Upa , Upa; yes ] ^ + [ Upa , Upa; * ] ^ } ) @@ -6651,8 +6661,10 @@ (define_insn "and3" (and:PRED_ALL (match_operand:PRED_ALL 1 "register_operand") (match_operand:PRED_ALL 2 "register_operand")))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 ] - [ Upa , Upa, Upa ] and\t%0.b, %1/z, %2.b, %2.b + {@ [ cons: =0, 1 , 2 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa; yes ] and\t%0.b, %1/z, %2.b, %2.b + [ ?Upa , Upa, Upa; yes ] ^ + [ Upa , Upa, Upa; * ] ^ } ) @@ -6679,8 +6691,10 @@ (define_insn "@aarch64_pred__z" (match_operand:PRED_ALL 3 "register_operand")) (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] \t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6703,8 +6717,10 @@ (define_insn "*3_cc" (and:PRED_ALL (LOGICAL:PRED_ALL (match_dup 2) (match_dup 3)) (match_dup 4)))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] s\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] s\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6723,8 +6739,10 @@ (define_insn "*3_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] s\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] s\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6745,8 +6763,10 @@ (define_insn "aarch64_pred__z" (match_operand:PRED_ALL 2 "register_operand")) (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] \t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6770,8 +6790,10 @@ (define_insn "*3_cc" (match_dup 2)) (match_dup 4)))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] s\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] s\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6791,8 +6813,10 @@ (define_insn "*3_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] s\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] s\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6813,8 +6837,10 @@ (define_insn "aarch64_pred__z" (not:PRED_ALL (match_operand:PRED_ALL 3 "register_operand"))) (match_operand:PRED_ALL 1 "register_operand")))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] \t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] \t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6839,8 +6865,10 @@ (define_insn "*3_cc" (not:PRED_ALL (match_dup 3))) (match_dup 4)))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] s\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] s\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -6861,8 +6889,10 @@ (define_insn "*3_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] s\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] s\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) @@ -8104,9 +8134,13 @@ (define_insn "@aarch64_pred_cmp" UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE" - {@ [ cons: =0 , 1 , 3 , 4 ] - [ Upa , Upl , w , ] cmp\t%0., %1/z, %3., #%4 - [ Upa , Upl , w , w ] cmp\t%0., %1/z, %3., %4. + {@ [ cons: =0 , 1 , 3 , 4 ; attrs: pred_clobber ] + [ &Upa , Upl , w , ; yes ] cmp\t%0., %1/z, %3., #%4 + [ ?Upa , Upl , w , ; yes ] ^ + [ Upa , Upl , w , ; * ] ^ + [ &Upa , Upl , w , w ; yes ] cmp\t%0., %1/z, %3., %4. + [ ?Upa , Upl , w , w ; yes ] ^ + [ Upa , Upl , w , w ; * ] ^ } ) @@ -8136,9 +8170,13 @@ (define_insn_and_rewrite "*cmp_cc" UNSPEC_PRED_Z))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - {@ [ 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. + {@ [ cons: =0 , 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upl , w , ; yes ] cmp\t%0., %1/z, %2., #%3 + [ ?Upa , Upl , w , ; yes ] ^ + [ Upa , Upl , w , ; * ] ^ + [ &Upa , Upl , w , w ; yes ] cmp\t%0., %1/z, %2., %3. + [ ?Upa , Upl , w , w ; yes ] ^ + [ Upa , Upl , w , w ; * ] ^ } "&& !rtx_equal_p (operands[4], operands[6])" { @@ -8166,9 +8204,13 @@ (define_insn_and_rewrite "*cmp_ptest" (clobber (match_scratch: 0))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - {@ [ 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. + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upl, w , ; yes ] cmp\t%0., %1/z, %2., #%3 + [ ?Upa , Upl, w , ; yes ] ^ + [ Upa , Upl, w , ; * ] ^ + [ &Upa , Upl, w , w ; yes ] cmp\t%0., %1/z, %2., %3. + [ ?Upa , Upl, w , w ; yes ] ^ + [ Upa , Upl, w , w ; * ] ^ } "&& !rtx_equal_p (operands[4], operands[6])" { @@ -8221,8 +8263,10 @@ (define_insn "@aarch64_pred_cmp_wide" UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2, 3, 4 ] - [ Upa , Upl, , w, w ] cmp\t%0., %1/z, %3., %4.d + {@ [ cons: =0, 1 , 2, 3, 4; attrs: pred_clobber ] + [ &Upa , Upl, , w, w; yes ] cmp\t%0., %1/z, %3., %4.d + [ ?Upa , Upl, , w, w; yes ] ^ + [ Upa , Upl, , w, w; * ] ^ } ) @@ -8254,8 +8298,10 @@ (define_insn "*aarch64_pred_cmp_wide_cc" UNSPEC_PRED_Z))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - {@ [ cons: =0, 1 , 2, 3, 6 ] - [ Upa , Upl, w, w, Upl ] cmp\t%0., %1/z, %2., %3.d + {@ [ cons: =0, 1 , 2, 3, 6 ; attrs: pred_clobber ] + [ &Upa , Upl, w, w, Upl; yes ] cmp\t%0., %1/z, %2., %3.d + [ ?Upa , Upl, w, w, Upl; yes ] ^ + [ Upa , Upl, w, w, Upl; * ] ^ } ) @@ -8279,8 +8325,10 @@ (define_insn "*aarch64_pred_cmp_wide_ptest" (clobber (match_scratch: 0))] "TARGET_SVE && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])" - {@ [ cons: =0, 1 , 2, 3, 6 ] - [ Upa , Upl, w, w, Upl ] cmp\t%0., %1/z, %2., %3.d + {@ [ cons: =0, 1 , 2, 3, 6 ; attrs: pred_clobber ] + [ &Upa , Upl, w, w, Upl; yes ] cmp\t%0., %1/z, %2., %3.d + [ ?Upa , Upl, w, w, Upl; yes ] ^ + [ Upa , Upl, w, w, Upl; * ] ^ } ) @@ -9948,9 +9996,13 @@ (define_insn "@aarch64_brk" (match_operand:VNx16BI 3 "aarch64_simd_reg_or_zero")] SVE_BRK_UNARY))] "TARGET_SVE" - {@ [ cons: =0 , 1 , 2 , 3 ] - [ Upa , Upa , Upa , Dz ] brk\t%0.b, %1/z, %2.b - [ Upa , Upa , Upa , 0 ] brk\t%0.b, %1/m, %2.b + {@ [ cons: =0 , 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa , Upa , Dz; yes ] brk\t%0.b, %1/z, %2.b + [ ?Upa , Upa , Upa , Dz; yes ] ^ + [ Upa , Upa , Upa , Dz; * ] ^ + [ &Upa , Upa , Upa , 0 ; yes ] brk\t%0.b, %1/m, %2.b + [ ?Upa , Upa , Upa , 0 ; yes ] ^ + [ Upa , Upa , Upa , 0 ; * ] ^ } ) @@ -9974,8 +10026,10 @@ (define_insn "*aarch64_brk_cc" (match_dup 3)] SVE_BRK_UNARY))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 ] - [ Upa , Upa, Upa ] brks\t%0.b, %1/z, %2.b + {@ [ cons: =0, 1 , 2 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa; yes ] brks\t%0.b, %1/z, %2.b + [ ?Upa , Upa, Upa; yes ] ^ + [ Upa , Upa, Upa; * ] ^ } ) @@ -9994,8 +10048,10 @@ (define_insn "*aarch64_brk_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 ] - [ Upa , Upa, Upa ] brks\t%0.b, %1/z, %2.b + {@ [ cons: =0, 1 , 2 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa; yes ] brks\t%0.b, %1/z, %2.b + [ ?Upa , Upa, Upa; yes ] ^ + [ Upa , Upa, Upa; * ] ^ } ) @@ -10020,8 +10076,10 @@ (define_insn "@aarch64_brk" (match_operand:VNx16BI 3 "register_operand")] SVE_BRK_BINARY))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, ] brk\t%0.b, %1/z, %2.b, %.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, ; yes ] brk\t%0.b, %1/z, %2.b, %.b + [ ?Upa , Upa, Upa, ; yes ] ^ + [ Upa , Upa, Upa, ; * ] ^ } ) @@ -10046,8 +10104,10 @@ (define_insn_and_rewrite "*aarch64_brkn_cc" (match_dup 3)] UNSPEC_BRKN))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, 0 ] brkns\t%0.b, %1/z, %2.b, %0.b + {@ [ cons: =0, 1 , 2 , 3; attrs: pred_clobber ] + [ &Upa , Upa, Upa, 0; yes ] brkns\t%0.b, %1/z, %2.b, %0.b + [ ?Upa , Upa, Upa, 0; yes ] ^ + [ Upa , Upa, Upa, 0; * ] ^ } "&& (operands[4] != CONST0_RTX (VNx16BImode) || operands[5] != CONST0_RTX (VNx16BImode))" @@ -10072,8 +10132,10 @@ (define_insn_and_rewrite "*aarch64_brkn_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, 0 ] brkns\t%0.b, %1/z, %2.b, %0.b + {@ [ cons: =0, 1 , 2 , 3; attrs: pred_clobber ] + [ &Upa , Upa, Upa, 0; yes ] brkns\t%0.b, %1/z, %2.b, %0.b + [ ?Upa , Upa, Upa, 0; yes ] ^ + [ Upa , Upa, Upa, 0; * ] ^ } "&& (operands[4] != CONST0_RTX (VNx16BImode) || operands[5] != CONST0_RTX (VNx16BImode))" @@ -10103,8 +10165,10 @@ (define_insn "*aarch64_brk_cc" (match_dup 3)] SVE_BRKP))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] brks\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 , 4; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa, ; yes ] brks\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa, ; yes ] ^ + [ Upa , Upa, Upa, Upa, ; * ] ^ } ) @@ -10123,8 +10187,10 @@ (define_insn "*aarch64_brk_ptest" UNSPEC_PTEST)) (clobber (match_scratch:VNx16BI 0))] "TARGET_SVE" - {@ [ cons: =0, 1 , 2 , 3 ] - [ Upa , Upa, Upa, Upa ] brks\t%0.b, %1/z, %2.b, %3.b + {@ [ cons: =0, 1 , 2 , 3 ; attrs: pred_clobber ] + [ &Upa , Upa, Upa, Upa; yes ] brks\t%0.b, %1/z, %2.b, %3.b + [ ?Upa , Upa, Upa, Upa; yes ] ^ + [ Upa , Upa, Upa, Upa; * ] ^ } ) diff --git a/gcc/config/aarch64/aarch64-sve2.md b/gcc/config/aarch64/aarch64-sve2.md index aa12baf48355358ca4fefe88157df3aac6eb09bd..1a49494a69d8335e5f7d3ef4bd3a90d0805bba84 100644 --- a/gcc/config/aarch64/aarch64-sve2.md +++ b/gcc/config/aarch64/aarch64-sve2.md @@ -3349,8 +3349,10 @@ (define_insn "@aarch64_pred_" UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE2 && TARGET_NON_STREAMING" - {@ [ cons: =0, 1 , 2, 3, 4 ] - [ Upa , Upl, , w, w ] \t%0., %1/z, %3., %4. + {@ [ cons: =0, 1 , 2, 3, 4; attrs: pred_clobber ] + [ &Upa , Upl, , w, w; yes ] \t%0., %1/z, %3., %4. + [ ?Upa , Upl, , w, w; yes ] ^ + [ Upa , Upl, , w, w; * ] ^ } )