Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2175720/?format=api
{ "id": 2175720, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2175720/?format=api", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/1.0/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null }, "msgid": "<20251218194020.906425-3-alfie.richards@arm.com>", "date": "2025-12-18T19:40:20", "name": "[v6,2/2] aarch64: Add support for fmv priority syntax.", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "4e42fa86129ef3720c74076ec1816cfc07a01625", "submitter": { "id": 88864, "url": "http://patchwork.ozlabs.org/api/1.0/people/88864/?format=api", "name": "Alfie Richards", "email": "alfie.richards@arm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20251218194020.906425-3-alfie.richards@arm.com/mbox/", "series": [ { "id": 485906, "url": "http://patchwork.ozlabs.org/api/1.0/series/485906/?format=api", "date": "2025-12-18T19:40:18", "name": "fmv: aarch64: targethooks: Add priority syntax", "version": 6, "mbox": "http://patchwork.ozlabs.org/series/485906/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2175720/checks/", "tags": {}, "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=J4CoMVxm;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=J4CoMVxm;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=J4CoMVxm;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=J4CoMVxm", "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=arm.com", "sourceware.org; spf=pass smtp.mailfrom=arm.com", "server2.sourceware.org;\n arc=pass smtp.remote-ip=52.101.84.41" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dXLfq2553z1y2r\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 19 Dec 2025 06:42:41 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id D08B14BA2E2B\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 19:42:39 +0000 (GMT)", "from DB3PR0202CU003.outbound.protection.outlook.com\n (mail-northeuropeazon11010041.outbound.protection.outlook.com [52.101.84.41])\n by sourceware.org (Postfix) with ESMTPS id 943154BA2E05\n for <gcc-patches@gcc.gnu.org>; Thu, 18 Dec 2025 19:41:33 +0000 (GMT)", "from DU2PR04CA0084.eurprd04.prod.outlook.com (2603:10a6:10:232::29)\n by PAWPR08MB11087.eurprd08.prod.outlook.com (2603:10a6:102:46b::18)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.8; Thu, 18 Dec\n 2025 19:41:29 +0000", "from DU6PEPF00009527.eurprd02.prod.outlook.com\n (2603:10a6:10:232:cafe::3c) by DU2PR04CA0084.outlook.office365.com\n (2603:10a6:10:232::29) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.7 via Frontend Transport; Thu,\n 18 Dec 2025 19:41:29 +0000", "from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by\n DU6PEPF00009527.mail.protection.outlook.com (10.167.8.8) with Microsoft SMTP\n Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.6 via\n Frontend Transport; Thu, 18 Dec 2025 19:41:27 +0000", "from AS4P189CA0003.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5d7::8)\n by AM8PR08MB6401.eurprd08.prod.outlook.com (2603:10a6:20b:361::8) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.7; Thu, 18 Dec\n 2025 19:40:22 +0000", "from AMS0EPF000001AE.eurprd05.prod.outlook.com\n (2603:10a6:20b:5d7:cafe::e0) by AS4P189CA0003.outlook.office365.com\n (2603:10a6:20b:5d7::8) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.8 via Frontend Transport; Thu,\n 18 Dec 2025 19:40:20 +0000", "from nebula.arm.com (172.205.89.229) by\n AMS0EPF000001AE.mail.protection.outlook.com (10.167.16.154) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9434.6 via Frontend Transport; Thu, 18 Dec 2025 19:40:22 +0000", "from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX04.Arm.com\n (10.240.25.138) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 18 Dec\n 2025 19:40:21 +0000", "from ip-10-249-56-165.eu-west-1.compute.internal (10.249.56.165) by\n mail.arm.com (10.240.25.138) with Microsoft SMTP Server id\n 15.2.2562.29 via Frontend Transport; Thu, 18 Dec 2025 19:40:21 +0000" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org D08B14BA2E2B", "OpenDKIM Filter v2.11.0 sourceware.org 943154BA2E05" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 943154BA2E05", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 943154BA2E05", "ARC-Seal": [ "i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1766086893; cv=pass;\n b=Qw70fiOguGVdizYKljaTB4ugQ++nx7JKUJa/5sc9lQPHL4trYW1N5G/VfpTUWYgfMTqdQeAs63gaMcMsNUqkRGI1BMb9cwCjQH4iqydoEZmHgjuV6LJIklucrae19I993Mx+eUIbrgDaIqvDCN7/FLQ5xidBEnKoK5NlxwPAGus=", "i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass;\n b=Pyx6pL+HaTu9ZFQ64NNM54ztJ3YjRn3YzPbPNz9oJYpEFDK1CyFrCfPBLZ21NfBBZbQTYLocnK/oXkYwd3okaVsRtpySzQNlrAK9+hHigMSBOyAf/HNkyzDa48KLEfbhAcx4Xlatryp2CDEwvGKuH2Qv0mfEiJB/NnaQ+ezqOZdcFWKSpvKqTi1BQLyAAVfFRPoQb3bszgosZngQfp1EIUboL1AGxlLF7ePit3B85dO3C4IAvg5UKhCf0ugOFHOZP5OQR6vMepMI5JZxy4NTwtI9iETta9hoRTjWgQZck49dnJzrnq8lP0y4wLvb+pd2w/My6XB5XmXDaXx+mfUrQA==", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=lLxt74agDjow+1/gjBzhKKtNaGhvgitH1VSTADaKamTnE1fw7dZ7GzHQFC/6Tg2wiiNAbDB7yZ4Nj1Ye+Pnt59Jn00oiRYcoeC1bUjEED2bRrRvdr9427K1bJVhjudYFOBmUpxueOzCL0oWsjZPcnI0WxoqOD70qqBTbj/tOp5gDh8i/yYSbXpxOGM9NZfAJ7P84n7ZDDdvjEHe7GneAFgLBvQ95bjqDGA+J/86myK+9rcP1YXKvTUG5EJvAxnexnisP9h9yUsog/oazsCm1smff2VcS+INDhXm8yoCHQZdD9Guw9db+7QYyleLj3I3meGS5idJAMO0fGhD/sEvMQQ==" ], "ARC-Message-Signature": [ "i=3; a=rsa-sha256; d=sourceware.org; s=key;\n t=1766086893; c=relaxed/simple;\n bh=Cj+oYZl1lmMqHvFEJErsWZI3hab95xPvr4FKjRhi12I=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID:\n MIME-Version;\n b=vsclmbFzRNTrKKDEHF08h5GTVMwbeuyim4hNLLa2VnQ0jq9GBPeXIx93U4X93lRc4yUxfYkvHUHmHkGq6mRO4WrrEjiTUeqERCLbXieXsuPdaYmBX4p1hPiMdhKXPyYA6/IHcObB0N50YLYP4I/g1N8Eljc7w8L4DjOMEkkJvew=", "i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=U0ABS7+RXSCucuVyuIQYUkivoqOxSZgIdYW++bL6MG0=;\n b=fViEJP/y7q6Zt/FZsLbIAoJdPZQnwsQHdIxaKIDjQdlSgV86UUJpI6FiTb9XLJQAbXj8xHZNnFA9a13x7pAkDaHqaq0A+LJ1reXn3tQ/zl0tVEdLp6LuMyaX2HT2w0kSRw5UOtOgCWuHZgCLU7Lu0UqxwB+yqoxNLe/sOJGj2XRPmxzry4jUZo3QMo+TunA5rvnCAcmMkfaUBORfzyin14vACavcK/F8lTwGrnZGj+OcRc8u3utJ0nWXnM8MdUxoxLBj82JjstUbgDeHYHmC7XHmNB0rmKSLc/5HVrJTfhIweeGR8lEBINydK6yzUHsVM04d9Yrzr4YYKzUsjDoJsw==", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=U0ABS7+RXSCucuVyuIQYUkivoqOxSZgIdYW++bL6MG0=;\n b=im8/f63vK3mWkbNzGtQPt3/GJP/41FmlyaRVano4oCpMI/GeHAIu2E107z0octGEiDaT025Nr/sVgJQIxmW0g9aQbl7mRShItZ3Y2Z/d6KQv4P2gB91fU99htGENzpBVhH0XDGdSnN2NjntL290ZecTr4w1wZTTx1ebz/Ui/OmdC1NZkMHhAxq705XMgIoQN8iA979XnRfGKv8XklC5GNOsMxeyykfLdvxfAVDWrZENuV2Fb+xFDAAM3dTFHeiSL3Ruqv57yZ0bRfyL1VEaioWrzHnNKtUp7x61P+kkA4i//9XamkpvRtLFUSEuK43BKzcEIIJNLuK3pWrMIjuR9TA==" ], "ARC-Authentication-Results": [ "i=3; server2.sourceware.org", "i=2; mx.microsoft.com 1; spf=pass (sender ip is\n 4.158.2.129) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass\n (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass\n (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1\n spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com])", "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 172.205.89.229) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;\n dkim=none (message not signed); arc=none (0)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=U0ABS7+RXSCucuVyuIQYUkivoqOxSZgIdYW++bL6MG0=;\n b=J4CoMVxmqRFGQSqPl2ONYBTfUgiF1G+rIZqtN0JZ5z4gamr4tTE361MS/fDYOI/Sq3qqgJ6iRWwRMx7xgd45/g18WCMQm4yI10ya+0FI7c1UBayX+lL8MQVbRhenC7Ni/1zs1p078sQhfmk4qc6GOR+dWrrb6BHu4/qSSjYkDtI=", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=U0ABS7+RXSCucuVyuIQYUkivoqOxSZgIdYW++bL6MG0=;\n b=J4CoMVxmqRFGQSqPl2ONYBTfUgiF1G+rIZqtN0JZ5z4gamr4tTE361MS/fDYOI/Sq3qqgJ6iRWwRMx7xgd45/g18WCMQm4yI10ya+0FI7c1UBayX+lL8MQVbRhenC7Ni/1zs1p078sQhfmk4qc6GOR+dWrrb6BHu4/qSSjYkDtI=" ], "X-MS-Exchange-Authentication-Results": [ "spf=pass (sender IP is 4.158.2.129)\n smtp.mailfrom=arm.com; dkim=pass (signature was verified)\n header.d=arm.com;dmarc=pass action=none header.from=arm.com;", "spf=pass (sender IP is 172.205.89.229)\n smtp.mailfrom=arm.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=arm.com;" ], "Received-SPF": [ "Pass (protection.outlook.com: domain of arm.com designates\n 4.158.2.129 as permitted sender) receiver=protection.outlook.com;\n client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C", "Pass (protection.outlook.com: domain of arm.com designates\n 172.205.89.229 as permitted sender) receiver=protection.outlook.com;\n client-ip=172.205.89.229; helo=nebula.arm.com; pr=C" ], "From": "Alfie Richards <alfie.richards@arm.com>", "To": "<gcc-patches@gcc.gnu.org>", "CC": "<jlaw@ventanamicro.com>, <alice.carlotti@arm.com>,\n <andrew.pinski@oss.qualcomm.com>, <wilco.dijkstra@arm.com>,\n <richard.earnshaw@arm.com>, Alfie Richards <alfie.richards@arm.com>", "Subject": "[PATCH v6 2/2] aarch64: Add support for fmv priority syntax.", "Date": "Thu, 18 Dec 2025 19:40:20 +0000", "Message-ID": "<20251218194020.906425-3-alfie.richards@arm.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20251218194020.906425-1-alfie.richards@arm.com>", "References": "<20251218194020.906425-1-alfie.richards@arm.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-EOPAttributedMessage": "1", "X-MS-TrafficTypeDiagnostic": "\n AMS0EPF000001AE:EE_|AM8PR08MB6401:EE_|DU6PEPF00009527:EE_|PAWPR08MB11087:EE_", "X-MS-Office365-Filtering-Correlation-Id": "743e82be-0d9e-4016-ea03-08de3e6d6f69", "x-checkrecipientrouted": "true", "NoDisclaimer": "true", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam-Untrusted": "BCL:0;\n ARA:13230040|376014|36860700013|82310400026|1800799024|3122999012|13003099007;", "X-Microsoft-Antispam-Message-Info-Original": "\n LlYGT79WYEYEH0zMbJ39WqVK5GpTrl6sw+LZfL6rb3yItBOH6s+fzw9nbbKig3VD/Cd5xUfCeHX8T+XCprq+BGSeWe5PWnS+u4RZRKv2E6FvOBsST9pV3MnGp9tRadhE3tkkd5bbeDvUvz8PNBOpylN28eOdxJj0rSKtS5aQNBv84DF3blu5IzcR3kt2F5l9CTQK35MJ/BmRVaHuXW49UM6QpZgw6z6YUht5NK6mwjZ9BvQf5O+jMGVHlD9uSqMbQe9fkk3HGy9n4n8LjPtFrlY2UwLq9xtoVpGd+aHdHco71F97HWybmHO83JcOt24OX7bTA2z7YHgYsg+ogmdI2YfXyxtqZagrFx4rRkp3bPnggutscRFVUMmoxYwNXMoG6korJ4JFRJu3eph8ESeBi6GE66ISF2rLkAq6eCDXf7LCm8us4aZFNEb3xeQZL421ocpmHf8GliW13xyGOE3Qkcv0Y7AyBZI3/1cSOiqwRk1WsdtiFRriQlyXl9u0fbPn8AmbQiXV/+8ICbigx8AknEGEHAMGlCwph3VlpJsYuBKj3VJ4brLrxJi1kVvXBL6k4DGFY5x4v+x6OfZbrMmelB/wBcLqj26mt39qOz/ispHEbDsC62HQcyJhUlBhodiC0XnMFU+euxB1qN9Kjx3lVMrrPf9w/ucAtnc4o+WGf0s7LHUISRWCwEKCwrOkB6BpxQK7Ty5ZFDjVrOOwZM+O4gap5ArUKxSII5D07USE+RB0wkyLAuxXIbulwFw+t7F7Enl8Xq85wmVD3WGD6KkCW13uNTPvkaggZ4oPFZtmWYZkkOyzCKP7Qve9ehZ31I/HxhuA0qpSQckegNlt1YYdO8TBhLqz0TQsYJX/u/CxXwnjPKurI0Pe/MLg+I+wks8CzSdVB9BBCenrhHDHUXx1zgISKhjx4Y/jfsk6QzYorTNufE7QT5h7AtCxmiJ/1BT1FlwIT2j7lzYQm2Gn6JHNoPbaKIvpUvfaD3OATIyeBCXO6QCp/bZKA+VmaBWVgGvFV5x3ozwAMyYJXrjISFB0gHyxT4QnUJtXKEx/8fcmP38H+fL8NgTu2LZv7mZeuoLSiUHbo7AovxWtBP0+MlpMRIoDCcvKAx/WCZXEb7TIK6xA1V3QTwJp0fMau9xD6R1IR1ko9OiKf4/2jgo3AYqcjxnmFlrVzC4XM6iDQl4JRKgw8SSDvqYsfnPLjIEvhbcIm2uusAWxRg145xnfoBS1U5Ns30NnSYCqgEIUckDCYV18XrFHA9VOIsn+Y8LOU3JcdOOcpX3nNFjgVtWxm8/dNn+IfvJP6Th9wBP/e2LYBqKdfOiw+qkDEgh5lUdKE94+Ex8T5lHmue6wBTSqZmkTrz+8UJzu/ID11xeDW/N6EL/IENRNyr0F8rWQsUd+V2pnQOkHuAvUDivPna1UrMhIs7bpH34Bp6lxUZOJuqR+oNPC0BD4oPgoYUvSYy1PLkE5P/QgBHwZksIjy5zvQCRBqcONrSR+FTq9vsd7OlttMQWIY+lkVuNWu1hTchuNvWI1", "X-Forefront-Antispam-Report-Untrusted": "CIP:172.205.89.229; CTRY:IE; LANG:en;\n SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent;\n CAT:NONE;\n SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024)(3122999012)(13003099007);\n DIR:OUT; SFP:1101;", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": [ "AM8PR08MB6401", "PAWPR08MB11087" ], "X-MS-Exchange-Transport-CrossTenantHeadersStripped": "\n DU6PEPF00009527.eurprd02.prod.outlook.com", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id-Prvs": "\n 501481ec-6cf0-4571-2d2e-08de3e6d488e", "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|82310400026|14060799003|1800799024|35042699022|36860700013|376014|13003099007|3122999012;", "X-Microsoft-Antispam-Message-Info": "\n 3IGM1QwuIYOhdcY1AxPH48BRR6kPM0DoFfJOpvkOe6LuTm3X9tbUWrRT8nTeC7vH1tDbHNdsKN/tuFg6tI4T9J7UjkqKlraR5z/+XvDY6GRVdK/xZMNo54Z66fHT5X2dF4mpUFc//cSZpRfjlxeqFHV7PmtitdlerRpos9PKN47YWyHhmNflGq88lbbpRLZmzrZZkhNTGXIw9KB5c2+aFwx2qQU1rSvn4BtCcp9JqSTCVyx8G7nxrN0VcLp9Dhl11dlGtvgPONq/EarXxJkJoLoB5Y2P3zNI98MRMF1I4DutwQxySKR+G6c9kDT9KGeyd4WXrnsYkj4ZSFKu/AF8m5S+qgFpMy2OKDOyJng+5DLcJox7VW7x2llQxMGB3xgu3VnYgnk4xI+PqH20pAFclBVmD808haguKl/cvRP02Cz3YsU5yZn+I4n9w5uktTh8dtDAbQeNgdsqAd9qDvBiZ8mM1CnRUCRdt6D3zU50C6lzH9JkLgGcdkSSIN4HU1ipVg+OuF2sNkYW/+I4Lmphi9FLYZnGxtxVrwERdZX6aAuoJSGl9zA96Q7O8+qoXG+cnk/ubkdPlSUkcE3nabM2U2AC8M2J/flHQXP+bGpL9xk7o3MJL7TqgV6FZRWdoFdP5p1XsAzGglixyB/wQVFnKvhIHJ5t/WczVLwbBimy+O3cNUnitmahoSUurC1+fJ+WJpi5dONK/c7n5d5QDIBtlGqhKP9lSr+5wUkexh6/zORh534ZTA96yO7P+jCVNon+a+e7CLwhAvzqfAzYs9cG+78eWyOhwTPqZTamJYWs06HpaMZ63thXGf6NjhHYtY/7DK0zMWM1SrzW8JxSffeG//8ZsdaN8obWnbujxJfGD2RXeKsDIzeVaMhBA1OuLg7obleUPHCQYabgVvyW8Hg37H8hN7QsNi2ikG3jaTNvcPQW4qEa1fYnTwAeblLqIcIw43r6XL2N+ZJ2eKle9XXyL6VkIFPePXgas32c1ETKJ9W7A9J8UDrZO2UWbxYX72ZZ3+8t/Q0htry2RUOGva6V65VbrNI1QqTiJTONtvB4RMztFvi/3/UAPhIUgPb/NQ2X8s+eBNnXfbBv0knDMfuLxxeO449RQ+02xncLkChFyommG8pVEDj/DiZtcldXNGV9zmuKawrN6BiKXcnctLtUbQtyfKDqR0ovBlyOba/MPVwlhfgNgf0OQ8I8omWp8QZh6CC3supKn9saEVejycGFhO/LdWvdo2/XdpKn1ek5QQ4c4ypb0Ymo+488h/I9RqmrL7wPiPo9+EdKVvw2h0+Y7LGHmBOoANo61BSOUqsA+KTUPVyQKayPWBs0tSa0SzinhMX8Ktxdf38qOwle/YjsEErl7XB8EnMRqEdRg1AgsvO2WjiRWxfdXFCyjKdwLnU7LVA9+DdyZF4LL4quF3FUFgqNIVOr/8leAj6FYWd605EI7MVwKRuGEXBPMUDWOj064oY8gLRYXvaj+7lIfoBp1ji0ruaLylxwdrrrE8rHFKXZbZFen+3HowGTAPh3gBiz", "X-Forefront-Antispam-Report": "CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com;\n PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230040)(82310400026)(14060799003)(1800799024)(35042699022)(36860700013)(376014)(13003099007)(3122999012);\n DIR:OUT; SFP:1101;", "X-OriginatorOrg": "arm.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "18 Dec 2025 19:41:27.3583 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 743e82be-0d9e-4016-ea03-08de3e6d6f69", "X-MS-Exchange-CrossTenant-Id": "f34e5979-57d9-4aaa-ad4d-b122a662184d", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129];\n Helo=[outbound-uk1.az.dlp.m.darktrace.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n DU6PEPF00009527.eurprd02.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "Adds support for the AArch64 fmv priority syntax.\n\nThis allows users to override the default function ordering.\n\nFor example:\n\n```c\nint bar [[gnu::target_version(\"default\")]] (int){\n return 1;\n}\n\nint bar [[gnu::target_version(\"dotprod;priority=2\")]] (int) {\n return 2;\n}\n\nint bar [[gnu::target_version(\"sve;priority=1\")]] (int) {\n return 3;\n}\n```\n\ngcc/ChangeLog:\n\n\t* config/aarch64/aarch64.cc (aarch64_parse_fmv_features): Add parsing\n\tfor priority arguments.\n\t(aarch64_process_target_version_attr): Update call to\n\taarch64_parse_fmv_features.\n\t(get_feature_mask_for_version): Update call to\n\taarch64_parse_fmv_features.\n\t(aarch64_compare_version_priority): Add logic to order by priority if present.\n\t(aarch64_functions_b_resolvable_from_a): Update call to\n\taarch64_parse_fmv_features.\n\t(aarch64_mangle_decl_assembler_name): Update call to\n\taarch64_parse_fmv_features.\n\t(dispatch_function_versions): Add logic to sort by priority.\n\t(aarch64_same_function_versions): Add diagnostic if invalid use of\n\tpriority syntax.\n\t(aarch64_merge_decl_attributes): Add logic to make suer priority\n\targuments are preserved.\n\t(aarch64_check_target_clone_version): Update call to\n\taarch64_parse_fmv_features.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.target/aarch64/fmv_priority3.c: New test.\n\t* gcc.target/aarch64/fmv_priority_error1.c: New test.\n\t* gcc.target/aarch64/fmv_priority_error2.c: New test.\n---\n gcc/config/aarch64/aarch64.cc | 146 +++++++++++++++---\n .../gcc.target/aarch64/fmv_priority3.c | 26 ++++\n .../gcc.target/aarch64/fmv_priority_error1.c | 11 ++\n .../gcc.target/aarch64/fmv_priority_error2.c | 8 +\n 4 files changed, 166 insertions(+), 25 deletions(-)\n create mode 100644 gcc/testsuite/gcc.target/aarch64/fmv_priority3.c\n create mode 100644 gcc/testsuite/gcc.target/aarch64/fmv_priority_error1.c\n create mode 100644 gcc/testsuite/gcc.target/aarch64/fmv_priority_error2.c", "diff": "diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc\nindex 7baf041ceb3..c56aa24ebfd 100644\n--- a/gcc/config/aarch64/aarch64.cc\n+++ b/gcc/config/aarch64/aarch64.cc\n@@ -20745,25 +20745,29 @@ static aarch64_fmv_feature_datum aarch64_fmv_feature_data[] = {\n static enum aarch_parse_opt_result\n aarch64_parse_fmv_features (string_slice str, aarch64_feature_flags *isa_flags,\n \t\t\t aarch64_fmv_feature_mask *feature_mask,\n+\t\t\t unsigned int *priority,\n \t\t\t std::string *invalid_extension)\n {\n if (feature_mask)\n *feature_mask = 0ULL;\n+ if (priority)\n+ *priority = 0;\n+\n+ str = str.strip ();\n \n if (str == \"default\")\n return AARCH_PARSE_OK;\n \n- gcc_assert (str.is_valid ());\n-\n- while (str.is_valid ())\n+ /* Parse the architecture part of the string. */\n+ string_slice arch_string = string_slice::tokenize (&str, \";\");\n+ while (arch_string.is_valid ())\n {\n string_slice ext;\n \n- ext = string_slice::tokenize (&str, \"+\");\n-\n- gcc_assert (ext.is_valid ());\n+ ext = string_slice::tokenize (&arch_string, \"+\");\n+ ext = ext.strip ();\n \n- if (!ext.is_valid () || ext.empty ())\n+ if (ext.empty ())\n \treturn AARCH_PARSE_MISSING_ARG;\n \n int num_features = ARRAY_SIZE (aarch64_fmv_feature_data);\n@@ -20800,6 +20804,60 @@ aarch64_parse_fmv_features (string_slice str, aarch64_feature_flags *isa_flags,\n \t}\n }\n \n+ /* Parse any extra arguments. */\n+ unsigned int priority_res = 0;\n+ while (str.is_valid ())\n+ {\n+ string_slice argument = string_slice::tokenize (&str, \";\").strip ();\n+ /* Save the whole argument for diagnostics. */\n+ string_slice arg = argument;\n+ string_slice name = string_slice::tokenize (&argument, \"=\").strip ();\n+ argument = argument.strip ();\n+ if (!argument.is_valid () || argument.empty ())\n+\t{\n+\t *invalid_extension = std::string (arg.begin (), arg.size ());\n+\t return AARCH_PARSE_INVALID_FEATURE;\n+\t}\n+\n+ /* priority=N argument (only one is allowed). */\n+ if (name == \"priority\" && priority_res == 0)\n+\t{\n+\t /* Priority values can only be between 1 and 255, so any greater than\n+\t 3 digits long are invalid. */\n+\t if (argument.size () > 3)\n+\t {\n+\t *invalid_extension = std::string (arg.begin (), arg.size ());\n+\t return AARCH_PARSE_INVALID_FEATURE;\n+\t }\n+\n+\t /* Parse the string value. */\n+\t for (char c : argument)\n+\t {\n+\t if (!ISDIGIT (c))\n+\t\t{\n+\t\t priority_res = 0;\n+\t\t break;\n+\t\t}\n+\t priority_res = 10 * priority_res + c - '0';\n+\t }\n+\n+\t /* Check the entire string parsed, and that the value is in range. */\n+\t if (priority_res < 1 || priority_res > 255)\n+\t {\n+\t *invalid_extension = std::string (arg.begin (), arg.size ());\n+\t return AARCH_PARSE_INVALID_FEATURE;\n+\t }\n+\t if (priority)\n+\t *priority = priority_res;\n+\t}\n+ else\n+\t{\n+\t /* Unrecognised argument. */\n+\t *invalid_extension = std::string (arg.begin (), arg.size ());\n+\t return AARCH_PARSE_INVALID_FEATURE;\n+\t}\n+ }\n+\n return AARCH_PARSE_OK;\n }\n \n@@ -20831,7 +20889,7 @@ aarch64_process_target_version_attr (tree args)\n auto isa_flags = aarch64_asm_isa_flags;\n \n std::string invalid_extension;\n- parse_res = aarch64_parse_fmv_features (str, &isa_flags, NULL,\n+ parse_res = aarch64_parse_fmv_features (str, &isa_flags, NULL, NULL,\n \t\t\t\t\t &invalid_extension);\n \n if (parse_res == AARCH_PARSE_OK)\n@@ -20920,7 +20978,7 @@ aarch64_option_valid_version_attribute_p (tree fndecl, tree, tree args, int)\n add or remove redundant feature requirements. */\n \n static aarch64_fmv_feature_mask\n-get_feature_mask_for_version (tree decl)\n+get_feature_mask_for_version (tree decl, unsigned int *priority)\n {\n tree version_attr = lookup_attribute (\"target_version\",\n \t\t\t\t\tDECL_ATTRIBUTES (decl));\n@@ -20934,7 +20992,7 @@ get_feature_mask_for_version (tree decl)\n aarch64_fmv_feature_mask feature_mask;\n \n parse_res = aarch64_parse_fmv_features (version_string, NULL,\n-\t\t\t\t\t &feature_mask, NULL);\n+\t\t\t\t\t &feature_mask, priority, NULL);\n \n /* We should have detected any errors before getting here. */\n gcc_assert (parse_res == AARCH_PARSE_OK);\n@@ -20970,9 +21028,13 @@ compare_feature_masks (aarch64_fmv_feature_mask mask1,\n int\n aarch64_compare_version_priority (tree decl1, tree decl2)\n {\n- auto mask1 = get_feature_mask_for_version (decl1);\n- auto mask2 = get_feature_mask_for_version (decl2);\n+ unsigned int priority_1 = 0;\n+ unsigned int priority_2 = 0;\n+ auto mask1 = get_feature_mask_for_version (decl1, &priority_1);\n+ auto mask2 = get_feature_mask_for_version (decl2, &priority_2);\n \n+ if (priority_1 != priority_2)\n+ return priority_1 > priority_2 ? 1 : -1;\n return compare_feature_masks (mask1, mask2);\n }\n \n@@ -20989,9 +21051,9 @@ aarch64_functions_b_resolvable_from_a (tree decl_a, tree decl_b, tree baseline)\n auto a_version = get_target_version (decl_a);\n auto b_version = get_target_version (decl_b);\n if (a_version.is_valid ())\n- aarch64_parse_fmv_features (a_version, &isa_a, NULL, NULL);\n+ aarch64_parse_fmv_features (a_version, &isa_a, NULL, NULL, NULL);\n if (b_version.is_valid ())\n- aarch64_parse_fmv_features (b_version, &isa_b, NULL, NULL);\n+ aarch64_parse_fmv_features (b_version, &isa_b, NULL, NULL, NULL);\n \n /* Are there any bits of b that arent in a. */\n if (isa_b & (~isa_a))\n@@ -21069,7 +21131,7 @@ aarch64_mangle_decl_assembler_name (tree decl, tree id)\n else if (DECL_FUNCTION_VERSIONED (decl))\n \t{\n \t aarch64_fmv_feature_mask feature_mask\n-\t = get_feature_mask_for_version (decl);\n+\t = get_feature_mask_for_version (decl, NULL);\n \n \t if (feature_mask == 0ULL)\n \t return clone_identifier (id, \"default\");\n@@ -21372,7 +21434,7 @@ dispatch_function_versions (tree dispatch_decl,\n FOR_EACH_VEC_ELT_REVERSE ((*fndecls), i, version_decl)\n {\n aarch64_fmv_feature_mask feature_mask\n-\t= get_feature_mask_for_version (version_decl);\n+\t= get_feature_mask_for_version (version_decl, NULL);\n *empty_bb = add_condition_to_bb (dispatch_decl, version_decl,\n \t\t\t\t feature_mask, mask_var, *empty_bb);\n }\n@@ -21495,26 +21557,46 @@ aarch64_get_function_versions_dispatcher (void *decl)\n return dispatch_decl;\n }\n \n-/* This function returns true if STR1 and STR2 are version strings for the same\n- function. */\n+/* This function returns true if OLD_STR and NEW_STR are version strings for the\n+ same function.\n+ Emits a diagnostic if the new version should not be merged with the old\n+ version due to a prioriy value mismatch. */\n \n bool\n-aarch64_same_function_versions (string_slice old_str, const_tree,\n-\t\t\t\tstring_slice new_str, const_tree)\n+aarch64_same_function_versions (string_slice old_str, const_tree old_decl,\n+\t\t\t\tstring_slice new_str, const_tree new_decl)\n {\n enum aarch_parse_opt_result parse_res;\n aarch64_fmv_feature_mask old_feature_mask;\n aarch64_fmv_feature_mask new_feature_mask;\n+ unsigned int old_priority;\n+ unsigned int new_priority;\n \n parse_res = aarch64_parse_fmv_features (old_str, NULL, &old_feature_mask,\n-\t\t\t\t\t NULL);\n+\t\t\t\t\t &old_priority, NULL);\n gcc_assert (parse_res == AARCH_PARSE_OK);\n \n parse_res = aarch64_parse_fmv_features (new_str, NULL, &new_feature_mask,\n-\t\t\t\t\t NULL);\n+\t\t\t\t\t &new_priority, NULL);\n gcc_assert (parse_res == AARCH_PARSE_OK);\n \n- return old_feature_mask == new_feature_mask;\n+ if (old_feature_mask != new_feature_mask)\n+ return false;\n+\n+ /* Accept the case where the old version had a defined priority value but the\n+ new version does not, as we infer the new version inherits the same\n+ priority. */\n+ if (old_decl && new_decl && old_priority != new_priority\n+ && (new_priority != 0))\n+ {\n+ error (\"%q+D has an inconsistent function multi-version priority value\",\n+\t new_decl);\n+ inform (DECL_SOURCE_LOCATION (old_decl),\n+\t \"%q+D was previously declared here with priority value of %d\",\n+\t old_decl, old_priority);\n+ }\n+\n+ return true;\n }\n \n /* Implement TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P. Use an opt-out\n@@ -30756,6 +30838,20 @@ aarch64_merge_decl_attributes (tree olddecl, tree newdecl)\n \taarch64_check_arm_new_against_type (TREE_VALUE (new_new), newdecl);\n }\n \n+ /* For target_version and target_clones, make sure we take the old version\n+ as priority syntax cannot be added addetively. */\n+ tree old_target_version = lookup_attribute (\"target_version\", old_attrs);\n+ tree new_target_version = lookup_attribute (\"target_version\", new_attrs);\n+\n+ if (old_target_version && new_target_version)\n+ TREE_VALUE (new_target_version) = TREE_VALUE (old_target_version);\n+\n+ tree old_target_clones = lookup_attribute (\"target_clones\", old_attrs);\n+ tree new_target_clones = lookup_attribute (\"target_clones\", new_attrs);\n+\n+ if (old_target_clones && new_target_clones)\n+ TREE_VALUE (new_target_clones) = TREE_VALUE (old_target_clones);\n+\n return merge_attributes (old_attrs, new_attrs);\n }\n \n@@ -32771,8 +32867,8 @@ aarch64_check_target_clone_version (string_slice str, location_t *loc)\n auto isa_flags = aarch64_asm_isa_flags;\n std::string invalid_extension;\n \n- parse_res\n- = aarch64_parse_fmv_features (str, &isa_flags, NULL, &invalid_extension);\n+ parse_res = aarch64_parse_fmv_features (str, &isa_flags, NULL, NULL,\n+\t\t\t\t\t &invalid_extension);\n \n if (loc == NULL)\n return parse_res == AARCH_PARSE_OK;\ndiff --git a/gcc/testsuite/gcc.target/aarch64/fmv_priority3.c b/gcc/testsuite/gcc.target/aarch64/fmv_priority3.c\nnew file mode 100644\nindex 00000000000..535e99ab6a0\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/fmv_priority3.c\n@@ -0,0 +1,26 @@\n+/* { dg-do compile } */\n+/* { dg-require-ifunc \"\" } */\n+/* { dg-options \"-O0 -fdump-ipa-targetclone1-details\" } */\n+\n+int foo [[gnu::target_version(\"dotprod;priority=1\")]] (void);\n+int foo [[gnu::target_version(\"default\")]] (void) { return 1; }\n+int foo [[gnu::target_version(\"dotprod;priority=1\")]] (void) { return 2; }\n+int foo [[gnu::target_version(\"sve\")]] (void) { return 3; }\n+\n+// Priority1 dotprod > sve\n+/* { dg-final { scan-ipa-dump-times \"Version order for foo/\\[0-9\\]+:\\\\nfoo\\.default/\\[0-9\\]+\\\\nfoo\\._Msve/\\[0-9\\]+\\\\nfoo\\._Mdotprod/\\[0-9\\]+\\\\n\" 1 \"targetclone1\" } } */\n+\n+int bar [[gnu::target_version(\"dotprod;priority=2\")]] (void);\n+int bar [[gnu::target_version(\"default\")]] (void) { return 1; }\n+int bar [[gnu::target_version(\"dotprod\")]] (void) { return 2; }\n+int bar [[gnu::target_version(\"sve;priority=1\")]] (void) { return 3; }\n+\n+// Priority2 dotprod > Priority1 sve\n+/* { dg-final { scan-ipa-dump-times \"Version order for bar/\\[0-9\\]+:\\\\nbar\\.default/\\[0-9\\]+\\\\nbar\\._Msve/\\[0-9\\]+\\\\nbar\\._Mdotprod/\\[0-9\\]+\\\\n\" 1 \"targetclone1\" } } */\n+\n+int baz [[gnu::target_version(\"default\")]] (void) { return 1; }\n+int baz [[gnu::target_version(\"dotprod;priority=1\")]] (void) { return 2; }\n+int baz [[gnu::target_version(\"sve;priority=1\")]] (void) { return 3; }\n+\n+// Priority1 sve > Priority1 dotprod\n+/* { dg-final { scan-ipa-dump-times \"Version order for baz/\\[0-9\\]+:\\\\nbaz\\.default/\\[0-9\\]+\\\\nbaz\\._Mdotprod/\\[0-9\\]+\\\\nbaz\\._Msve/\\[0-9\\]+\\\\n\" 1 \"targetclone1\" } } */\ndiff --git a/gcc/testsuite/gcc.target/aarch64/fmv_priority_error1.c b/gcc/testsuite/gcc.target/aarch64/fmv_priority_error1.c\nnew file mode 100644\nindex 00000000000..7b7665367c1\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/fmv_priority_error1.c\n@@ -0,0 +1,11 @@\n+/* { dg-do compile } */\n+/* { dg-require-ifunc } */\n+/* { dg-options \"-std=c23 -pedantic-errors\" } */\n+\n+// Value was 2, now is 1\n+int foo [[gnu::target_version(\"dotprod;priority=2\")]] (void); /* { dg-message \".foo \\\\\\[\\\\\\[target_version\\\\\\(.dotprod;priority=2.\\\\\\)\\\\\\]\\\\\\]. was previously declared here with priority value of 2\" } */\n+int foo [[gnu::target_version(\"dotprod;priority=1\")]] (void) { return 2; } /* { dg-error \".foo \\\\\\[\\\\\\[target_version\\\\\\(.dotprod;priority=1.\\\\\\)\\\\\\]\\\\\\]. has an inconsistent function multi-version priority value\" } */\n+\n+// Value was 0, now is 2\n+int bar [[gnu::target_version(\"dotprod\")]] (void); /* { dg-message \".bar \\\\\\[\\\\\\[target_version\\\\\\(.dotprod.\\\\\\)\\\\\\]\\\\\\]. was previously declared here with priority value of 0\" } */\n+int bar [[gnu::target_version(\"dotprod;priority=2\")]] (void) { return 2; } /* { dg-error \".bar \\\\\\[\\\\\\[target_version\\\\\\(.dotprod;priority=2.\\\\\\)\\\\\\]\\\\\\]. has an inconsistent function multi-version priority value\" } */\ndiff --git a/gcc/testsuite/gcc.target/aarch64/fmv_priority_error2.c b/gcc/testsuite/gcc.target/aarch64/fmv_priority_error2.c\nnew file mode 100644\nindex 00000000000..0f212ff6aae\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/fmv_priority_error2.c\n@@ -0,0 +1,8 @@\n+/* { dg-do compile } */\n+/* { dg-require-ifunc } */\n+/* { dg-options \"-std=c23 -pedantic-errors\" } */\n+\n+int foo [[gnu::target_version(\"dotprod;priority=0\")]] (void); /* { dg-error \"invalid feature modifier .priority=0. of value .dotprod;priority=0. in .target_version. attribute\" } */\n+int foo [[gnu::target_version(\"dotprod;priority=-1\")]] (void); /* { dg-error \"invalid feature modifier .priority=-1. of value .dotprod;priority=-1. in .target_version. attribute\" } */\n+int foo [[gnu::target_version(\"dotprod;priority=256\")]] (void); /* { dg-error \"invalid feature modifier .priority=256. of value .dotprod;priority=256. in .target_version. attribute\" } */\n+int foo [[gnu::target_version(\"priority=4;dotprod\")]] (void); /* { dg-error \"invalid feature modifier .priority=4. of value .priority=4;dotprod. in .target_version. attribute\" } */\n", "prefixes": [ "v6", "2/2" ] }