From: Alfie Richards <[email protected]>
Hi all,
Thanks again for all the work reviewing this series and for the feedback.
This revision implements the changes requested by Jason and Richard S, and
rebase changes for Richards riscv backend location_t changes.
Changes since V9:
- Rebase changes from Richard's riscv diagnostics suppression patch
- Changes C++ decl formatting
This required some non-trivial changes in pretty print systems to get
the spacing right, which I would definitely like checked.
- Changes to FMV frontend functions and hooks requested by Jason.
Cleaned up the new documentation for the hooks as well.
- Changes requested by Richard in patches approval.
Changes needing approval:
- 02/13 FMV name mangling (riscv and x86 changes only)
- 05/13 C++ FMV diagnostics needs re-review
- 06/13 C++ front end logic
- 12/13 C front end changes
Patch Statuses
==============
Alfie Richards (13):
cgraph: Add clone_identifier function.
Approved (https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692100.html)
fmv: Refactor FMV name mangling.
Approved except x86, and RISC-V changes.
(https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692101.html,
https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693121.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 previously
(https://gcc.gnu.org/pipermail/gcc-patches/2025-June/687988.html)
Needs re-review after changes requested by Jason.
c++: Refactor FMV frontend conflict and merging logic and hooks.
Updated in response to feedback. Needs review.
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
==========
V10:
- 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.
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 | 115 ++++
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-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 +-
130 files changed, 3319 insertions(+), 845 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-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