aarch64: Introduce --param=aarch64-autovec-preference to select autovec preference...
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 27 Nov 2020 09:19:33 +0000 (09:19 +0000)
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 27 Nov 2020 09:19:33 +0000 (09:19 +0000)
commit5f29f3d5dd94c3f8eef10492a657a0719d4b3318
tree6d1829b47c16ddc2cb72df9e9bd39bae4059ccf2
parentdef0e5b83ddb5d4916d0e804b9044f73ffb2923c
aarch64: Introduce --param=aarch64-autovec-preference to select autovec preference in backend

This is a patch that introduces the aarch64-autovec-preference that can
take values from 0 - 4, 0 being the default.
It can be used to override the autovectorisation preferences in the
backend:
0 - use default scheme
1 - only use Advanced SIMD
2 - only use SVE
3 - use Advanced SIMD and SVE, prefer Advanced SIMD in the event of a
tie (as determined by costs)
4 - use Advanced SIMD and SVE, prefer SVE in the event of a tie (as
determined by costs)

It can valuable for experimentation when comparing SVE and Advanced SIMD
autovectorisation strategies.

It achieves this adjusting the order of the interleaved SVE and Advanced
SIMD modes in aarch64_autovectorize_vector_modes.
It also adjusts aarch64_preferred_simd_mode to use the new comparison
function to pick Advanced SIMD or SVE to start with.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/
* config/aarch64/aarch64.opt
(-param=aarch64-autovec-preference): Define.
* config/aarch64/aarch64.c (aarch64_override_options_internal):
Set aarch64_sve_compare_costs to 0 when preferring only Advanced
SIMD.
(aarch64_cmp_autovec_modes): Define.
(aarch64_preferred_simd_mode): Adjust to use the above.
(aarch64_autovectorize_vector_modes): Likewise.
* doc/invoke.texi: Document aarch64-autovec-preference param.
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.opt
gcc/doc/invoke.texi