This fixes the issues with __pld by removing the arm_acle.h indirection
and defines the intrinsics directly.
PR target/123548
gcc/ChangeLog:
* config/aarch64/aarch64-builtins.cc
(AARCH64_INIT_PREFETCH_BUILTIN): Change to not add
__builtin_aarch64.
(aarch64_init_prefetch_builtin): Refactor to emit builtins
directly rather than after
* config/aarch64/arm_acle.h (__pld): Remove.
(__pli): Likewise.
(__plix): Likewise.
(__pldx): Likewise.
(__pldir): Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/builtin_pld_pli_illegal.c: Change to use
intrinsic directly.
* gcc.target/aarch64/pr123548.c: New test.
---
gcc/config/aarch64/aarch64-builtins.cc | 10 ++---
gcc/config/aarch64/arm_acle.h | 37 -------------------
.../aarch64/builtin_pld_pli_illegal.c | 20 +++++-----
gcc/testsuite/gcc.target/aarch64/pr123548.c | 18 +++++++++
4 files changed, 33 insertions(+), 52 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/aarch64/pr123548.c
diff --git a/gcc/config/aarch64/aarch64-builtins.cc
b/gcc/config/aarch64/aarch64-builtins.cc
index c2a9e3d3412..181952bdd4a 100644
--- a/gcc/config/aarch64/aarch64-builtins.cc
+++ b/gcc/config/aarch64/aarch64-builtins.cc
@@ -2222,7 +2222,7 @@ aarch64_init_prefetch_builtin (void)
{
#define AARCH64_INIT_PREFETCH_BUILTIN(INDEX, N)
\
aarch64_builtin_decls[INDEX] = \
- aarch64_general_add_builtin ("__builtin_aarch64_" N, ftype, INDEX, \
+ aarch64_general_add_builtin (N, ftype, INDEX, \
prefetch_attrs)
tree ftype;
@@ -2233,17 +2233,17 @@ aarch64_init_prefetch_builtin (void)
cv_argtype = build_pointer_type (cv_argtype);
ftype = build_function_type_list (void_type_node, cv_argtype, NULL);
- AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLD, "pld");
- AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLI, "pli");
+ AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLD, "__pld");
+ AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLI, "__pli");
ftype = build_function_type_list (void_type_node, unsigned_type_node,
unsigned_type_node, unsigned_type_node,
cv_argtype, NULL);
- AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLDX, "pldx");
+ AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLDX, "__pldx");
ftype = build_function_type_list (void_type_node, unsigned_type_node,
unsigned_type_node, cv_argtype, NULL);
- AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLIX, "plix");
+ AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLIX, "__plix");
}
/* Initialize the memory tagging extension (MTE) builtins. */
diff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h
index 651f4cb8b60..794ea32b178 100644
--- a/gcc/config/aarch64/arm_acle.h
+++ b/gcc/config/aarch64/arm_acle.h
@@ -78,43 +78,6 @@ _GCC_ARM_ACLE_DATA_FN (revll, bswap64, uint64_t, uint64_t)
#undef _GCC_ARM_ACLE_DATA_FN
-__extension__ extern __inline void
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-__pld (void const volatile *__addr)
-{
- return __builtin_aarch64_pld (__addr);
-}
-
-__extension__ extern __inline void
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-__pli (void const volatile *__addr)
-{
- return __builtin_aarch64_pli (__addr);
-}
-
-__extension__ extern __inline void
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-__plix (unsigned int __cache, unsigned int __rettn,
- void const volatile *__addr)
-{
- return __builtin_aarch64_plix (__cache, __rettn, __addr);
-}
-
-__extension__ extern __inline void
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-__pldx (unsigned int __access, unsigned int __cache, unsigned int __rettn,
- void const volatile *__addr)
-{
- return __builtin_aarch64_pldx (__access, __cache, __rettn, __addr);
-}
-
-__extension__ extern __inline void
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-__pldir (void const volatile *__addr)
-{
- return __builtin_aarch64_pldir (__addr);
-}
-
__extension__ extern __inline unsigned long
__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
__revl (unsigned long __value)
diff --git a/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c
b/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c
index b799a65eb25..0aa98849300 100644
--- a/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c
+++ b/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c
@@ -15,19 +15,19 @@
void
data_rw_prefetch_bad_bounds (void *a)
{
- __builtin_aarch64_pldx (KIND_LOW, 0, 0, a); /* { dg-error {argument 1 must
be a constant immediate in range \[0,1\]} } */
- __builtin_aarch64_pldx (KIND_HIGH, 0, 0, a); /* { dg-error {argument 1 must
be a constant immediate in range \[0,1\]} } */
- __builtin_aarch64_pldx (0, LEVEL_LOW, 0, a); /* { dg-error {argument 2 must
be a constant immediate in range \[0,3\]} } */
- __builtin_aarch64_pldx (0, LEVEL_HIGH, 0, a); /* { dg-error {argument 2 must
be a constant immediate in range \[0,3\]} } */
- __builtin_aarch64_pldx (0, 0, POLICY_LOW, a); /* { dg-error {argument 3
must be a constant immediate in range \[0,1\]} } */
- __builtin_aarch64_pldx (0, 0, POLICY_HIGH, a); /* { dg-error {argument 3
must be a constant immediate in range \[0,1\]} } */
+ __pldx (KIND_LOW, 0, 0, a); /* { dg-error {argument 1 must be a constant
immediate in range \[0,1\]} } */
+ __pldx (KIND_HIGH, 0, 0, a); /* { dg-error {argument 1 must be a constant
immediate in range \[0,1\]} } */
+ __pldx (0, LEVEL_LOW, 0, a); /* { dg-error {argument 2 must be a constant
immediate in range \[0,3\]} } */
+ __pldx (0, LEVEL_HIGH, 0, a); /* { dg-error {argument 2 must be a constant
immediate in range \[0,3\]} } */
+ __pldx (0, 0, POLICY_LOW, a); /* { dg-error {argument 3 must be a constant
immediate in range \[0,1\]} } */
+ __pldx (0, 0, POLICY_HIGH, a); /* { dg-error {argument 3 must be a constant
immediate in range \[0,1\]} } */
}
void
insn_prefetch_bad_bounds (void *a)
{
- __builtin_aarch64_plix (LEVEL_LOW, 0, a); /* { dg-error {argument 1 must be
a constant immediate in range \[0,3\]} } */
- __builtin_aarch64_plix (LEVEL_HIGH, 0, a); /* { dg-error {argument 1 must be
a constant immediate in range \[0,3\]} } */
- __builtin_aarch64_plix (0, POLICY_LOW, a); /* { dg-error {argument 2 must
be a constant immediate in range \[0,1\]} } */
- __builtin_aarch64_plix (0, POLICY_HIGH, a); /* { dg-error {argument 2 must
be a constant immediate in range \[0,1\]} } */
+ __plix (LEVEL_LOW, 0, a); /* { dg-error {argument 1 must be a constant
immediate in range \[0,3\]} } */
+ __plix (LEVEL_HIGH, 0, a); /* { dg-error {argument 1 must be a constant
immediate in range \[0,3\]} } */
+ __plix (0, POLICY_LOW, a); /* { dg-error {argument 2 must be a constant
immediate in range \[0,1\]} } */
+ __plix (0, POLICY_HIGH, a); /* { dg-error {argument 2 must be a constant
immediate in range \[0,1\]} } */
}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr123548.c
b/gcc/testsuite/gcc.target/aarch64/pr123548.c
new file mode 100644
index 00000000000..c3e752197ce
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr123548.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+/* { dg-final { check-function-bodies "**" "" "" } } */
+
+#include <arm_acle.h>
+
+void
+test (void *a)
+{
+ __pldx (1, 1, 1, a);
+}
+/*
+** test:
+**...
+** prfm\tPSTL2STRM, \[x[0-9]+\]
+**...
+** ret
+*/
--
2.34.1