{"id":2229518,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2229518/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/20260428113441.751449-1-abhishek.kaushik@arm.com/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.1/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":"<20260428113441.751449-1-abhishek.kaushik@arm.com>","date":"2026-04-28T11:34:41","name":"[v4] match.pd: Allow FNMA fold through conversions","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"e23bd73faae75305a0fd2fe08f3441bc563cabbe","submitter":{"id":92773,"url":"http://patchwork.ozlabs.org/api/1.1/people/92773/?format=json","name":"","email":"Abhishek Kaushik abhishek.kaushik@arm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/20260428113441.751449-1-abhishek.kaushik@arm.com/mbox/","series":[{"id":501829,"url":"http://patchwork.ozlabs.org/api/1.1/series/501829/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=501829","date":"2026-04-28T11:34:41","name":"[v4] match.pd: Allow FNMA fold through conversions","version":4,"mbox":"http://patchwork.ozlabs.org/series/501829/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2229518/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2229518/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=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com\n header.a=rsa-sha256 header.s=selector2-armh-onmicrosoft-com\n header.b=V6Apu14b;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::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=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com\n header.a=rsa-sha256 header.s=selector2-armh-onmicrosoft-com header.b=V6Apu14b","sourceware.org;\n dmarc=fail (p=none dis=none) header.from=arm.com","sourceware.org; spf=pass\n smtp.helo=OSPPR02CU001.outbound.protection.outlook.com","server2.sourceware.org;\n arc=pass smtp.remote-ip=52.102.179.62"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::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 4g4dfq6rqKz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 21:36:03 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 1DC024BB593D\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 11:36:02 +0000 (GMT)","from OSPPR02CU001.outbound.protection.outlook.com\n (mail-norwayeastazhn15013062.outbound.protection.outlook.com [52.102.179.62])\n by sourceware.org (Postfix) with ESMTPS id 5298A4B920C1\n for <gcc-patches@gcc.gnu.org>; Tue, 28 Apr 2026 11:35:03 +0000 (GMT)","from AM0PR02CA0111.eurprd02.prod.outlook.com (2603:10a6:20b:28c::8)\n by AS8PR08MB10004.eurprd08.prod.outlook.com (2603:10a6:20b:63d::22)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr\n 2026 11:34:58 +0000","from AMS1EPF00000044.eurprd04.prod.outlook.com\n (2603:10a6:20b:28c:cafe::c1) by AM0PR02CA0111.outlook.office365.com\n (2603:10a6:20b:28c::8) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Tue,\n 28 Apr 2026 11:34:58 +0000","from nebula.arm.com (172.205.89.229) by\n AMS1EPF00000044.mail.protection.outlook.com (10.167.16.41) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9846.18 via Frontend Transport; Tue, 28 Apr 2026 11:34:58 +0000","from AZ-NEU-EX03.Arm.com (10.240.25.137) 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; Tue, 28 Apr\n 2026 11:34:52 +0000","from ip-10-249-57-250.eu-west-1.compute.internal (10.249.57.250) by\n mail.arm.com (10.240.25.137) with Microsoft SMTP Server\n (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend\n Transport; Tue, 28 Apr 2026 11:34:52 +0000"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 1DC024BB593D","OpenDKIM Filter v2.11.0 sourceware.org 5298A4B920C1"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 5298A4B920C1","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 5298A4B920C1","ARC-Seal":["i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1777376103; cv=pass;\n b=LYWlU6H1TZ1tIbxe2yXcmeySPfPyTO3CYxwFGTX2xkXyWpLxygU2/c2s8GIiH7TRJCvLDSKlbsnvnvHopZB6V5JDJLbjRX9HGX6Hrsa1F6+9ZU0DQ0NbcMC8DV5No8YQIv5KWWOTlENZSh2jZab3ZnNmcxNdzZFSoiloD7gDeA8=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=QIsSjVe5TaCciqhZMBRcm5KvIXVe/nL/FNkPln5JxuM9P8QMZqDAq6cSqjD5MkoDUNygjhCdwRppJ9HThEJdWuOYIa/2UOV5Tf2iP21DxtmME5KHrrks/KV3RlBii4+aXrIWNG5VKwtB3FGqa6E/q80CzRNAiGZDucen4SZpM3vw1aUhueZIO5mWzX9swZZ2MWLIocTktsOUELm3lQPK7vqRM3jefNQD753rSLiXnktfUJzGsFJE0XfjqQVOWuQOqhhxB9EMF75uGJvRbCCHWVaD9BTDhhY1ILKa+36aox0S7XrW+zMbHqPkA6R7hP0hpgHoytljrpaUEzPBLUGQ2g=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777376103; c=relaxed/simple;\n bh=M8d3v2n8P/jh5Xmj9EcKwvN1baIoUjdLFvauqWiJwT4=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=KTppLYCcfGSiVVT8C9cUzS/LN8Wr35UMr91XnOhkNWUpJBoPximxtQgNsG3LVxZAUHMbkGRDR70QJgPm2kWS8hMrti4fdCFUVbrZ0pVdqufhT+uQQYYM3QT6Kkk0unr400xk+4zSQEQf6dZqxBXYywEQ4omCS6xZ1EihbRmBQQI=","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=fmqCJ0PH+ystB0+gqABGjooWbrpkuagMSed/k1+pthI=;\n b=HcUsjwTRBcU7zO+vnOl4rkGSdBUh3ycDJOzY5f8WnmNIDVuRPI8Zo8EjxgUDynd5jzRdPZf8EWDFcin92vQvdzL/mCpFlHQErALs48Z4DR7sjnUQPYT0lSiJB6ZsVf0Rt8de5PdvOHU+UhnhQgO3B5s9fbd84xbCUKaC0w0rkmdSss5Lto0LXy9ljEUKEU6FCh1+yTfZvR4MBCi4QJYpMpBeGu3lgczmT1DhyJr7/SbKgEiJcWNdS7SOOjXDxYVCHUqX7WkuWsjd/9vGRbMgCjCoQZGfMGOla77KuMRowUdnDD8w2fHnXGXwTSL6+F7gTjkigKElel0VJSE6bX4tKw=="],"ARC-Authentication-Results":["i=2; server2.sourceware.org","i=1; mx.microsoft.com 1; spf=none (sender ip is\n 172.205.89.229) smtp.rcpttodomain=gmail.com smtp.helo=nebula.arm.com;\n dmarc=none; dkim=none (message not signed); arc=none (0)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com;\n s=selector2-armh-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=fmqCJ0PH+ystB0+gqABGjooWbrpkuagMSed/k1+pthI=;\n b=V6Apu14bhS6GkWK877RS4LoJoT1uSv1spMgfpVXdyadxEyR56ZhrA3SzP4YXn2gFq0anTYyWvohVxG4NP8xa8qGq0+YsziWVz2GMXz4xTtY33X+whkVK8kLY5L3NqaQ1wAlfsShLUK/pDZUvJmDZXo3JCPEyA7gUvhburW7LUU4=","X-MS-Exchange-Authentication-Results":"spf=none (sender IP is 172.205.89.229)\n smtp.helo=nebula.arm.com; dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=;","Received-SPF":"None (protection.outlook.com: nebula.arm.com does not designate\n permitted sender hosts)","From":"<Abhishek Kaushik abhishek.kaushik@arm.com>","To":"<richard.guenther@gmail.com>","CC":"<abhishek.kaushik@arm.com>, <andrew.pinski@oss.qualcomm.com>,\n <gcc-patches@gcc.gnu.org>","Subject":"[PATCH v4] match.pd: Allow FNMA fold through conversions","Date":"Tue, 28 Apr 2026 11:34:41 +0000","Message-ID":"<20260428113441.751449-1-abhishek.kaushik@arm.com>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"\n <CAFiYyc2zicP1-v0FFxzRHZmkCHsdbVEijs1rc0u_eoejzVi-Xg@mail.gmail.com>","References":"\n <CAFiYyc2zicP1-v0FFxzRHZmkCHsdbVEijs1rc0u_eoejzVi-Xg@mail.gmail.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-EOPAttributedMessage":"0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AMS1EPF00000044:EE_|AS8PR08MB10004:EE_","X-MS-Office365-Filtering-Correlation-Id":"815257ab-a3dd-4efa-1912-08dea51a2d6c","NoDisclaimer":"true","X-MS-Exchange-SenderADCheck":"2","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|35950700016|61400799027|82310400026|376014|13003099007|1557600115;","X-Microsoft-Antispam-Message-Info":"\n Q2GYDX7pqsQMT0iT3phYYowcevOdjZSsoP5y3JX9FihJuCRcXdrlWQhHVIhhu6mS62x3QuLPhZMUw5umRX1k96eDkpIs3IcnVIDIv0z8QVmYoRhuvvmxVsmnAeN4B46IZ6uljeoIYHRnePy6usl84AT/OkE+8jmphU60PMNYQa5fo9h8OL0nZep6ahfT4YmYJ8QckHKmNsKl71K9IVkE0o844kt4JRG3L67iIWraVmU10u/Y03VPEMWPufAptsQ02Tk5ITOLGuSBsE9jXYujP9plpLfRxcw3PBMf7bDP1X66jg3rbKFmb94K+Fl4hzFaCgZwxvBUSYkrHdGY9Oeb7z10L+I8K7GbXoukTBkaFHYwJt45PY24l+mzfJecj6nddUcegFQLS3oUWFsxfxcaqEDMsx1C7f24MqTz4zyCbvSDdtQhXSZXerB6Qfo/3QyzcXlA2MvWZZBP0KN/ZI3zz64jqn9C+0qVwJf2gX8OMo3fOj5QiH/5cV7Al7H1N8Y9Ai/70bYdpH2NAxXnTooBQdCUZlc6oCtjceq4wSHXl8ICN8Cp9EJDp0Z1DpPul2o1zgHlqMHwm4dCdrAmW7/hNc09Qz4iGiAodWfXNmPrMlge4+7eQ28Yn7y/mJUSE/k2wEy60Hy4O6vYQqEfyFUpLqsDayrJvXHW5jXjwqwQDev76tafZRVGs7O0qU5mKSFpwbwFDuZkPP1nWuGMlxQb1U0J97nhE/f8Wql3i/rvsUgN1GngW2NgmP8rjeXbkYuwwPehRyoIQ116hRLtAMrSu2jPqKT4OO60fK0YDdfgf/wyThIBhwi0qgSiLcTkwsurSGRCIH82HwU/rdWA+Bovjn+QKgcJj/1dATSZA0iAz089HWibkjMRInkdnu/RzNXhH9SjoCODJ9I1qMm3kgbFVN4UvoKvexZ+s9vmApcG7vT3WFyKT4NVNnHwda3NcZCF/7NR3hBdBKOa/0Bhx/XaMOrm9FLTM9XN4bxLtHGvlIKC6FzcBgDR7R51ItalhWXP7bZH5rJo3PFUvNEE7To5SffxNvukUYB7h90qCS5aTh7hfyM6lbarRMbipM8YUHBhCP2yFaOf2uUpWRpea7FPsR79bAzqVvoVCKXPanh5p3wCZo9q8z61gqd28V8nb+8AGGFAfn8cXvmasf5hU5P+9f7/XaAaLV4NIQozxoVHnMeJBCqrlMK+0X6F9WXcVhPn0GtQLoM4aJU1zu8gFmY6Rg==","X-Forefront-Antispam-Report":"CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:6;\n SRV:;\n IPV:NLI; SFV:SPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:OSPM;\n SFS:(13230040)(35950700016)(61400799027)(82310400026)(376014)(13003099007)(1557600115);\n DIR:OUT; SFP:1501;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n FoCjc4KB5AYMUyPW2SKI3I7uXUkCsObZ2iQ+jyLcOgZYIPE1d+BnXtm8zhfOmhPi8VUrgVqnwhcHfcokK57kQAQeF7e3qcuqmH/+qGQawp9zpT+iXIC8BBEU8yzVuJvoXaXVWy2ZKVDakSrn7dnSShnSZjyqLMwIL2Hcn55qwrwBZXmKV2Ks3vsK3T97AJhd+LVutcP6x2Ib+loQOo5uFzEac2Xd9Q30G24PJZmP7k0sYPOoGRCSLmk4xQ7f/jvreUwu9moOIzu7zd/HU7md5ewI1kPRdLbKjYZwMBDoA0Y6tb9ryFtHT8LCFM5YAUnwK1TjzkUjhD1+VbN44gPju07oZT24DEJBlwEyhsdYYwpC1d3HzPU2Cjqq+FG751XzxD7N5RjTJJQBXfmGv/44cbiHtorBtOwPAuWZ+F5vxHZKio9zMdGZxVIknE/HWUhyrZGdWF1EmfBZW+eERHIJHG946qcfPbRaGOChRXdGOYGyM0OCAvXTzNhPT3197Tlf/KdXEylc6y94oIO86VcxVhOJDv/ERog+04qCy6YEX8ADE7lIzvAbnb6I4NmXXvsKVtGDl+l9GQ5xMzVo91TqHA==","X-OriginatorOrg":"arm.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"28 Apr 2026 11:34:58.2571 (UTC)","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 815257ab-a3dd-4efa-1912-08dea51a2d6c","X-MS-Exchange-CrossTenant-Id":"f34e5979-57d9-4aaa-ad4d-b122a662184d","X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp":"\n TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[172.205.89.229];\n Helo=[nebula.arm.com]","X-MS-Exchange-CrossTenant-AuthSource":"\n AMS1EPF00000044.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Anonymous","X-MS-Exchange-CrossTenant-FromEntityHeader":"HybridOnPrem","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AS8PR08MB10004","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":"From: Abhishek Kaushik <abhishek.kaushik@arm.com>\n\nThe FMA folds in match.pd currently only matches (negate @0) directly.\nWhen the negated operand is wrapped in a type conversion\n(e.g. (convert (negate @0))), the simplification to IFN_FNMA does not\ntrigger.\n\nThis prevents folding of patterns such as:\n\n*c = *c - (v8u)(*a * *b);\n\nwhen the multiply operands undergo vector type conversions before being\npassed to FMA. In such cases the expression lowers to neg + mla/mad\ninstead of the more optimal msb/mls on AArch64 SVE, because the current\nfold cannot see through the casts.\n\nExtend the match pattern to allow optional conversions on the negated\noperand and the second multiplicand:\n\n(fmas:c (nop_convert? (negate @0)) @1 @2)\n\nWhen the inner operand has a signed type, the fold rewrites the\nexpression directly as:\n\nIFN_FNMA (convert @0) @1 @2\n\nFor unsigned inner types, the fold performs the multiply-subtract in the\nunsigned domain and converts the result back to the original type:\n\nconvert (IFN_FNMA @0 (convert:t @1) (convert:t @2))\n\nThe match is restricted to nop_convert on the negated operand to avoid\nfolding through value-changing conversions. This enables recognition of\nthe subtraction-of-product form even when vector element type casts are\npresent.\n\nThe fold is only performed when signed overflow is unobservable for\nboth the outer FMA operation and the inner negation. This avoids\nchanging wrapping, trapping, or sanitized overflow behaviour when\nlooking through the nop conversion on the negated operand.\n\nWith this change, AArch64 SVE code generation is able to select msb/mls\ninstead of emitting a separate neg followed by mla/mad.\n\nThis patch was bootstrapped and regression tested on aarch64-linux-gnu.\n\n\tPR/target 123924\ngcc/\n        * match.pd: Allow conversions in FMA-to-FNMA fold.\n\ngcc/testsuite/\n        * gcc.target/aarch64/sve/fnma_match.c: New test.\n        * gcc.target/aarch64/sve/pr123897.c:\n        Update the test to scan for FNMA in the tree dump.\n---\nPrevious discussion:\nhttps://inbox.sourceware.org/gcc-patches/20260304081204.2271732-1-abhishek.kaushik@arm.com/\n\nChanges since v3:\n- Added checks for signed integer overflow\n\nChanges since v2:\n- Fixed coding style issues.\n- Corrected the PR number in the commit message.\n\nChanges since v1:\n- Updated the patch to address review comments.\n- Simplified the pattern by removing the conversion match on the second operand.\n- Added new tests in the existing test file.\n- Removed tests that showed existing codegen didn't break.\n\n gcc/match.pd                                  | 18 +++++-\n .../gcc.target/aarch64/sve/fnma_match.c       | 59 +++++++++++++++++++\n .../gcc.target/aarch64/sve/pr123897.c         |  3 +-\n 3 files changed, 78 insertions(+), 2 deletions(-)\n create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c","diff":"diff --git a/gcc/match.pd b/gcc/match.pd\nindex 54d738e0403..875fdc8b80d 100644\n--- a/gcc/match.pd\n+++ b/gcc/match.pd\n@@ -10314,7 +10314,23 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)\n   (simplify\n    (negate (fmas@3 @0 @1 @2))\n    (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))\n-    (IFN_FNMS @0 @1 @2))))\n+    (IFN_FNMS @0 @1 @2)))\n+  (simplify\n+   (fmas:c (nop_convert? (negate @0)) @1 @2)\n+   (with { tree t = TREE_TYPE (@0); }\n+    (if ((!ANY_INTEGRAL_TYPE_P (type)\n+\t  || TYPE_UNSIGNED (type)\n+\t  || (TYPE_OVERFLOW_UNDEFINED (type)\n+\t      && !TYPE_OVERFLOW_SANITIZED (type)))\n+\t  && (!ANY_INTEGRAL_TYPE_P (t)\n+\t      || TYPE_UNSIGNED (t)\n+\t      || (TYPE_OVERFLOW_UNDEFINED (t)\n+\t      && !TYPE_OVERFLOW_SANITIZED (t))))\n+   /* Move the negation into FNMA only when signed overflow is\n+      unobservable for both the outer operation and the inner negate.  */\n+   (if (!TYPE_UNSIGNED (t))\n+    (IFN_FNMA (convert @0) @1 @2)\n+    (convert (IFN_FNMA @0 (convert:t @1) (convert:t @2))))))))\n \n  (simplify\n   (IFN_FMS:c (negate @0) @1 @2)\ndiff --git a/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c b/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c\nnew file mode 100644\nindex 00000000000..9b6d6fe6e3e\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/sve/fnma_match.c\n@@ -0,0 +1,59 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -march=armv9-a -msve-vector-bits=256\" } */\n+\n+typedef __attribute__((__vector_size__(sizeof(int)*8))) signed int v8i;\n+typedef __attribute__((__vector_size__(sizeof(int)*8))) unsigned int v8u;\n+\n+void g(v8i *a, v8i *b, v8u *c)\n+{\n+  *c = *c - (v8u)(*a * *b);\n+}\n+\n+v8u g_(v8i a, v8i b, v8u c)\n+{\n+  return c - (v8u)(a * b);\n+}\n+\n+void h(v8u *a, v8u *b, v8i *c)\n+{\n+  *c = *c - (v8i)(*a * *b);\n+}\n+\n+v8i h_(v8u a, v8u b, v8i c)\n+{\n+  return c - (v8i)(a * b);\n+}\n+\n+void x(v8u *a, v8u *b, v8i *c)\n+{\n+  *c = *c + ((v8i)(-*a) * (v8i)*b);\n+}\n+\n+v8i x_(v8u a, v8u b, v8i c)\n+{\n+  return c + ((v8i)(-a) * (v8i)b);\n+}\n+\n+void y(v8u *a, v8i *b,v8i *c)\n+{\n+  *c = *c + ((v8i)(-*a) * *b);\n+}\n+\n+v8i y_(v8u a, v8i b, v8i c)\n+{\n+  return c + ((v8i)(-a) * b);\n+}\n+\n+void z(v8i *a, v8u *b, v8u *c)\n+{\n+  *c = *c + ((v8u)(-*a) * *b);\n+}\n+\n+v8u z_(v8i a, v8u b, v8u c)\n+{\n+  return c + ((v8u)(-a) * b);\n+}\n+\n+/* { dg-final { scan-assembler-times \"\\\\tmsb\\\\t\" 5 } } */\n+/* { dg-final { scan-assembler-times \"\\\\tmls\\\\t\" 5 } } */\n+/* { dg-final { scan-assembler-not \"\\\\tneg\\\\t\" } } */\ndiff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c b/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c\nindex d74efabb7f8..45bc52522a9 100644\n--- a/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c\n+++ b/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c\n@@ -13,4 +13,5 @@ void g(v8i *a,v8i *b,v8u *c)\n   *c = *c - (v8u)(*a * *b);\n }\n \n-/* { dg-final { scan-tree-dump-times \"\\.FMA\" 2 \"widening_mul\" } } */\n+/* { dg-final { scan-tree-dump-times \"\\.FMA\" 1 \"widening_mul\" } } */\n+/* { dg-final { scan-tree-dump-times \"\\.FNMA\" 1 \"widening_mul\" } } */\n","prefixes":["v4"]}