| Message ID | tencent_A2054111ED6A4773DCB918CD90CE4643BE07@qq.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 server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CE69A3857711 for <patchwork@sourceware.org>; Tue, 5 Nov 2024 03:21:24 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by sourceware.org (Postfix) with UTF8SMTPS id 016CA385840B for <gcc-patches@gcc.gnu.org>; Tue, 5 Nov 2024 03:20:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 016CA385840B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=cyyself.name Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=cyyself.name ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 016CA385840B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=162.62.58.211 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1730776849; cv=none; b=l3I56/sCv3gKc3tBsHO6gJALyLj2BwkxfUQ4Iz7F0Z2d7ejGkmyEQD4L5XNhlziC2ggY10hN+bWRsHcud8PzaRn/uz9FknrzUouLRbaRzgn3rLASM4FSBQxziubVC8ou0U3gDUltW6zQQaeW0l4cYdx6ZX6rDg2q2wME5TgjMMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1730776849; c=relaxed/simple; bh=OoGZSqaAE4t4KmlqxdAJ2PcZDoWX8IkdhTy/gMT8/6E=; h=DKIM-Signature:Message-ID:From:To:Subject:Date:MIME-Version; b=E+rCKxT4OVV08nU+TT473m1TbD3DYnBadw8AcIP4Mfon9KD8qaWxFmCzv61fgfNU9qtokFUTNTNmcIVZ70Z01JdP+ohjIzbLxRK6LE/CU7LIW8TATGwtpcZ1C2ai6MPF8U+FKaSVuIqp08GBgKV+Vk+mrwavLQU+ddy2WthI2pE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1730776839; bh=gomKhbXe4F4Zr3LnX1chXx8wH+2w3mUaWzgXMlOIhnU=; h=From:To:Cc:Subject:Date; b=Q8mOkNiCEnymBSMHwYhT6CyvgB7WLLEXsAwJwAw+4WVf6aX8hqx5HoWwNnuhwF5CI Zft/J0KvFYfXU2Asvrnz5/zP1xDYBJLpAWs0Y3J63ay5un86BG7Q81lkJEboRYwv4I F4n93fkkqH+5yXEsjU3/JJczuh7zOU4bxHyMsAs8= Received: from cyy-pc.lan ([240e:379:2276:5d00:cda0:97a5:84f4:5191]) by newxmesmtplogicsvrszb16-1.qq.com (NewEsmtp) with SMTP id 51E14C45; Tue, 05 Nov 2024 11:20:30 +0800 X-QQ-mid: xmsmtpt1730776830tvdc174ex Message-ID: <tencent_A2054111ED6A4773DCB918CD90CE4643BE07@qq.com> X-QQ-XMAILINFO: NPZcszwnKSXO/dGaK7p62IoUnDD+ZWEMw1QvVdrKjorfMBexynH13phN31yyDh UzlmKar/P/MxfXiSwMBo/Xv8T468+KOlVe8DK55R21VVlveJqrIyfC6vR5AgrvwOontsuHEo6XnS 3YVwrX/Ngs/YcSdZbtxwwR8fezfvCC06mTWJ59IDIDmV7X/HDPSCUzTia4/Po64JIbdD/p1ls9SS kpvXO4cXrDjGlJmG1FVluOx3utT7jysVx4qrhHdXM+M0MuFS1/0//5pfkZCRyl46IGRAHZijIpyM SDtiJxyd8cweX/Bj28JWaXpU7BAlL7vuYyj5a+zok4qQDRp3idPpg/n7qprgjsuwKge1dHwmnKJz iygmV8uDNai7ttxVui93Bi5GC6nGyQUVsXkuwAc52BJFvdrB6Q2dK6dV8LHo2HSJHKF4MP3c1wU5 PyBtDH/8KStP5CPlpTwHQDEMgg+nr8tPBkbnjzOHZbNT2QBKbMZkAkwKnfxzLYlUxmoWesX4lF4O unSxaOW94RE3OuP+d7OsPTA0PpQ7oJQDA5VGrXmskpLvHbXKTznVB3Doq1/KNz5ELXvMmfztp98V ZUDaH9pbQXEmyc+YqyAJRGDkEOzGcvX+bwbrTgk2+l5drncHDL5HCwVqaYWB/y5IwnXFkheZFMqF XA3PW/cgDm6EUyv9zTV7LhuW/ndxPni/bQ9fAir7LfYlerL3MbpRMkm2GfXb/U49Eml3dqmKYeGi 32soEeL8W1tndFqxphHVodmQhEll6XkAoggbOtqv/92x6etcU+UyBngNgkLphn49skI4SAnTibGs R2sEIuLfQpAKCPFOdL/Uy8dgep9iNN6OVvhm8tDNj3Ry0+H6SxyJIWncE9rcNS11QmLIjBic97Z4 /LOvqogvdN929Cin5dqZiMH4X+zcMkBB1053I3DZmdeOLOGvkG+fGFTuzRGtIina7UcFPSu16Kng YY9735BBU5g68DQabaB9dEw+Ban4IsCOs3+3qSdVFBt4wPTMaoXoUvWGjyZ7RW X-QQ-XMRINFO: NyFYKkN4Ny6FSmKK/uo/jdU= From: Yangyu Chen <cyy@cyyself.name> To: gcc-patches@gcc.gnu.org Cc: Kito Cheng <kito.cheng@gmail.com>, Palmer Dabbelt <palmer@dabbelt.com>, Jiawei <jiawei@iscas.ac.cn>, Jeff Law <jeffreyalaw@gmail.com>, Evgeny Stupachenko <evstupac@gmail.com>, Andrew Carlotti <andrew.carlotti@arm.com>, Hank Chang <hank.chang@sifive.com>, Yangyu Chen <cyy@cyyself.name> Subject: [PATCH v5 0/8] RISC-V: Add Function Multi-Versioning support Date: Tue, 5 Nov 2024 11:20:07 +0800 X-OQ-MSGID: <20241105032007.2644199-1-cyy@cyyself.name> X-Mailer: git-send-email 2.45.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, HELO_DYNAMIC_IPADDR, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RDNS_DYNAMIC, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLACK autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list <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: Add Function Multi-Versioning support
|
|
Message
Yangyu Chen
Nov. 5, 2024, 3:20 a.m. UTC
This patch series adds support for Function Multi-Versioning (FMV) to
RISC-V. The FMV feature allows users to specify multiple versions of a
function and select the version at runtime based on the target_clones
and target_version attributes, which follow the RISC-V C-API Docs [1]
and the existing proposal about priority syntax [2].
To test this series with the GLIBC dynamic loader, you should apply
patch [3] for GLIBC to ensure the dynamic loader will initialize the
gp register correctly.
Changes since v4:
- Update document for TARGET_CLONES_ATTR_SEPARATOR
v4: https://patchwork.sourceware.org/project/gcc/list/?series=40198&state=*
Changes since v3:
- Remove committed patches
- Remove skip splitter ';' in riscv_process_one_target_attr
- Rename feature_bits.h to riscv_feature_bits.h
- Split "target" and "target_version" parser [4]
- Keep free arch string in riscv_target_attr_parser::update_settings [5]
- Remove reapply target_version in riscv_process_target_attr [6]
- Fix LTO error as patch [7]
- Use std::vector and std::sort in dispatch_function_versions
v3: https://patchwork.sourceware.org/project/gcc/list/?series=39863&state=*
Changes since v2:
- Add missing replacement for TARGET_CLONES_ATTR_SEPARATOR
- Move RISC-V Extension Bitmask Definitions to riscv-ext-bitmask.def
v2: https://patchwork.sourceware.org/project/gcc/list/?series=39772&state=*
Changes since v1:
- Add RISC-V FMV test cases
- Split patches for better review
- Fix commet typo in dispatch_function_versions
- Severial improvements in function riscv_process_target_version_attr
- Initialize m_priority in riscv_target_attr_parser constructor
- Use unsigned to reference feature bits array in compare_fmv_features
- Never check "default" target in riscv_process_target_attr since we
have already checked it in riscv_process_target_version_attr
v1: https://patchwork.sourceware.org/project/gcc/patch/tencent_3B2442361B6DF87E046FB4E71D55715D6309@qq.com/
[1] https://github.com/riscv-non-isa/riscv-c-api-doc/blob/c6c5d6d9cf96b342293315a5dff3d25e96ef8191/src/c-api.adoc#__attribute__targetattr-string
[2] https://github.com/riscv-non-isa/riscv-c-api-doc/pull/85
[3] https://patchwork.sourceware.org/project/glibc/patch/tencent_71D182FBDA6E8E57B80731DD218D8D5C7C08@qq.com/
[4] https://inbox.sourceware.org/gcc-patches/CA+yXCZBG9gKnAQ1xuxw=_j5Ry3cRNDuSNp58Tgpt=pzm4dGv7A@mail.gmail.com/
[5] https://inbox.sourceware.org/gcc-patches/tencent_FD68A30BDF936092B6A663146E634C76C806@qq.com/
[6] https://inbox.sourceware.org/gcc-patches/tencent_A646C713DC9218DD10CA460EBE074153ED07@qq.com/
[7] https://patchwork.sourceware.org/project/gcc/patch/tencent_F08BE088F6B1E3152E508C63C870E31CDF06@qq.com/
Yangyu Chen (8):
Introduce TARGET_CLONES_ATTR_SEPARATOR for RISC-V
RISC-V: Implement Priority syntax parser for Function Multi-Versioning
RISC-V: Implement riscv_minimal_hwprobe_feature_bits
RISC-V: Implement TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P
RISC-V: Implement TARGET_COMPARE_VERSION_PRIORITY and
TARGET_OPTION_FUNCTION_VERSIONS
RISC-V: Implement TARGET_MANGLE_DECL_ASSEMBLER_NAME
RISC-V: Implement TARGET_GENERATE_VERSION_DISPATCHER_BODY and
TARGET_GET_FUNCTION_VERSIONS_DISPATCHER
RISC-V: Add Multi-Versioning Test Cases
gcc/attribs.cc | 17 +-
gcc/common/config/riscv/riscv-common.cc | 94 +++
gcc/common/config/riscv/riscv-ext-bitmask.def | 83 ++
gcc/config/riscv/riscv-feature-bits.h | 44 +
gcc/config/riscv/riscv-protos.h | 4 +-
gcc/config/riscv/riscv-subset.h | 5 +
gcc/config/riscv/riscv-target-attr.cc | 142 +++-
gcc/config/riscv/riscv.cc | 757 ++++++++++++++++++
gcc/config/riscv/riscv.h | 7 +
gcc/config/riscv/riscv.opt | 3 +
gcc/defaults.h | 4 +
gcc/doc/tm.texi | 7 +
gcc/doc/tm.texi.in | 7 +
gcc/multiple_target.cc | 19 +-
gcc/testsuite/g++.target/riscv/mv-symbols1.C | 70 ++
gcc/testsuite/g++.target/riscv/mv-symbols2.C | 61 ++
gcc/testsuite/g++.target/riscv/mv-symbols3.C | 50 ++
gcc/testsuite/g++.target/riscv/mv-symbols4.C | 56 ++
gcc/testsuite/g++.target/riscv/mv-symbols5.C | 62 ++
gcc/testsuite/g++.target/riscv/mvc-symbols1.C | 49 ++
gcc/testsuite/g++.target/riscv/mvc-symbols2.C | 36 +
gcc/testsuite/g++.target/riscv/mvc-symbols3.C | 42 +
gcc/testsuite/g++.target/riscv/mvc-symbols4.C | 32 +
gcc/tree.cc | 4 +-
24 files changed, 1627 insertions(+), 28 deletions(-)
create mode 100644 gcc/common/config/riscv/riscv-ext-bitmask.def
create mode 100644 gcc/config/riscv/riscv-feature-bits.h
create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols1.C
create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols2.C
create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols3.C
create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols4.C
create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols5.C
create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols1.C
create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols2.C
create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols3.C
create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols4.C
Comments
Pushed, thanks! On Tue, Nov 5, 2024 at 11:21 AM Yangyu Chen <cyy@cyyself.name> wrote: > > This patch series adds support for Function Multi-Versioning (FMV) to > RISC-V. The FMV feature allows users to specify multiple versions of a > function and select the version at runtime based on the target_clones > and target_version attributes, which follow the RISC-V C-API Docs [1] > and the existing proposal about priority syntax [2]. > > To test this series with the GLIBC dynamic loader, you should apply > patch [3] for GLIBC to ensure the dynamic loader will initialize the > gp register correctly. > > Changes since v4: > - Update document for TARGET_CLONES_ATTR_SEPARATOR > > v4: https://patchwork.sourceware.org/project/gcc/list/?series=40198&state=* > > Changes since v3: > - Remove committed patches > - Remove skip splitter ';' in riscv_process_one_target_attr > - Rename feature_bits.h to riscv_feature_bits.h > - Split "target" and "target_version" parser [4] > - Keep free arch string in riscv_target_attr_parser::update_settings [5] > - Remove reapply target_version in riscv_process_target_attr [6] > - Fix LTO error as patch [7] > - Use std::vector and std::sort in dispatch_function_versions > > v3: https://patchwork.sourceware.org/project/gcc/list/?series=39863&state=* > > Changes since v2: > - Add missing replacement for TARGET_CLONES_ATTR_SEPARATOR > - Move RISC-V Extension Bitmask Definitions to riscv-ext-bitmask.def > > v2: https://patchwork.sourceware.org/project/gcc/list/?series=39772&state=* > > Changes since v1: > - Add RISC-V FMV test cases > - Split patches for better review > - Fix commet typo in dispatch_function_versions > - Severial improvements in function riscv_process_target_version_attr > - Initialize m_priority in riscv_target_attr_parser constructor > - Use unsigned to reference feature bits array in compare_fmv_features > - Never check "default" target in riscv_process_target_attr since we > have already checked it in riscv_process_target_version_attr > > v1: https://patchwork.sourceware.org/project/gcc/patch/tencent_3B2442361B6DF87E046FB4E71D55715D6309@qq.com/ > > [1] https://github.com/riscv-non-isa/riscv-c-api-doc/blob/c6c5d6d9cf96b342293315a5dff3d25e96ef8191/src/c-api.adoc#__attribute__targetattr-string > [2] https://github.com/riscv-non-isa/riscv-c-api-doc/pull/85 > [3] https://patchwork.sourceware.org/project/glibc/patch/tencent_71D182FBDA6E8E57B80731DD218D8D5C7C08@qq.com/ > [4] https://inbox.sourceware.org/gcc-patches/CA+yXCZBG9gKnAQ1xuxw=_j5Ry3cRNDuSNp58Tgpt=pzm4dGv7A@mail.gmail.com/ > [5] https://inbox.sourceware.org/gcc-patches/tencent_FD68A30BDF936092B6A663146E634C76C806@qq.com/ > [6] https://inbox.sourceware.org/gcc-patches/tencent_A646C713DC9218DD10CA460EBE074153ED07@qq.com/ > [7] https://patchwork.sourceware.org/project/gcc/patch/tencent_F08BE088F6B1E3152E508C63C870E31CDF06@qq.com/ > > Yangyu Chen (8): > Introduce TARGET_CLONES_ATTR_SEPARATOR for RISC-V > RISC-V: Implement Priority syntax parser for Function Multi-Versioning > RISC-V: Implement riscv_minimal_hwprobe_feature_bits > RISC-V: Implement TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P > RISC-V: Implement TARGET_COMPARE_VERSION_PRIORITY and > TARGET_OPTION_FUNCTION_VERSIONS > RISC-V: Implement TARGET_MANGLE_DECL_ASSEMBLER_NAME > RISC-V: Implement TARGET_GENERATE_VERSION_DISPATCHER_BODY and > TARGET_GET_FUNCTION_VERSIONS_DISPATCHER > RISC-V: Add Multi-Versioning Test Cases > > gcc/attribs.cc | 17 +- > gcc/common/config/riscv/riscv-common.cc | 94 +++ > gcc/common/config/riscv/riscv-ext-bitmask.def | 83 ++ > gcc/config/riscv/riscv-feature-bits.h | 44 + > gcc/config/riscv/riscv-protos.h | 4 +- > gcc/config/riscv/riscv-subset.h | 5 + > gcc/config/riscv/riscv-target-attr.cc | 142 +++- > gcc/config/riscv/riscv.cc | 757 ++++++++++++++++++ > gcc/config/riscv/riscv.h | 7 + > gcc/config/riscv/riscv.opt | 3 + > gcc/defaults.h | 4 + > gcc/doc/tm.texi | 7 + > gcc/doc/tm.texi.in | 7 + > gcc/multiple_target.cc | 19 +- > gcc/testsuite/g++.target/riscv/mv-symbols1.C | 70 ++ > gcc/testsuite/g++.target/riscv/mv-symbols2.C | 61 ++ > gcc/testsuite/g++.target/riscv/mv-symbols3.C | 50 ++ > gcc/testsuite/g++.target/riscv/mv-symbols4.C | 56 ++ > gcc/testsuite/g++.target/riscv/mv-symbols5.C | 62 ++ > gcc/testsuite/g++.target/riscv/mvc-symbols1.C | 49 ++ > gcc/testsuite/g++.target/riscv/mvc-symbols2.C | 36 + > gcc/testsuite/g++.target/riscv/mvc-symbols3.C | 42 + > gcc/testsuite/g++.target/riscv/mvc-symbols4.C | 32 + > gcc/tree.cc | 4 +- > 24 files changed, 1627 insertions(+), 28 deletions(-) > create mode 100644 gcc/common/config/riscv/riscv-ext-bitmask.def > create mode 100644 gcc/config/riscv/riscv-feature-bits.h > create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols1.C > create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols2.C > create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols3.C > create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols4.C > create mode 100644 gcc/testsuite/g++.target/riscv/mv-symbols5.C > create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols1.C > create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols2.C > create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols3.C > create mode 100644 gcc/testsuite/g++.target/riscv/mvc-symbols4.C > > -- > 2.45.2 >