Hello all, Thank you for the feedback.
There are some minor changes for this version: * Correctly attributed the symbol test patches to Andrew Calotti. * Changed the recording of the assembly name to be done by insert_new_function_version. To me this seems a much more natural time to do this, as it's where the function_version_info structure is being initialized. It also avoids unnecessary early creation of cgraph structures which was causing issues. * Change the handling of a lone "default" annotated function definition to be mangled and emit an alias from dispatched symbol to the default function (as discussed with Richard Sandiford). * Addressed additional Richard Sandifords comments. * Merged the removal of target_clone splitting code into the refactor of naming mostly to avoid unused function warnings causing the build to fail. This has again be regression tested and bootstrapped for aarch64-none-linux-gnu and x86_64-unknown-linux-gnu (more thoroughly this time). Cross compiled and for the FMV tests for riscv and powerpc. Kind regards, Alfie Richards Alfie Richards (14): Add string_slice class. Remove unnecessary `record` argument from maybe_version_functions. Update is_function_default_version to work with target_version. Change function versions to be implicitly ordered. Add version of make_attribute supporting string_slice. Add get_clone_versions function. Add assembler_name to cgraph_function_version_info. Add dispatcher_resolver_function and is_target_clone to cgraph_node. Add clone_identifier function. Refactor FMV name mangling. Change target_version semantics to follow ACLE specification. Support mixing of target_clones and target_version for aarch64. Add error cases and tests for Aarch64 FMV. Remove FMV beta warning. Andrew Carlotti (2): Add PowerPC FMV symbol tests. Add x86 FMV symbol tests gcc/attribs.cc | 93 ++++-- gcc/attribs.h | 1 + gcc/c-family/c-attribs.cc | 11 +- gcc/cgraph.cc | 28 +- gcc/cgraph.h | 13 +- gcc/cgraphclones.cc | 16 +- gcc/cgraphunit.cc | 9 + gcc/config/aarch64/aarch64.cc | 253 +++++++--------- gcc/config/aarch64/aarch64.opt | 2 +- gcc/config/i386/i386-features.cc | 141 +++++---- gcc/config/riscv/riscv.cc | 139 +++------ gcc/config/rs6000/rs6000.cc | 150 +++++++--- gcc/cp/call.cc | 10 + gcc/cp/class.cc | 15 +- gcc/cp/cp-gimplify.cc | 6 +- gcc/cp/cp-tree.h | 2 +- gcc/cp/decl.cc | 37 ++- gcc/cp/typeck.cc | 10 + gcc/doc/invoke.texi | 5 +- gcc/ipa.cc | 11 + gcc/multiple_target.cc | 282 ++++++++---------- gcc/testsuite/g++.target/aarch64/mv-1.C | 5 +- .../g++.target/aarch64/mv-and-mvc-error1.C | 9 + .../g++.target/aarch64/mv-and-mvc-error2.C | 9 + .../g++.target/aarch64/mv-and-mvc-error3.C | 8 + .../g++.target/aarch64/mv-and-mvc1.C | 37 +++ .../g++.target/aarch64/mv-and-mvc2.C | 28 ++ .../g++.target/aarch64/mv-and-mvc3.C | 40 +++ .../g++.target/aarch64/mv-and-mvc4.C | 37 +++ gcc/testsuite/g++.target/aarch64/mv-error1.C | 18 ++ gcc/testsuite/g++.target/aarch64/mv-error2.C | 9 + gcc/testsuite/g++.target/aarch64/mv-error3.C | 12 + gcc/testsuite/g++.target/aarch64/mv-error4.C | 9 + gcc/testsuite/g++.target/aarch64/mv-error5.C | 8 + gcc/testsuite/g++.target/aarch64/mv-error6.C | 20 ++ gcc/testsuite/g++.target/aarch64/mv-error7.C | 11 + gcc/testsuite/g++.target/aarch64/mv-error8.C | 12 + gcc/testsuite/g++.target/aarch64/mv-pragma.C | 1 - .../g++.target/aarch64/mv-symbols1.C | 1 - .../g++.target/aarch64/mv-symbols10.C | 26 ++ .../g++.target/aarch64/mv-symbols11.C | 29 ++ .../g++.target/aarch64/mv-symbols12.C | 27 ++ .../g++.target/aarch64/mv-symbols13.C | 27 ++ .../g++.target/aarch64/mv-symbols2.C | 13 +- .../g++.target/aarch64/mv-symbols3.C | 7 +- .../g++.target/aarch64/mv-symbols4.C | 7 +- .../g++.target/aarch64/mv-symbols5.C | 7 +- .../g++.target/aarch64/mv-symbols6.C | 24 ++ .../g++.target/aarch64/mv-symbols7.C | 47 +++ .../g++.target/aarch64/mv-symbols8.C | 45 +++ .../g++.target/aarch64/mv-symbols9.C | 42 +++ .../g++.target/aarch64/mv-warning1.C | 9 - gcc/testsuite/g++.target/aarch64/mvc-error1.C | 9 + gcc/testsuite/g++.target/aarch64/mvc-error2.C | 9 + .../g++.target/aarch64/mvc-symbols1.C | 1 - .../g++.target/aarch64/mvc-symbols2.C | 1 - .../g++.target/aarch64/mvc-symbols3.C | 13 +- .../g++.target/aarch64/mvc-symbols4.C | 1 - .../g++.target/aarch64/mvc-warning1.C | 6 - gcc/testsuite/g++.target/i386/mv-symbols1.C | 68 +++++ gcc/testsuite/g++.target/i386/mv-symbols2.C | 56 ++++ gcc/testsuite/g++.target/i386/mv-symbols3.C | 44 +++ gcc/testsuite/g++.target/i386/mv-symbols4.C | 50 ++++ gcc/testsuite/g++.target/i386/mv-symbols5.C | 56 ++++ gcc/testsuite/g++.target/i386/mvc-symbols1.C | 44 +++ gcc/testsuite/g++.target/i386/mvc-symbols2.C | 29 ++ gcc/testsuite/g++.target/i386/mvc-symbols3.C | 35 +++ gcc/testsuite/g++.target/i386/mvc-symbols4.C | 23 ++ .../g++.target/powerpc/mvc-symbols1.C | 47 +++ .../g++.target/powerpc/mvc-symbols2.C | 35 +++ .../g++.target/powerpc/mvc-symbols3.C | 41 +++ .../g++.target/powerpc/mvc-symbols4.C | 29 ++ gcc/testsuite/g++.target/riscv/mv-symbols2.C | 12 +- gcc/testsuite/g++.target/riscv/mv-symbols3.C | 6 +- gcc/testsuite/g++.target/riscv/mv-symbols4.C | 6 +- gcc/testsuite/g++.target/riscv/mv-symbols5.C | 6 +- gcc/testsuite/g++.target/riscv/mvc-symbols3.C | 12 +- gcc/tree.cc | 52 ++-- gcc/tree.h | 4 +- gcc/vec.cc | 210 +++++++++++++ gcc/vec.h | 65 ++++ 81 files changed, 2141 insertions(+), 647 deletions(-) create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc-error1.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc-error2.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc-error3.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc1.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc2.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc3.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-and-mvc4.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error1.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error2.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error3.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error4.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error5.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error6.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error7.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-error8.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols10.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols11.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols12.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols13.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols6.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols7.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols8.C create mode 100644 gcc/testsuite/g++.target/aarch64/mv-symbols9.C delete mode 100644 gcc/testsuite/g++.target/aarch64/mv-warning1.C create mode 100644 gcc/testsuite/g++.target/aarch64/mvc-error1.C create mode 100644 gcc/testsuite/g++.target/aarch64/mvc-error2.C delete mode 100644 gcc/testsuite/g++.target/aarch64/mvc-warning1.C create mode 100644 gcc/testsuite/g++.target/i386/mv-symbols1.C create mode 100644 gcc/testsuite/g++.target/i386/mv-symbols2.C create mode 100644 gcc/testsuite/g++.target/i386/mv-symbols3.C create mode 100644 gcc/testsuite/g++.target/i386/mv-symbols4.C create mode 100644 gcc/testsuite/g++.target/i386/mv-symbols5.C create mode 100644 gcc/testsuite/g++.target/i386/mvc-symbols1.C create mode 100644 gcc/testsuite/g++.target/i386/mvc-symbols2.C create mode 100644 gcc/testsuite/g++.target/i386/mvc-symbols3.C create mode 100644 gcc/testsuite/g++.target/i386/mvc-symbols4.C create mode 100644 gcc/testsuite/g++.target/powerpc/mvc-symbols1.C create mode 100644 gcc/testsuite/g++.target/powerpc/mvc-symbols2.C create mode 100644 gcc/testsuite/g++.target/powerpc/mvc-symbols3.C create mode 100644 gcc/testsuite/g++.target/powerpc/mvc-symbols4.C -- 2.34.1