| Message ID | LO6P265MB6224CD53E79B4B9D35FDBB8BB4D32@LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM |
|---|---|
| Headers |
Return-Path: <gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7474F4BB24C4 for <patchwork@sourceware.org>; Wed, 5 Aug 2026 10:03:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7474F4BB24C4 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=outlook.com header.i=@outlook.com header.a=rsa-sha256 header.s=selector1 header.b=Obh4k8uK X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from LO2P265CU024.outbound.protection.outlook.com (mail-uksouthazolkn19011072.outbound.protection.outlook.com [52.103.37.72]) by sourceware.org (Postfix) with ESMTPS id BD6694BAE7EC for <gcc-patches@gcc.gnu.org>; Wed, 5 Aug 2026 10:02:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BD6694BAE7EC Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=outlook.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=outlook.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BD6694BAE7EC Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.103.37.72 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1785924159; cv=pass; b=xu8o7gSTuvxNJpccTmY/a3uxUAVKX9J61QSu0O1K7kjOc8/TSeau+9axIN9XPdRBa55/9ixcXZ2P9ogWSdySKqtY38hZjkuUKDL1PdLJbae2xRUXGuGDLfCrU91qHHk+v+iIH+0pm6ULqiZrELySjUKlQrIaEXW3ld508XkP55E= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1785924159; c=relaxed/simple; bh=w0goNny/wuwQClGLFkwbG++UL5A2rxNbCqJCMs07gyk=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=U63tGuWMA5Rn4jmjXTVyq8Xl8GjV3z4TzR9JnlPoYy0iekTrvA3sjx1e9LfvpLY4aELUS1bsK9DEBb8YQHai3nnrzJCuZB36vb6gGwd6Vz7BJY3gTDC14UEnwGSjkRaLA9B9hcH83OM8Tpvn9d1CO2k1Pdy5PC4jbxPtpMJCx+E= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=outlook.com header.i=@outlook.com header.a=rsa-sha256 header.s=selector1 header.b=Obh4k8uK DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BD6694BAE7EC ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OkMm3GOZnlQnAU96dYitQ3H99UX6izboBD5WaPEuS+mTrxaan67maJFf0VgqevvwRP6KAnsDjWvVIlw31LFaeSqeXmq0cewnwHCGt8ZcRjAWWM2ds+frVfpkvJJQYpH24Ix2xk4p72sBiZccN5Yr5/BRqhV4KjVJwIvLoiNNcWeJWuoMS85CvHO23xE6pzkhta47m/f1RX2eb2Te3gPnB13ivy/vib2B/14f0vsEIkVKu4TwpzH/uxT751L8sS0lZHn/MVHADvLcF7wiIgo+pIadbbagik0Ys5e5R4z6yoAB9bDGfjvZ8qkJq6LcJDlDhui50XfGQz3tU5KZZpsxBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=TCfjG9+dBBif/b3tbtZo1FInhWBpsAfZHhIxRsaqLG4=; b=vypyfqGSNsu+P50XzBuc8eYPh3HXgQWUuq9LQErdWO9vB8lmxp6C0pT8GmClzA40o3HKmJZG9CIgbWtYYEKs+N3u4o0YheRS97OFeAswRbwZu3r7W87hPHgXWwT9qBBAMCbMILMfylHBo4E5U57vzr8mutN6qxoQxyPiXe695gpGyhVt/Q6X4Fv9znAL1uIqCGms6DJLJJCo8n2JZhQdU415W7V3Zgi5r/xUR/Ss4FlZ3+aXLhVtDz8zevF3wHtdZ4B0ZK1Bde+KWPE6ZAPLuPt/Lf7nObhR4sOJhC+P99XUa7TV1GBSlw6CQixiX8WxY+xzQp6EEVp8lF2elKWIqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TCfjG9+dBBif/b3tbtZo1FInhWBpsAfZHhIxRsaqLG4=; b=Obh4k8uKKtuPTLHiiok41zQc+Y5cCmKNiBltm7JMSzzAKhPPKrFO9R7/Ioz7vzVbjuvnf53X4zWebojl+oXKA9L/O1PtlEuWTlcsYMnFpbWgdug3OxKXKVFsZeeNfT96sXLLg32LlzSyZyRZ+ejZ9qa179GcLHHPuOpo6PWNn3uiW7/ih9SSGTGP2UFpp9iOtQNBW6Rc0kLR3N5io5hwdjGH+5zpK/GTWza4kRlu/R+YnvKjtWq1BuaIdJDJ+ekWf3to8baV5HDieosao2eNrm3MDX7RtxdzQFST+LHJ0nA3TOvUgr+3bMN8NouMC9QyO2th4wf6q8Bk+ntGc2mtPQ== Received: from LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2b1::6) by CWLP265MB5868.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1b0::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.19; Wed, 5 Aug 2026 10:02:35 +0000 Received: from LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM ([fe80::839:df74:7f0e:b82a]) by LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM ([fe80::839:df74:7f0e:b82a%2]) with mapi id 15.21.0292.015; Wed, 5 Aug 2026 10:02:35 +0000 From: Luis Silva <luismgsilva@outlook.com> To: gcc-patches@gcc.gnu.org Cc: Jeff Law <jeffreyalaw@gmail.com>, Kito Cheng <kito.cheng@gmail.com>, Palmer Dabbelt <palmer@dabbelt.com>, Robin Dapp <rdapp.gcc@gmail.com>, Luis Silva <luis.silva@globalfoundries.com>, Artemiy Volkov <artemiyv@acm.org>, Michiel Derhaeg <michiel.derhaeg@globalfoundries.com>, Loeka Rogge <loeka.rogge@globalfoundries.com>, Alex Turjan <alexandru.turjan@globalfoundries.com>, Luis Silva <luismgsilva@outlook.com> Subject: [PATCH v2 0/4] RISC-V: ARC-V RHX-100 fusion and scheduling Date: Wed, 5 Aug 2026 11:02:08 +0100 Message-ID: <LO6P265MB6224CD53E79B4B9D35FDBB8BB4D32@LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM> X-Mailer: git-send-email 2.39.5 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MA4P292CA0012.ESPP292.PROD.OUTLOOK.COM (2603:10a6:250:2d::9) To LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2b1::6) X-Microsoft-Original-Message-ID: <20260805100212.10852-1-luismgsilva@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO6P265MB6224:EE_|CWLP265MB5868:EE_ X-MS-Office365-Filtering-Correlation-Id: 49413165-9e28-416d-2bf8-08def2d8aaee X-Microsoft-Antispam: BCL:0; ARA:14566002|41001999006|5062599005|5072599009|4140399003|19110799012|8060799015|25010399006|15080799012|23021999003|19101099003|440099028|3412199025|2607281247196008|10035399007|52005399003|40105399003|1710799026; X-Microsoft-Antispam-Message-Info: gcLb6YEE9AlJ0LdO03KAeYmiGKAFPBEmhFfLkmnG6k5q+REHdw7DLDJFljehlT+6O7u7xhVPrKx77YTZtlu30812651irqrvHBLpZGJCLH3IODPJ8sdgmB2dd+q2on6MCSSvKoQ5lLGaUYr6WPtMBwoiHPmnReAVouzhDGJ6ZMpTQidhPU7Sl7JqLLKVR+QMusDL/KukCnMVB1NpxfsA8n4OWujSqt4ZAEaYgqbNyXhmqC94Qdre/Eou3qwqw07jN1Fj8JTfvB9pVlGBK//fj2wdo79NWVm0PBPzN3kGvI9U15ZkVs77gIkjbmAq7Z1D7l4r5tN7cU6OP0QnKjza5lhN0VNk1et5yIEgUaQgvWno6EFYUFFWXmp/uKYOt/GhAhPWGj/apvzs6FNbUNdrFQtue74WfUVaytERYOSHn2f1n66TrZh/k4Eae+Uc6HSClN1wCVOb0SUiSMAE6V9bGFKkD1I6Nv6mjhQaxGOidPNuX0cyOMQvJIKujcLnr7qTDyfpGUpD8Aeh1ouRozSzupskr1CFxXr7HAJArgZnFONaAhOy9SHWqKHRiDoKHHSwn7nbpU7ad+2qUxvRX9I5OLHTNf9hlVh79fvNx3KMEEHZbmXpA5mS0YTmv+K5FSMCVjKPOf7KBa6E/i0gPO4YmsBdJGMnjrs0oIO+k6NjmFHX/4ylAcFF7Qd9cP0+fSDwQlAZ61nbKhnuCiWSoxhuQ/F7sEPcOs9sJyk5pNnYdwE+IJv7fEmA5fxrTPjG1QBQ27+YZoxecm9/vad/TKXAdI7u2B7Cm6x/oRSmL5ves/sjn42An90eqLsPlyew7ZjrpOvmnS6Nctw847yaJbPh1FOczrR674GU6BOc9TfHhNUhIGWOZNcjqsgbBFuC2nxPdUGfiX+WthFPEIctxxe5wY8sUKtslzF775Ic0+YLsR8kRNzq5+Os71FnSTpiII0Gyq93Jp8LNIhk7onze/6QnAVKc76c2to/tCSD3w9JU2/b7wu3BoUgZjF2a8dQ3V0yv0ENMgQuB+x5BlDQKeFCrie7+b5xteefKpmNKyL+NBvcJOGcJ9bw8nqOh7fC7RjB X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nafdeSowi7VJmVAcAk5v4n4G+dywu4dSgiWdBVJxJuC3sGlijvFUS3pLgxsOmUYac5FcuA39KcrhlwrVm75gx0+W/Gjit+odgXHxmLg7cFNqxZ2g79F3Ww0C77Lp0Dupo4z/U5ULdTAc/5AbVGxFBiUaG0II+aUS98OjR9fCE9wViC4ys5e82nRfKn7GxQzBCVU475UTszunnDWPVkJc9nsi/uK661lc5TOu6VEDAbeuhE3/g+2kaoA8fmyiMH+WgZUJtLo4AYG8PdbnO8ijco+o/gBRJYIwEB2rfTPm4TmBt4dIyy0mnCPPJ7yhKdMNdifjJPEBTcdkw57l8tl5vCgTTCoypceDnjJKG3PY6Gm4GGE/xPLswYJbfi4OicSmdC3dQHRmsIYzEerI5mMnSBHGUMOoToF266jD52vY3hiYW3f0EMZCwpkAVtZXsSC+4jh+VnP+sx/d5GVpK4Nfcb9JRkqn2wDKzgtH4R5YUQ+YSpvk3udzJgQGrlNL69edw6N1DFuxzh6Tb9eN+PcgtBFvIHtyFyU9SQWDEJWZYhdigP4mVBXHfQtXQXDsbUh2bSt/pC5xENS9EnUMN0uPnOwGJkhBPcQGu+bxVmCgnPE2PH1MLP/CrmnZqcWJvjnSW++I/D3Wap0UOOwt86BXqXkFVIKmc4uNjsM276u2Eq447nYgbjqrua9WDTrBIMgj+jviJzeW91uhxVJZqCCE2r2klho54UGSY6v7K9rEDuMAlF4TjOLcR9uttz272rsAgUn1vjvdXZlOaeZ3VXNeF65HXXYotTPkRRwY7HHcUz0U48hiLIRwjAxHVTKF56mBOe2XG70Z07vmbgcxrKAK2HxREHdVRQDBm4+d1J/2q2w8EFX9i8LYhCPR8LkEmFruUFm76TRfuvwgOafbxas/AroR4cH5zlggCBpAaoSR5a9b5VuK3DevvUlPjmqDth1TylgoSOb+FNXXbGs3erKXW+a9dpglhlSlmAYs/M/LA+yP6nMnJy3F+ZNVDORQu9EcFltc7O1ivxPNFvpGWCxDiwSYkZEEiLm7obKRIOXkjIeZRbFkma/tclA2YAYiegtlvZiVgNT9n8BSASE1A5gkY+pxddvdfRRYamNem/Ak3NZ7nU7SXvqnSeW9M4s27j0uzUV7CRLbO7Cjt5xUqaNer1S+XQTJ4MQLsAVOMVHp0wPB+eWzAod/YLUnMlPvf44uLQisQsXeU3uBg5SJq9lB8abuTQmqyUgTIJjv1Orgg+PjtDJHHkBr1n/Zfv2jvlMn3sRgw6ze8td4K6tfgtY0zko3hpqBe46ix/DI2KLlPE03ghRPnUPg5GSTSsDkfhrAfOZdRbQ6vBXWT/Rrx8aLGP5R99BwZoGIa4PEvOMoXlsFUClMJcS8JHqS28VO/l6m8KCiAlJkYTaCGfEV66lkSA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49413165-9e28-416d-2bf8-08def2d8aaee X-MS-Exchange-CrossTenant-AuthSource: LO6P265MB6224.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 10:02:33.8786 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWLP265MB5868 X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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>, <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>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org |
| Series |
RISC-V: ARC-V RHX-100 fusion and scheduling
|
|
Message
Luis Silva
Aug. 5, 2026, 10:02 a.m. UTC
From: Luis Silva <luis.silva@globalfoundries.com>
Hi,
This is v2 of the RHX-100 fusion/scheduling series. v1 was:
https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705022.html
v1 had five patches (pipeline description, fusion, fusion priority,
scheduling, and RTL patterns). The pipeline description is already
upstream, so this series is four patches around the generic table in
riscv-fusion.cc:
1/4 RHX-100 fusion cases
2/4 TARGET_SCHED_FUSION_PRIORITY
3/4 dual-issue scheduling hooks
4/4 RTL patterns for mul+add (and BFEXT costs)
Regtested for rv32 with --with-tune=arc-v-rhx-100-series and
--enable-checking=rtl.
Changes since v1:
Drop arcv_macro_fusion_pair_p / RISCV_FUSE_ARCV. Each pair is its own
riscv_fuse_* checker and RISCV_FUSE_* bit, selected from the RHX-100
fusible_ops field. Hooks that are RHX-specific use TARGET_ARCV_RHX100.
arcv.cc holds the RHX fusion-priority and scheduling code. It is
introduced in patch 2 with the config.gcc / t-riscv bits (v1 created
that file earlier in the series).
Patch 1 adds the RHX fusion checkers to the table, splits BFEXT into
BFEXT_SRLI / BFEXT_SRAI (RHX enables SRLI only), and enables LUI_LD_REV
for independent load+lui either order (not address-formation LUI_LD).
Dump tests are new. Fused_MAC only matches mul rd; add rd,rd,rs
(product in rs1).
Patch 2 puts riscv_sched_fusion_priority in riscv-fusion.cc; it calls
arcv_sched_fusion_priority and falls back when that returns false.
The load/store mode limit is arcv_pair_fusion_mode_allowed_p.
Patch 3 walks with next_nonnote_nondebug_insn_bb and calls
riscv_macro_fusion_pair_p, mimicking the scheduler more precisely.
Missing checks were added so scheduling is more correct. The
ls-update dump XFAILs are removed. riscv_sched_reorder2 preserves the
remaining issue count for non-RHX (cached_can_issue_more) so defining
TARGET_SCHED_REORDER2 does not force single-issue on other tunes.
Patch 4 adds madd_fused (RV32 mul+add) and madd_fused_extended
(RV64 mulw+addw) for the scheduler, gated on RISCV_FUSE_MULT_ADD and
!TARGET_XTHEADMAC. riscv_rtx_costs cheapens zero_extract / sign_extract
when RISCV_FUSE_BFEXT_SRLI / RISCV_FUSE_BFEXT_SRAI is on.
v1's imul_fused/alu_fused type attrs and pipeline reservations are gone:
the fused madd patterns split before scheduling, so those types are not
needed. *zero_extract_fused and the extract split guard on
*<any_extract:optab><GPR:mode>3 are also dropped; the generic extract
pattern already handles the destination the same way.
Thanks,
Luis
Luis Silva (4):
RISC-V: Implement riscv_macro_fusion_pair_p for ARC-V RHX-100 series
RISC-V: Implement TARGET_SCHED_FUSION_PRIORITY for ARC-V RHX-100
series
RISC-V: Implement scheduling for ARC-V RHX-100 series
RISC-V: define_insn_and_split for multiply-add and bit-extract fusion
gcc/config.gcc | 2 +-
gcc/config/riscv/arcv.cc | 409 ++++++++++++
gcc/config/riscv/riscv-fusion.cc | 583 +++++++++++++++++-
gcc/config/riscv/riscv-protos.h | 23 +-
gcc/config/riscv/riscv.cc | 106 +++-
gcc/config/riscv/riscv.h | 4 +
gcc/config/riscv/riscv.md | 122 +++-
gcc/config/riscv/t-riscv | 6 +
.../gcc.target/riscv/fusion-adjacent-load.c | 12 +
.../gcc.target/riscv/fusion-adjacent-store.c | 13 +
.../gcc.target/riscv/fusion-bfext-2.c | 14 +
.../gcc.target/riscv/fusion-bfext-srai.c | 18 +
gcc/testsuite/gcc.target/riscv/fusion-bfext.c | 15 +
.../gcc.target/riscv/fusion-li-branch.c | 14 +
.../gcc.target/riscv/fusion-li-store.c | 12 +
.../gcc.target/riscv/fusion-limm-condbr.c | 12 +
.../gcc.target/riscv/fusion-ls-update-2.c | 16 +
.../gcc.target/riscv/fusion-ls-update-3.c | 81 +++
.../gcc.target/riscv/fusion-ls-update-4.c | 53 ++
.../gcc.target/riscv/fusion-ls-update-5.c | 13 +
.../gcc.target/riscv/fusion-ls-update.c | 15 +
.../gcc.target/riscv/fusion-lui-ld.c | 25 +
.../gcc.target/riscv/fusion-lui-st.c | 19 +
gcc/testsuite/gcc.target/riscv/fusion-madd.c | 13 +
.../gcc.target/riscv/fusion-mult-add.c | 13 +
25 files changed, 1580 insertions(+), 33 deletions(-)
create mode 100644 gcc/config/riscv/arcv.cc
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-adjacent-load.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-adjacent-store.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-bfext-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-bfext-srai.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-bfext.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-li-branch.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-li-store.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-limm-condbr.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-2.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-3.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-4.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-5.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-lui-ld.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-lui-st.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-madd.c
create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-mult-add.c
Comments
Hi, Gentle ping. I suspect review is being held off until Jin Ma's fusion patches land. If so, I think we can already start preparing a v3 based on those and reuse whatever is introduced there. If there is anything else that can facilitate review let me know. E.g. We can split up the fusion cases in separate patches as well. Kind regards, Michiel Luis Silva <luismgsilva@outlook.com> writes: > From: Luis Silva <luis.silva@globalfoundries.com> > > Hi, > > This is v2 of the RHX-100 fusion/scheduling series. v1 was: > > https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705022.html > > v1 had five patches (pipeline description, fusion, fusion priority, > scheduling, and RTL patterns). The pipeline description is already > upstream, so this series is four patches around the generic table in > riscv-fusion.cc: > > 1/4 RHX-100 fusion cases > 2/4 TARGET_SCHED_FUSION_PRIORITY > 3/4 dual-issue scheduling hooks > 4/4 RTL patterns for mul+add (and BFEXT costs) > > Regtested for rv32 with --with-tune=arc-v-rhx-100-series and > --enable-checking=rtl. > > Changes since v1: > > Drop arcv_macro_fusion_pair_p / RISCV_FUSE_ARCV. Each pair is its own > riscv_fuse_* checker and RISCV_FUSE_* bit, selected from the RHX-100 > fusible_ops field. Hooks that are RHX-specific use TARGET_ARCV_RHX100. > > arcv.cc holds the RHX fusion-priority and scheduling code. It is > introduced in patch 2 with the config.gcc / t-riscv bits (v1 created > that file earlier in the series). > > Patch 1 adds the RHX fusion checkers to the table, splits BFEXT into > BFEXT_SRLI / BFEXT_SRAI (RHX enables SRLI only), and enables LUI_LD_REV > for independent load+lui either order (not address-formation LUI_LD). > Dump tests are new. Fused_MAC only matches mul rd; add rd,rd,rs > (product in rs1). > > Patch 2 puts riscv_sched_fusion_priority in riscv-fusion.cc; it calls > arcv_sched_fusion_priority and falls back when that returns false. > The load/store mode limit is arcv_pair_fusion_mode_allowed_p. > > Patch 3 walks with next_nonnote_nondebug_insn_bb and calls > riscv_macro_fusion_pair_p, mimicking the scheduler more precisely. > Missing checks were added so scheduling is more correct. The > ls-update dump XFAILs are removed. riscv_sched_reorder2 preserves the > remaining issue count for non-RHX (cached_can_issue_more) so defining > TARGET_SCHED_REORDER2 does not force single-issue on other tunes. > > Patch 4 adds madd_fused (RV32 mul+add) and madd_fused_extended > (RV64 mulw+addw) for the scheduler, gated on RISCV_FUSE_MULT_ADD and > !TARGET_XTHEADMAC. riscv_rtx_costs cheapens zero_extract / sign_extract > when RISCV_FUSE_BFEXT_SRLI / RISCV_FUSE_BFEXT_SRAI is on. > v1's imul_fused/alu_fused type attrs and pipeline reservations are gone: > the fused madd patterns split before scheduling, so those types are not > needed. *zero_extract_fused and the extract split guard on > *<any_extract:optab><GPR:mode>3 are also dropped; the generic extract > pattern already handles the destination the same way. > > Thanks, > Luis > > Luis Silva (4): > RISC-V: Implement riscv_macro_fusion_pair_p for ARC-V RHX-100 series > RISC-V: Implement TARGET_SCHED_FUSION_PRIORITY for ARC-V RHX-100 > series > RISC-V: Implement scheduling for ARC-V RHX-100 series > RISC-V: define_insn_and_split for multiply-add and bit-extract fusion > > gcc/config.gcc | 2 +- > gcc/config/riscv/arcv.cc | 409 ++++++++++++ > gcc/config/riscv/riscv-fusion.cc | 583 +++++++++++++++++- > gcc/config/riscv/riscv-protos.h | 23 +- > gcc/config/riscv/riscv.cc | 106 +++- > gcc/config/riscv/riscv.h | 4 + > gcc/config/riscv/riscv.md | 122 +++- > gcc/config/riscv/t-riscv | 6 + > .../gcc.target/riscv/fusion-adjacent-load.c | 12 + > .../gcc.target/riscv/fusion-adjacent-store.c | 13 + > .../gcc.target/riscv/fusion-bfext-2.c | 14 + > .../gcc.target/riscv/fusion-bfext-srai.c | 18 + > gcc/testsuite/gcc.target/riscv/fusion-bfext.c | 15 + > .../gcc.target/riscv/fusion-li-branch.c | 14 + > .../gcc.target/riscv/fusion-li-store.c | 12 + > .../gcc.target/riscv/fusion-limm-condbr.c | 12 + > .../gcc.target/riscv/fusion-ls-update-2.c | 16 + > .../gcc.target/riscv/fusion-ls-update-3.c | 81 +++ > .../gcc.target/riscv/fusion-ls-update-4.c | 53 ++ > .../gcc.target/riscv/fusion-ls-update-5.c | 13 + > .../gcc.target/riscv/fusion-ls-update.c | 15 + > .../gcc.target/riscv/fusion-lui-ld.c | 25 + > .../gcc.target/riscv/fusion-lui-st.c | 19 + > gcc/testsuite/gcc.target/riscv/fusion-madd.c | 13 + > .../gcc.target/riscv/fusion-mult-add.c | 13 + > 25 files changed, 1580 insertions(+), 33 deletions(-) > create mode 100644 gcc/config/riscv/arcv.cc > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-adjacent-load.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-adjacent-store.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-bfext-2.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-bfext-srai.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-bfext.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-li-branch.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-li-store.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-limm-condbr.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-2.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-3.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-4.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update-5.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-ls-update.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-lui-ld.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-lui-st.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-madd.c > create mode 100644 gcc/testsuite/gcc.target/riscv/fusion-mult-add.c > > -- > 2.47.3
On 8/28/2026 11:06 AM, Michiel Derhaeg wrote: > Hi, > > Gentle ping. > > I suspect review is being held off until Jin Ma's fusion patches land. > If so, I think we can already start preparing a v3 based on those and > reuse whatever is introduced there. > > If there is anything else that can facilitate review let me know. E.g. > We can split up the fusion cases in separate patches as well. It's a combination of my unavailability the last few weeks and needing to see how the two kits interact. Not forgotten. jeff