Hi all,

This is a minor update to V4.

Firstly it updates the diagnostics for versioned function decls to include
the target_version/target_clones attribute, and simplified the diagnostic logic
changes in cpp/c frontends.

Secondly, I merged this series with my C FMV support series and my FMV inlining
optimization patch. It proved keeping 3 patch series in sync was more bother
than it was worth.

Kind regards,
Alfie Richards

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

V5:
- 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 (22):
  Add string_slice class.
  Remove unnecessary `record` argument from maybe_version_functions.
  Update is_function_default_version to work with target_version.
  Refactor record_function_versions.
  Change make_attribute to take string_slice.
  Add get_clone_versions and get_target_version functions.
  Add assembler_name to cgraph_function_version_info.
  Add dispatcher_resolver_function and is_target_clone flags to
    cgraph_node.
  Add clone_identifier function.
  fmv: i386: 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

Alice Carlotti (2):
  ppc: Add PowerPC FMV symbol tests.
  i386: Add x86 FMV symbol tests

 gcc/attribs.cc                                | 186 +++----
 gcc/attribs.h                                 |   6 +-
 gcc/c-family/c-attribs.cc                     |  33 +-
 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                                 |  80 +--
 gcc/cgraph.h                                  |  29 +-
 gcc/cgraphclones.cc                           |  16 +-
 gcc/cgraphunit.cc                             |   9 +
 gcc/config/aarch64/aarch64.cc                 | 299 +++++-----
 gcc/config/aarch64/aarch64.opt                |   2 +-
 gcc/config/i386/i386-features.cc              | 141 ++---
 gcc/config/riscv/riscv-protos.h               |   2 +
 gcc/config/riscv/riscv-target-attr.cc         |  14 +-
 gcc/config/riscv/riscv.cc                     | 267 ++++-----
 gcc/config/rs6000/rs6000.cc                   | 150 +++--
 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                                |  55 +-
 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   |  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/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 ++
 142 files changed, 4081 insertions(+), 939 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/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
 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