Hi All,

Updating this to highlight patches still needing review and remove committed
patches.

The particular important patches of note are:

- fmv: Refactor FMV name mangling.
  This changes x86 FMV mangling, and removes of duplicated code from several
  backends.
- fmv: Change target_version semantics to follow ACLE specification.
  Large behavioral change for aarch64 and riscv, involving changes in c++
  frontend and middle end code. Also involves splitting a pass in two.
- c++: Refactor FMV frontend conflict and merging logic and hooks.
  Changes to hooks and c++ front end.
- fmv: Support mixing of target_clones and target_version.
  Behaviour change for aarch64 and riscv.
- c: Add target_version attribute support.
  c front end changes and behaviour change.

Bootstrapped and reg tested on Aarch64 and x86.

Still hoping for GCC 16 for this, we're keen to get this synced with LLVM
before we start pushing it for users.

Kind regards,
Alfie

Patches
=======

Alfie Richards (13):
  Add clone_identifier function.
    (Approved https://gcc.gnu.org/pipermail/gcc-patches/2025-June/686239.html)
  fmv: Refactor FMV name mangling.
    (Needs review)
  riscv: Refactor riscv target parsing to take string_slice.
    (Approved, https://gcc.gnu.org/pipermail/gcc-patches/2025-June/687986.html)
  fmv: Add reject_target_clone hook for filtering target_clone versions.
    (Approved https://gcc.gnu.org/pipermail/gcc-patches/2025-June/687987.html)
  fmv: Change target_version semantics to follow ACLE specification.
    (Needs review)
  c/c++: Add target_[version/clones] to decl diagnostics formatting.
    (Approved, but changed after feedback from Jason)
  c++: Refactor FMV frontend conflict and merging logic and hooks.
    (Needs review)
  fmv: Support mixing of target_clones and target_version.
    (Needs review)
  aarch64: testsuite: Add diagnostic tests for Aarch64 FMV.
    (Needs review)
  aarch64: Remove FMV beta warning.
    (Needs review)
  c: Add target_version attribute support.
    (Needs review)
  c/aarch64: Add FMV diagnostic tests.
    (Needs review)
  FMV: Redirect to specific target
    (Needs review)

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

V7: https://gcc.gnu.org/pipermail/gcc-patches/2025-June/686662.html
- Removed committed patches and rebased
- Addressed Jasons formatting comments

V6: https://gcc.gnu.org/pipermail/gcc-patches/2025-June/686662.html
- 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

 gcc/attribs.cc                                | 145 +++--
 gcc/attribs.h                                 |   4 +-
 gcc/c-family/c-attribs.cc                     |  34 +-
 gcc/c-family/c-pretty-print.cc                |  81 +++
 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                 | 281 +++++-----
 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                               |  16 +-
 gcc/cp/cp-gimplify.cc                         |  11 +-
 gcc/cp/cxx-pretty-print.h                     |   4 +
 gcc/cp/decl.cc                                |  29 +-
 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                                  |  15 +
 gcc/hooks.h                                   |   4 +
 gcc/ipa.cc                                    |  11 +
 gcc/multiple_target.cc                        | 517 ++++++++++--------
 gcc/passes.def                                |   3 +-
 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                                   | 276 +++++++++-
 gcc/tree.h                                    |  23 +-
 127 files changed, 3148 insertions(+), 799 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