Hi All,

Small update to remove committed patches, and merge two patches to make them
atomic.

Note this series includes several approved, but not yet committed, patches.
This is either because they depend on other patches or because it seems strange
to commit class members without any usage. Approved patches have been noted as
such.

Regression tested and bootstrapped for aarch64-none-linux-gnu
and x86_64-unknown-linux-gnu.

Cross compiled and checked FMV tests for riscv and powerpc.

Kind regards,
Alfie Richards

Change log
==========

V6:
- Merged "Add assembler_name to cgraph_function_version_info" and
  "fmv: Refactor FMV name mangling" patches into one.
- Removed committed patches.

V5: https://gcc.gnu.org/pipermail/gcc-patches/2025-May/685058.html
- Merged patch series with C support series, and FMV call inlining optimization
- Addressed Jason's feedback and simplified the diagnostics for FMV.

V4: https://gcc.gnu.org/pipermail/gcc-patches/2025-April/681047.html
- Changed version_info structure to be sorted by priority
- Split the target_clones pass into early/late stages
- Split out fix for PR c++/119498

V3: https://gcc.gnu.org/pipermail/gcc-patches/2025-March/679488.html
- Added reject target_clones version logic and hook
- Added pretty print for string_slice
- Refactored merging and conflict logic in front end
- Improved diagnostics

V2: https://gcc.gnu.org/pipermail/gcc-patches/2025-February/675960.html
- Changed recording of assembly name to be done in version into initialisation
- Changed behaviour for a lone default decl

V1: https://gcc.gnu.org/pipermail/gcc-patches/2025-February/674973.html
- Initial

