Hi,
Ping for this, if possible Id be grateful to know if the direction of
this patch
is okay before working on it further?
I have played around with it more and have some improvements I can make
(pending clarification PR's to the ACLE) but would like feedback on the work
so far before pushing on with that further.
Kind regards,
Alfie
On 15/11/2024 16:36, alfie.richa...@arm.com wrote:
From: Alfie Richards <alfie.richa...@arm.com>
Hi Joseph and all,
I worked through Josephs feedback, and as I fixed certain issues I came to the
conclusion he was correct that a rethink was required.
I reworked this to only have the one FMV binding for each function set which
gets replaced with the dispatched symbol decl when the second target is
processed.
I prefer this code structure, and think it is far clearer to the reader to
what was happening previously.
I also added some more tests for more error situations in particular.
This probably still has some rough edges, but I'm hoping its a better direction
overall.
Note, this does slightly change the interface for backend hooks. In particular
it will require changing the assumptions for get_function_versions_dispatcher
as it now can get called before all the functions have been processed in the C
frontend (maybe without default).
This shouldn't be a big deal but will require work in other backends if we
want to enable this for them also.
Kind regards,
Alfie Richards
Alfie Richards (1):
C: Support Function multiversioning in the C front end
gcc/attribs.cc | 21 ++-
gcc/attribs.h | 3 +-
gcc/c-family/c-gimplify.cc | 13 ++
gcc/c/c-decl.cc | 162 ++++++++++++++++--
gcc/calls.cc | 17 ++
gcc/calls.h | 2 +
gcc/cgraph.cc | 61 ++++++-
gcc/cgraphunit.cc | 23 +++
gcc/config/aarch64/aarch64.cc | 29 +---
.../g++.target/aarch64/mv-symbols10.C | 42 +++++
.../g++.target/aarch64/mv-symbols6.C | 16 ++
.../g++.target/aarch64/mv-symbols8.C | 47 +++++
.../g++.target/aarch64/mv-symbols9.C | 44 +++++
gcc/testsuite/gcc.target/aarch64/mv-1.c | 40 +++++
.../gcc.target/aarch64/mv-symbols-error1.c | 11 ++
.../gcc.target/aarch64/mv-symbols-error10.c | 11 ++
.../gcc.target/aarch64/mv-symbols-error2.c | 8 +
.../gcc.target/aarch64/mv-symbols-error3.c | 8 +
.../gcc.target/aarch64/mv-symbols-error4.c | 8 +
.../gcc.target/aarch64/mv-symbols-error5.c | 11 ++
.../gcc.target/aarch64/mv-symbols-error6.c | 8 +
.../gcc.target/aarch64/mv-symbols-error7.c | 12 ++
.../gcc.target/aarch64/mv-symbols-error8.c | 11 ++
.../gcc.target/aarch64/mv-symbols-error9.c | 10 ++
.../gcc.target/aarch64/mv-symbols1.c | 38 ++++
.../gcc.target/aarch64/mv-symbols10.c | 42 +++++
.../gcc.target/aarch64/mv-symbols11.c | 16 ++
.../gcc.target/aarch64/mv-symbols2.c | 28 +++
.../gcc.target/aarch64/mv-symbols3.c | 27 +++
.../gcc.target/aarch64/mv-symbols4.c | 31 ++++
.../gcc.target/aarch64/mv-symbols5.c | 36 ++++
.../gcc.target/aarch64/mv-symbols6.c | 16 ++
.../gcc.target/aarch64/mv-symbols7.c | 47 +++++
.../gcc.target/aarch64/mv-symbols8.c | 47 +++++
.../gcc.target/aarch64/mv-symbols9.c | 44 +++++
.../gcc.target/aarch64/mvc-symbols1.c | 25 +++
.../gcc.target/aarch64/mvc-symbols2.c | 15 ++
.../gcc.target/aarch64/mvc-symbols3.c | 19 ++
.../gcc.target/aarch64/mvc-symbols4.c | 12 ++
39 files changed, 1011 insertions(+), 50 deletions(-)
create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols10.C
create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols6.C
create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols8.C
create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols9.C
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error10.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error3.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error4.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error5.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error6.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error7.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error8.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols-error9.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols10.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols11.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/mv-symbols7.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols8.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols9.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