[gcc r8-10562] AArch64: Add prefer_advsimd_autovec internal tune_flag
Kyrylo Tkachov
ktkachov@gcc.gnu.org
Thu Oct 1 16:37:06 GMT 2020
https://gcc.gnu.org/g:42140cb640bd8ab9362d89b8ab01f31309069710
commit r8-10562-g42140cb640bd8ab9362d89b8ab01f31309069710
Author: Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Date: Thu Oct 1 17:36:13 2020 +0100
AArch64: Add prefer_advsimd_autovec internal tune_flag
This is the GCC 8 version of the prefer_advsimd_autovec patch.
It's very similar to the GCC 9 version.
Bootstrapped and tested on aarch64-none-linux-gnu.
gcc/
* config/aarch64/aarch64-tuning-flags.def
(PREFER_ADVSIMD_AUTOVEC): Define.
* config/aarch64/aarch64.c (aarch64_preferred_simd_mode): Use
it.
(aarch64_autovectorize_vector_sizes): Likewise.
Diff:
---
gcc/config/aarch64/aarch64-tuning-flags.def | 3 +++
gcc/config/aarch64/aarch64.c | 13 +++++++++++--
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/gcc/config/aarch64/aarch64-tuning-flags.def b/gcc/config/aarch64/aarch64-tuning-flags.def
index ea9ead234cb..0f242630f46 100644
--- a/gcc/config/aarch64/aarch64-tuning-flags.def
+++ b/gcc/config/aarch64/aarch64-tuning-flags.def
@@ -41,4 +41,7 @@ AARCH64_EXTRA_TUNING_OPTION ("slow_unaligned_ldpw", SLOW_UNALIGNED_LDPW)
are not considered cheap. */
AARCH64_EXTRA_TUNING_OPTION ("cheap_shift_extend", CHEAP_SHIFT_EXTEND)
+/* Prefer Advanced SIMD over SVE for auto-vectorization. */
+AARCH64_EXTRA_TUNING_OPTION ("prefer_advsimd_autovec", PREFER_ADVSIMD_AUTOVEC)
+
#undef AARCH64_EXTRA_TUNING_OPTION
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index e20a4ccc6dc..6c05a6686c5 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -12970,7 +12970,12 @@ aarch64_simd_container_mode (scalar_mode mode, poly_int64 width)
static machine_mode
aarch64_preferred_simd_mode (scalar_mode mode)
{
- poly_int64 bits = TARGET_SVE ? BITS_PER_SVE_VECTOR : 128;
+ /* If current tuning prefers Advanced SIMD, bypass SVE. */
+ bool use_sve
+ = TARGET_SVE
+ && !(aarch64_tune_params.extra_tuning_flags
+ & AARCH64_EXTRA_TUNE_PREFER_ADVSIMD_AUTOVEC);
+ poly_int64 bits = use_sve ? BITS_PER_SVE_VECTOR : 128;
return aarch64_simd_container_mode (mode, bits);
}
@@ -12979,7 +12984,11 @@ aarch64_preferred_simd_mode (scalar_mode mode)
static void
aarch64_autovectorize_vector_sizes (vector_sizes *sizes)
{
- if (TARGET_SVE)
+ bool use_sve
+ = TARGET_SVE
+ && !(aarch64_tune_params.extra_tuning_flags
+ & AARCH64_EXTRA_TUNE_PREFER_ADVSIMD_AUTOVEC);
+ if (use_sve)
sizes->safe_push (BYTES_PER_SVE_VECTOR);
sizes->safe_push (16);
sizes->safe_push (8);
More information about the Gcc-cvs
mailing list