Alfie Richards (19):
  Add string_slice class.
  Remove unnecessary `record` argument from maybe_version_functions.
  Change make_attribute to take string_slice
    (Approved, depends on string_slice).
  Add get_clone_versions and get_target_version functions
    (Approved, depends on string_slice).
  Add dispatcher_resolver_function and is_target_clone flags to cgraph_node.
    (Approved, will commit with subsequent patches).
  Add clone_identifier function.
    (Approved, depends on string_slice).
  fmv: Refactor FMV name mangling.
  riscv: Refactor riscv target parsing to take string_slice.
  fmv: Add reject_target_clone hook for filtering target_clone versions.
  fmv: Change target_version semantics to follow ACLE specification.
  c/c++: Add target_[version/clones] to decl diagnostics formatting.
  c++: Refactor FMV frontend conflict and merging logic and hooks.
  fmv: Support mixing of target_clones and target_version.
  c++: Fix FMV return type ambiguation
  aarch64: testsuite: Add diagnostic tests for Aarch64 FMV.
  aarch64: Remove FMV beta warning.
  c: Add target_version attribute support.
  c/aarch64: Add FMV diagnostic tests.
  FMV: Redirect to specific target

 gcc/attribs.cc                                | 161 +++---
 gcc/attribs.h                                 |   6 +-
 gcc/c-family/c-attribs.cc                     |  34 +-
 gcc/c-family/c-format.cc                      |   7 +
 gcc/c-family/c-format.h                       |   1 +
 gcc/c-family/c-pretty-print.cc                |  65 +++
 gcc/c-family/c-pretty-print.h                 |   2 +
 gcc/c/c-decl.cc                               | 113 ++++
 gcc/c/c-objc-common.cc                        |   6 +
 gcc/cgraph.cc                                 |   5 +-
 gcc/cgraph.h                                  |  23 +-
 gcc/cgraphclones.cc                           |  16 +-
 gcc/cgraphunit.cc                             |   9 +
 gcc/config/aarch64/aarch64.cc                 | 277 +++++-----
 gcc/config/aarch64/aarch64.opt                |   2 +-
 gcc/config/i386/i386-features.cc              | 107 ++--
 gcc/config/riscv/riscv-protos.h               |   2 +
 gcc/config/riscv/riscv-target-attr.cc         |  14 +-
 gcc/config/riscv/riscv.cc                     | 241 ++++----
 gcc/config/rs6000/rs6000.cc                   | 115 +++-
 gcc/cp/call.cc                                |  10 +
 gcc/cp/class.cc                               |  18 +-
 gcc/cp/cp-gimplify.cc                         |  11 +-
 gcc/cp/cp-tree.h                              |   2 +-
 gcc/cp/cxx-pretty-print.h                     |   4 +
 gcc/cp/decl.cc                                |  61 ++-
 gcc/cp/decl2.cc                               |   2 +-
 gcc/cp/error.cc                               |   3 +
 gcc/cp/typeck.cc                              |  10 +
 gcc/doc/invoke.texi                           |   5 +-
 gcc/doc/tm.texi                               |  20 +-
 gcc/doc/tm.texi.in                            |   4 +
 gcc/hooks.cc                                  |  13 +
 gcc/hooks.h                                   |   4 +
 gcc/ipa.cc                                    |  11 +
 gcc/multiple_target.cc                        | 517 ++++++++++--------
 gcc/passes.def                                |   3 +-
 gcc/pretty-print.cc                           |  10 +
 gcc/target.def                                |  30 +-
 .../g++.target/aarch64/fmv-selection1.C       |  40 ++
 .../g++.target/aarch64/fmv-selection2.C       |  40 ++
 .../g++.target/aarch64/fmv-selection3.C       |  25 +
 .../g++.target/aarch64/fmv-selection4.C       |  30 +
 .../g++.target/aarch64/fmv-selection5.C       |  28 +
 .../g++.target/aarch64/fmv-selection6.C       |  27 +
 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          |  20 +
 .../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         |  11 +-
 gcc/testsuite/g++.target/i386/mv-symbols1.C   |  12 +-
 gcc/testsuite/g++.target/i386/mv-symbols3.C   |  10 +-
 gcc/testsuite/g++.target/i386/mv-symbols4.C   |  10 +-
 gcc/testsuite/g++.target/i386/mv-symbols5.C   |  10 +-
 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/testsuite/gcc.target/aarch64/mv-1.c       |  43 ++
 .../gcc.target/aarch64/mv-and-mvc-error1.c    |   9 +
 .../gcc.target/aarch64/mv-and-mvc-error2.c    |   9 +
 .../gcc.target/aarch64/mv-and-mvc-error3.c    |   8 +
 .../gcc.target/aarch64/mv-and-mvc1.c          |  37 ++
 .../gcc.target/aarch64/mv-and-mvc2.c          |  28 +
 .../gcc.target/aarch64/mv-and-mvc3.c          |  40 ++
 .../gcc.target/aarch64/mv-and-mvc4.c          |  37 ++
 gcc/testsuite/gcc.target/aarch64/mv-error1.c  |  18 +
 gcc/testsuite/gcc.target/aarch64/mv-error2.c  |   9 +
 gcc/testsuite/gcc.target/aarch64/mv-error3.c  |  12 +
 gcc/testsuite/gcc.target/aarch64/mv-error4.c  |   9 +
 gcc/testsuite/gcc.target/aarch64/mv-error5.c  |   8 +
 gcc/testsuite/gcc.target/aarch64/mv-error6.c  |  20 +
 gcc/testsuite/gcc.target/aarch64/mv-error7.c  |  11 +
 gcc/testsuite/gcc.target/aarch64/mv-error8.c  |  12 +
 gcc/testsuite/gcc.target/aarch64/mv-error9.c  |  12 +
 .../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-symbols12.c         |  27 +
 .../gcc.target/aarch64/mv-symbols13.c         |  28 +
 .../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          |  20 +
 .../gcc.target/aarch64/mv-symbols7.c          |  47 ++
 .../gcc.target/aarch64/mv-symbols8.c          |  47 ++
 .../gcc.target/aarch64/mv-symbols9.c          |  44 ++
 gcc/testsuite/gcc.target/aarch64/mvc-error1.c |   9 +
 gcc/testsuite/gcc.target/aarch64/mvc-error2.c |   9 +
 .../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 +
 .../gcc.target/aarch64/mvc-warning1.c         |  13 +
 gcc/tree.cc                                   | 315 ++++++++++-
 gcc/tree.h                                    |  24 +-
 gcc/vec.cc                                    | 207 +++++++
 gcc/vec.h                                     |  45 ++
 133 files changed, 3466 insertions(+), 823 deletions(-)
 create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection1.C
 create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection2.C
 create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection3.C
 create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection4.C
 create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection5.C
 create mode 100644 gcc/testsuite/g++.target/aarch64/fmv-selection6.C
 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
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error7.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-error8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-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-symbols12.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mv-symbols13.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-error1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-error2.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
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mvc-warning1.c

-- 
2.34.1

Reply via email to