Pushed, thanks!
On Tue, Nov 5, 2024 at 11:21 AM Yangyu Chen <c...@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_3b2442361b6df87e046fb4e71d55715d6...@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_71d182fbda6e8e57b80731dd218d8d5c7...@qq.com/ > [4] > https://inbox.sourceware.org/gcc-patches/CA+yXCZBG9gKnAQ1xuxw=_j5Ry3cRNDuSNp58Tgpt=pzm4dg...@mail.gmail.com/ > [5] > https://inbox.sourceware.org/gcc-patches/tencent_fd68a30bdf936092b6a663146e634c76c...@qq.com/ > [6] > https://inbox.sourceware.org/gcc-patches/tencent_a646c713dc9218dd10ca460ebe074153e...@qq.com/ > [7] > https://patchwork.sourceware.org/project/gcc/patch/tencent_f08be088f6b1e3152e508c63c870e31cd...@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 >