Hi,

Ping for this patch

I'd really like to get this in for GCC 15 to align FMV with LLVM and avoid 
any divergence of use in code bases as much as possible as we push this more 
to users.

Thanks,
Alfie Richards

> On 24 Oct 2024, at 13:54, alfie.richa...@arm.com wrote:
> 
> 
> This patch adds support for `target_version` function multiversioning to
> the C frontend, specifically intended for enabling this for Aarch64
> targets.
> 
> The functionality and behavior matches the CPP frontend. This is likely
> to need to be changed later down the line for Aarch64 targets to
> match the updated ACLE details but that is future work.
> 
> Note, in particular this adds a call to process_same_body_aliases
> to the C frontend. this function is seems to be intended to be used
> in the CPP and D frontends. However, not calling this function was
> meaning cpp_implicit_aliases_done was false for the C cgraph nodes
> and then references to the dispatched symbol were not being resolved
> resulting in the nodes getting deleted and a segfault later.
> 
> I experimented with this patch on X86 and found that the assembler
> produces a duplicate symbol error. I would like input from relevant
> teams if there is interest in supporting this for their backends.
> 
> gcc/c-family/ChangeLog:
> 
>       * c-gimplify.cc (c_gimplify_expr): Process calls to FMV functions.
> 
> gcc/c/ChangeLog:
> 
>       * c-decl.cc (maybe_mark_function_versioned): New function.
>       (diagnose_mismatched_decls): Add logic for target_version functions.
>       (duplicate_decls): Add logic to differentiate target_version functions.
>       (c_parse_final_cleanups): Add call to process_same_body_aliases.
> 
> gcc/ChangeLog:
> 
>       * calls.cc (get_c_function_version_dispatcher): New function.
>       * calls.h (get_c_function_version_dispatcher): New function.
> 
> gcc/testsuite/ChangeLog:
> 
>       * g++.target/aarch64/mv-symbols6.C: New test.
>       * gcc.target/aarch64/mv-1.c: New test.
>       * gcc.target/aarch64/mv-symbols1.c: New test.
>       * gcc.target/aarch64/mv-symbols2.c: New test.
>       * gcc.target/aarch64/mv-symbols3.c: New test.
>       * gcc.target/aarch64/mv-symbols4.c: New test.
>       * gcc.target/aarch64/mv-symbols5.c: New test.
>       * gcc.target/aarch64/mv-symbols6.c: New test.
>       * gcc.target/aarch64/mvc-symbols1.c: New test.
>       * gcc.target/aarch64/mvc-symbols2.c: New test.
>       * gcc.target/aarch64/mvc-symbols3.c: New test.
>       * gcc.target/aarch64/mvc-symbols4.c: New test.
> 
> This has been reg tested on Aarch64 and X86, and bootstrapped for
> aarch64-none-linux-gnu and x86_64-unknown-linux-gnu.
> 
> OK for master?
> ---
> gcc/c-family/c-gimplify.cc                    | 11 ++++
> gcc/c/c-decl.cc                               | 63 ++++++++++++++++++-
> gcc/calls.cc                                  | 23 +++++++
> gcc/calls.h                                   |  1 +
> .../g++.target/aarch64/mv-symbols6.C          | 16 +++++
> gcc/testsuite/gcc.target/aarch64/mv-1.c       | 39 ++++++++++++
> .../gcc.target/aarch64/mv-symbols1.c          | 37 +++++++++++
> .../gcc.target/aarch64/mv-symbols2.c          | 28 +++++++++
> .../gcc.target/aarch64/mv-symbols3.c          | 26 ++++++++
> .../gcc.target/aarch64/mv-symbols4.c          | 29 +++++++++
> .../gcc.target/aarch64/mv-symbols5.c          | 35 +++++++++++
> .../gcc.target/aarch64/mv-symbols6.c          | 17 +++++
> .../gcc.target/aarch64/mvc-symbols1.c         | 25 ++++++++
> .../gcc.target/aarch64/mvc-symbols2.c         | 16 +++++
> .../gcc.target/aarch64/mvc-symbols3.c         | 19 ++++++
> .../gcc.target/aarch64/mvc-symbols4.c         | 12 ++++
> 16 files changed, 396 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols6.C
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-1.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols1.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols2.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols3.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols4.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols5.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols6.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c
> 
> <v2-0001-C-Support-Function-multiversionsing-in-the-C-fron.patch>

Reply via email to