diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-30 09:52:27 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-30 09:52:27 +0000 |
commit | 0fb2ab504067ad0d2179622861dd71140b736afe (patch) | |
tree | cd5e27b00734b699b573147f38b34bafe0a71fa6 /gcc/genopinit.c | |
parent | b1d15146b636120f49fbecdb65302ac8d3b48e8b (diff) | |
download | gcc-0fb2ab504067ad0d2179622861dd71140b736afe.zip gcc-0fb2ab504067ad0d2179622861dd71140b736afe.tar.gz gcc-0fb2ab504067ad0d2179622861dd71140b736afe.tar.bz2 |
vect: Pass mode to gather/scatter tests
vect_check_gather_scatter had a binary “does this target support
internal gather/scatter functions” test. This dates from the time when
we only handled gathers and scatters via direct target support, with
x86_64 using built-in functions and aarch64 using IFNs. But now that we
can emulate gathers, we need to check whether the gather for a particular
mode is going to be emulated or not.
Without this, enabling SVE regresses emulated Advanced SIMD gather
sequences in cases where SVE isn't used.
Livermore kernel 15 can now be vectorised with Advanced SIMD when
SVE is enabled.
gcc/
* genopinit.c (main): Turn supports_vec_gather_load and
supports_vec_scatter_store into signed char arrays and remove
supports_vec_gather_load_cached and supports_vec_scatter_store_cached.
* optabs-query.c (supports_vec_convert_optab_p): Add a mode parameter.
If the mode is not VOIDmode, test only for that mode.
(supports_vec_gather_load_p): Likewise.
(supports_vec_scatter_store_p): Likewise.
* optabs-query.h (supports_vec_gather_load_p): Likewise.
(supports_vec_scatter_store_p): Likewise.
* tree-vect-data-refs.c (vect_check_gather_scatter): Pass the
vector mode to supports_vec_gather_load_p and
supports_vec_scatter_store_p.
gcc/testsuite/
* gfortran.dg/vect/vect-8.f90: Bump number of vectorized loops
to 25 for SVE.
* gcc.target/aarch64/sve/gather_load_10.c: New test.
Diffstat (limited to 'gcc/genopinit.c')
-rw-r--r-- | gcc/genopinit.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/gcc/genopinit.c b/gcc/genopinit.c index 195ddf7..c6be748 100644 --- a/gcc/genopinit.c +++ b/gcc/genopinit.c @@ -313,12 +313,11 @@ main (int argc, const char **argv) " /* Patterns that are used by optabs that are enabled for this target. */\n" " bool pat_enable[NUM_OPTAB_PATTERNS];\n" "\n" - " /* Cache if the target supports vec_gather_load for at least one vector\n" - " mode. */\n" - " bool supports_vec_gather_load;\n" - " bool supports_vec_gather_load_cached;\n" - " bool supports_vec_scatter_store;\n" - " bool supports_vec_scatter_store_cached;\n" + " /* Index VOIDmode caches if the target supports vec_gather_load for any\n" + " vector mode. Every other index X caches specifically for mode X.\n" + " 1 means yes, -1 means no. */\n" + " signed char supports_vec_gather_load[NUM_MACHINE_MODES];\n" + " signed char supports_vec_scatter_store[NUM_MACHINE_MODES];\n" "};\n" "extern void init_all_optabs (struct target_optabs *);\n" "\n" |