{"id":2175720,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2175720/?format=json","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.0/projects/17/?format=json","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=json","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=json","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"]}