Hi, This patch wires up TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES on AArch64 to allow for 64-bit or 128-bit vectorization if the preferred vector mode is not acceptable.
The patch has been regression tested on aarch64-none-elf with no regressions. Thanks, James Greenhalgh --- gcc/ 2012-12-06 James Greenhalgh <james.greenha...@arm.com> Tejas Belagod <tejas.bela...@arm.com> * config/aarch64/aarch64.c (aarch64_autovectorize_vector_sizes): New. (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Define. gcc/testsuite/ 2012-12-06 James Greenhalgh <james.greenha...@arm.com> Tejas Belagod <tejas.bela...@arm.com> * lib/target-supports.exp (check_effective_target_vect_multiple_sizes): Enable for AArch64.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index f262ef9..02f888e 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5861,6 +5861,14 @@ aarch64_preferred_simd_mode (enum machine_mode mode) return word_mode; } +/* Return the bitmask of possible vector sizes for the vectorizer + to iterate over. */ +static unsigned int +aarch64_autovectorize_vector_sizes (void) +{ + return (16 | 8); +} + /* Return the equivalent letter for size. */ static unsigned char sizetochar (int size) @@ -6853,6 +6861,10 @@ aarch64_c_mode_for_suffix (char suffix) #undef TARGET_VECTORIZE_PREFERRED_SIMD_MODE #define TARGET_VECTORIZE_PREFERRED_SIMD_MODE aarch64_preferred_simd_mode +#undef TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES +#define TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES \ + aarch64_autovectorize_vector_sizes + /* Section anchor support. */ #undef TARGET_MIN_ANCHOR_OFFSET diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 5935346..5e53b72 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3842,7 +3842,8 @@ proc check_effective_target_vect_multiple_sizes { } { global et_vect_multiple_sizes_saved set et_vect_multiple_sizes_saved 0 - if { ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]) } { + if { ([istarget aarch64*-*-*] + || ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok])) } { set et_vect_multiple_sizes_saved 1 } if { ([istarget x86_64-*-*] || [istarget i?86-*-*]) } {