This patch refactors the ls64 builtins to allow the compiler to define them directly instead of having wrapper functions in arm_acle.h. This should be not only easier to maintain, but it makes two important correctness fixes: - It fixes PR110132, where the builtins ended up getting declared with invisible bindings in the C FE, so the FE ended up synthesizing incompatible implicit definitions for these builtins. - It allows the builtins to be used with LTO, which didn't work previously. We also take the opportunity to add test coverage from C++ for these builtins. gcc/ChangeLog: PR target/110132 * config/aarch64/aarch64-builtins.cc (aarch64_general_simulate_builtin): New. Use it ... (aarch64_init_ls64_builtins): ... here. Switch to declaring public ACLE names for builtins. (aarch64_general_init_builtins): Ensure we invoke the arm_acle.h setup if in_lto_p, just like we do for SVE. * config/aarch64/arm_acle.h: (__arm_ld64b): Delete. (__arm_st64b): Delete. (__arm_st64bv): Delete. (__arm_st64bv0): Delete. gcc/testsuite/ChangeLog: PR target/110132 * lib/target-supports.exp (check_effective_target_aarch64_asm_FUNC_ok): Extend to ls64. * g++.target/aarch64/acle/acle.exp: New. * g++.target/aarch64/acle/ls64.C: New test. * g++.target/aarch64/acle/ls64_lto.C: New test. * gcc.target/aarch64/acle/ls64_lto.c: New test. * gcc.target/aarch64/acle/pr110132.c: New test. --- gcc/config/aarch64/aarch64-builtins.cc | 24 ++++++++++--- gcc/config/aarch64/arm_acle.h | 33 ----------------- .../g++.target/aarch64/acle/acle.exp | 35 +++++++++++++++++++ gcc/testsuite/g++.target/aarch64/acle/ls64.C | 10 ++++++ .../g++.target/aarch64/acle/ls64_lto.C | 10 ++++++ .../gcc.target/aarch64/acle/ls64_lto.c | 10 ++++++ .../gcc.target/aarch64/acle/pr110132.c | 15 ++++++++ gcc/testsuite/lib/target-supports.exp | 2 +- 8 files changed, 100 insertions(+), 39 deletions(-) create mode 100644 gcc/testsuite/g++.target/aarch64/acle/acle.exp create mode 100644 gcc/testsuite/g++.target/aarch64/acle/ls64.C create mode 100644 gcc/testsuite/g++.target/aarch64/acle/ls64_lto.C create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/ls64_lto.c create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/pr110132.c