From: Alfie Richards <[email protected]>

Hi all,

I am only resubmitting the relevant patches here to reduce noise.

Changes since V10:
- Addressed Josephs feedback on C patch.
- Removed 2 lines of nonsense from patch 2 noticed by Richard E.
- Addressed Jasons feedback on C++ patches.

Reviews needed:
- 02/13 x86: fmv: Refactor FMV name mangling.
  Only the x86 changes need review.
- 07/13 c++: Refactor FMV frontend conflict and merging logic and hooks.
  Only the hooks and shared code (C++ and all other parts approved)
- 11/13 c: Add target_version attribute support.
  All needs review.

Patch Statuses
==============

Alfie Richards (13):
  cgraph: Add clone_identifier function.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692100.html)
  x86: fmv: Refactor FMV name mangling.
    Approved except x86 changes.
    (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692101.html,
     https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693121.html,
     https://gcc.gnu.org/pipermail/gcc-patches/2025-September/694610.html)
  riscv: Refactor riscv target parsing to take string_slice.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-June/687986.html)
  fmv: c++: Add check_target_clone hook for filtering target_clone versions.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692680.html)
  fmv: Change target_version semantics to follow ACLE specification.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693122.html)
  c: c++: Add target_[version/clones] to decl diagnostics formatting.
    Approved.
    (https://gcc.gnu.org/pipermail/gcc-patches/2025-June/687988.html,
     https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693550.html)
  c++: Refactor FMV frontend conflict and merging logic and hooks.
    Approved except for hooks changes.
    (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693551.html)
  fmv: Support mixing of target_clones and target_version.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/691401.html)
  aarch64: testsuite: Add diagnostic tests for Aarch64 FMV.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-July/690688.html)
  aarch64: Remove FMV beta warning.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-July/690689.html)
  c: Add target_version attribute support.
    Needs review.
  c: aarch64: Add FMV diagnostic tests.
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-July/690690.html)
  fmv: Redirect to specific target
    Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692682.html)

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

V11:
- Removed some nonsense lines from x86 code (no functional change)
- Addressed Josephs feedback for C change

V10: https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693526.html
- FMV Frontend functions and hooks cleanup/renaming
- Changed C++ diagnostics formatting

V9: https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692840.html
- Addressed nits and feedback
- Fixed login in redirect_to_specific_clone

V8: (can't find link on pipermail?)
- Addressed nits and feedback
- Changed clone_identifier function.
- Shuffled some changes and code paths to where they are actually relevant.
- Changed the a_implies_b hook quite substantially.

V7: https://gcc.gnu.org/pipermail/gcc-patches/2025-July/690784.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

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.

Ideally before cauldron as well as it makes my slides better :)

Kind regards,
Alfie

 gcc/attribs.cc                                | 142 ++---
 gcc/attribs.h                                 |   2 +-
 gcc/c-family/c-attribs.cc                     |  32 +-
 gcc/c-family/c-pretty-print.cc                |  77 ++-
 gcc/c-family/c-pretty-print.h                 |   8 +
 gcc/c/c-decl.cc                               | 112 ++++
 gcc/c/c-objc-common.cc                        |   6 +
 gcc/cgraph.cc                                 |   5 +-
 gcc/cgraph.h                                  |  24 +-
 gcc/cgraphclones.cc                           |  58 +-
 gcc/cgraphunit.cc                             |   9 +
 gcc/config/aarch64/aarch64.cc                 | 325 ++++++-----
 gcc/config/aarch64/aarch64.opt                |   2 +-
 gcc/config/i386/i386-features.cc              |  74 +--
 gcc/config/i386/i386.cc                       |   3 -
 gcc/config/riscv/riscv-protos.h               |   2 +
 gcc/config/riscv/riscv-target-attr.cc         |  25 +-
 gcc/config/riscv/riscv.cc                     | 237 ++++----
 gcc/config/rs6000/rs6000.cc                   |  85 ++-
 gcc/cp/call.cc                                |  10 +
 gcc/cp/class.cc                               |  16 +-
 gcc/cp/cp-gimplify.cc                         |  11 +-
 gcc/cp/cxx-pretty-print.h                     |   5 +
 gcc/cp/decl.cc                                |  29 +-
 gcc/cp/decl2.cc                               |   2 +-
 gcc/cp/error.cc                               |   8 +
 gcc/cp/typeck.cc                              |  10 +
 gcc/doc/invoke.texi                           |   5 +-
 gcc/doc/tm.texi                               |  37 +-
 gcc/doc/tm.texi.in                            |   6 +-
 gcc/hooks.cc                                  |  15 +
 gcc/hooks.h                                   |   4 +
 gcc/ipa.cc                                    |  11 +
 gcc/multiple_target.cc                        | 546 ++++++++++--------
 gcc/passes.def                                |   3 +-
 gcc/target.def                                |  56 +-
 .../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 +
 .../g++.target/aarch64/fmv-selection7.C       |  65 +++
 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-error10.c |  13 +
 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-symbols14.c         |  34 ++
 .../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                                   | 286 ++++++++-
 gcc/tree.h                                    |  20 +-
 131 files changed, 3327 insertions(+), 847 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/fmv-selection7.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-error10.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-symbols14.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