Commit 8f40ccea by Ira Rosen Committed by Ira Rosen

arm.c (arm_preferred_simd_mode): Check TARGET_NEON_VECTORIZE_DOUBLE instead of…

arm.c (arm_preferred_simd_mode): Check TARGET_NEON_VECTORIZE_DOUBLE instead of TARGET_NEON_VECTORIZE_QUAD.


	* config/arm/arm.c (arm_preferred_simd_mode): Check
	TARGET_NEON_VECTORIZE_DOUBLE instead of
	TARGET_NEON_VECTORIZE_QUAD.
	(arm_autovectorize_vector_sizes): Likewise.
	* config/arm/arm.opt (mvectorize-with-neon-quad): Make inverse
	mask of mvectorize-with-neon-double.  Add RejectNegative.
	(mvectorize-with-neon-double): New.

From-SVN: r178588
parent f8e9fc30
2011-09-06 Ira Rosen <ira.rosen@linaro.org>
* config/arm/arm.c (arm_preferred_simd_mode): Check
TARGET_NEON_VECTORIZE_DOUBLE instead of
TARGET_NEON_VECTORIZE_QUAD.
(arm_autovectorize_vector_sizes): Likewise.
* config/arm/arm.opt (mvectorize-with-neon-quad): Make inverse
mask of mvectorize-with-neon-double. Add RejectNegative.
(mvectorize-with-neon-double): New.
2011-09-06 Richard Guenther <rguenther@suse.de> 2011-09-06 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (visit_use): CSE stmt pieces and simplify * tree-ssa-sccvn.c (visit_use): CSE stmt pieces and simplify
...@@ -23026,7 +23026,7 @@ arm_array_mode_supported_p (enum machine_mode mode, ...@@ -23026,7 +23026,7 @@ arm_array_mode_supported_p (enum machine_mode mode,
return false; return false;
} }
/* Use the option -mvectorize-with-neon-quad to override the use of doubleword /* Use the option -mvectorize-with-neon-double to override the use of quardword
registers when autovectorizing for Neon, at least until multiple vector registers when autovectorizing for Neon, at least until multiple vector
widths are supported properly by the middle-end. */ widths are supported properly by the middle-end. */
...@@ -23037,15 +23037,15 @@ arm_preferred_simd_mode (enum machine_mode mode) ...@@ -23037,15 +23037,15 @@ arm_preferred_simd_mode (enum machine_mode mode)
switch (mode) switch (mode)
{ {
case SFmode: case SFmode:
return TARGET_NEON_VECTORIZE_QUAD ? V4SFmode : V2SFmode; return TARGET_NEON_VECTORIZE_DOUBLE ? V2SFmode : V4SFmode;
case SImode: case SImode:
return TARGET_NEON_VECTORIZE_QUAD ? V4SImode : V2SImode; return TARGET_NEON_VECTORIZE_DOUBLE ? V2SImode : V4SImode;
case HImode: case HImode:
return TARGET_NEON_VECTORIZE_QUAD ? V8HImode : V4HImode; return TARGET_NEON_VECTORIZE_DOUBLE ? V4HImode : V8HImode;
case QImode: case QImode:
return TARGET_NEON_VECTORIZE_QUAD ? V16QImode : V8QImode; return TARGET_NEON_VECTORIZE_DOUBLE ? V8QImode : V16QImode;
case DImode: case DImode:
if (TARGET_NEON_VECTORIZE_QUAD) if (!TARGET_NEON_VECTORIZE_DOUBLE)
return V2DImode; return V2DImode;
break; break;
...@@ -24268,7 +24268,7 @@ arm_expand_sync (enum machine_mode mode, ...@@ -24268,7 +24268,7 @@ arm_expand_sync (enum machine_mode mode,
static unsigned int static unsigned int
arm_autovectorize_vector_sizes (void) arm_autovectorize_vector_sizes (void)
{ {
return TARGET_NEON_VECTORIZE_QUAD ? 16 | 8 : 0; return TARGET_NEON_VECTORIZE_DOUBLE ? 0 : (16 | 8);
} }
static bool static bool
......
...@@ -238,9 +238,13 @@ Target Report RejectNegative Mask(LITTLE_WORDS) ...@@ -238,9 +238,13 @@ Target Report RejectNegative Mask(LITTLE_WORDS)
Assume big endian bytes, little endian words. This option is deprecated. Assume big endian bytes, little endian words. This option is deprecated.
mvectorize-with-neon-quad mvectorize-with-neon-quad
Target Report Mask(NEON_VECTORIZE_QUAD) Target Report RejectNegative InverseMask(NEON_VECTORIZE_DOUBLE)
Use Neon quad-word (rather than double-word) registers for vectorization Use Neon quad-word (rather than double-word) registers for vectorization
mvectorize-with-neon-double
Target Report RejectNegative Mask(NEON_VECTORIZE_DOUBLE)
Use Neon double-word (rather than quad-word) registers for vectorization
mword-relocations mword-relocations
Target Report Var(target_word_relocations) Init(TARGET_DEFAULT_WORD_RELOCATIONS) Target Report Var(target_word_relocations) Init(TARGET_DEFAULT_WORD_RELOCATIONS)
Only generate absolute relocations on word sized values. Only generate absolute relocations on word sized values.
......
2011-09-06 Ira Rosen <ira.rosen@linaro.org>
* lib/target-supports.exp (check_effective_target_vect_multiple_sizes):
New procedure.
(add_options_for_quad_vectors): Replace with ...
(add_options_for_double_vectors): ... this.
* gfortran.dg/vect/pr19049.f90: Expect more printings on targets that
support multiple vector sizes since the vectorizer attempts to
vectorize with both vector sizes.
* gcc.dg/vect/no-vfa-vect-79.c,
gcc.dg/vect/no-vfa-vect-102a.c, gcc.dg/vect/vect-outer-1a.c,
gcc.dg/vect/vect-outer-1b.c, gcc.dg/vect/vect-outer-2b.c,
gcc.dg/vect/vect-outer-3a.c, gcc.dg/vect/no-vfa-vect-37.c,
gcc.dg/vect/vect-outer-3b.c, gcc.dg/vect/no-vfa-vect-101.c,
gcc.dg/vect/no-vfa-vect-102.c, gcc.dg/vect/vect-reduc-dot-s8b.c,
gcc.dg/vect/vect-outer-1.c, gcc.dg/vect/vect-104.c: Likewise.
* gcc.dg/vect/vect-42.c: Run with 64 bit vectors if applicable.
* gcc.dg/vect/vect-multitypes-6.c, gcc.dg/vect/vect-52.c,
gcc.dg/vect/vect-54.c, gcc.dg/vect/vect-46.c, gcc.dg/vect/vect-48.c,
gcc.dg/vect/vect-96.c, gcc.dg/vect/vect-multitypes-3.c,
gcc.dg/vect/vect-40.c: Likewise.
* gcc.dg/vect/vect-outer-5.c: Remove quad-vectors option as
redundant.
* gcc.dg/vect/vect-109.c, gcc.dg/vect/vect-peel-1.c,
gcc.dg/vect/vect-peel-2.c, gcc.dg/vect/slp-25.c,
gcc.dg/vect/vect-multitypes-1.c, gcc.dg/vect/slp-3.c,
gcc.dg/vect/no-vfa-pr29145.c, gcc.dg/vect/vect-multitypes-4.c:
Likewise.
* gcc.dg/vect/vect-peel-4.c: Make ia global.
2011-09-05 Richard Sandiford <rdsandiford@googlemail.com> 2011-09-05 Richard Sandiford <rdsandiford@googlemail.com>
PR target/49606 PR target/49606
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
...@@ -45,6 +45,7 @@ int main (void) ...@@ -45,6 +45,7 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -53,6 +53,7 @@ int main (void) ...@@ -53,6 +53,7 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -53,6 +53,7 @@ int main (void) ...@@ -53,6 +53,7 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -58,5 +58,6 @@ int main (void) ...@@ -58,5 +58,6 @@ int main (void)
If/when the aliasing problems are resolved, unalignment may If/when the aliasing problems are resolved, unalignment may
prevent vectorization on some targets. */ prevent vectorization on some targets. */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence between" 2 "vect" } } */ /* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence" 4 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -46,5 +46,6 @@ int main (void) ...@@ -46,5 +46,6 @@ int main (void)
If/when the aliasing problems are resolved, unalignment may If/when the aliasing problems are resolved, unalignment may
prevent vectorization on some targets. */ prevent vectorization on some targets. */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence between" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
...@@ -64,6 +64,7 @@ int main (void) ...@@ -64,6 +64,7 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options double_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
...@@ -22,5 +22,6 @@ foo (){ ...@@ -22,5 +22,6 @@ foo (){
} }
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -20,5 +20,6 @@ foo (){ ...@@ -20,5 +20,6 @@ foo (){
} }
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -22,5 +22,6 @@ foo (){ ...@@ -22,5 +22,6 @@ foo (){
} }
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -37,5 +37,6 @@ int main (void) ...@@ -37,5 +37,6 @@ int main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump-times "strided access in outer loop." 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "strided access in outer loop" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -49,5 +49,6 @@ int main (void) ...@@ -49,5 +49,6 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 2 "vect" } } */ /* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 2 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "step doesn't divide the vector-size" 3 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -49,5 +49,6 @@ int main (void) ...@@ -49,5 +49,6 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" } } */ /* { dg-final { scan-tree-dump-times "strided access in outer loop" 2 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "strided access in outer loop" 4 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */
/* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target vect_float } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include <signal.h> #include <signal.h>
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-add-options quad_vectors } */
#include <stdarg.h> #include <stdarg.h>
#include "tree-vect.h" #include "tree-vect.h"
......
...@@ -6,12 +6,12 @@ ...@@ -6,12 +6,12 @@
#define N 128 #define N 128
int ib[N+7]; int ib[N+7];
int ia[N+1];
__attribute__ ((noinline)) __attribute__ ((noinline))
int main1 () int main1 ()
{ {
int i; int i;
int ia[N+1];
/* Don't peel keeping one load and the store aligned. */ /* Don't peel keeping one load and the store aligned. */
for (i = 0; i <= N; i++) for (i = 0; i <= N; i++)
......
...@@ -58,7 +58,8 @@ int main (void) ...@@ -58,7 +58,8 @@ int main (void)
} }
/* { dg-final { scan-tree-dump-times "vect_recog_dot_prod_pattern: detected" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "vect_recog_dot_prod_pattern: detected" 1 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 1 "vect" { xfail vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_multiple_sizes } } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
......
...@@ -19,6 +19,7 @@ subroutine s111 (ntimes,ld,n,ctime,dtime,a,b,c,d,e,aa,bb,cc) ...@@ -19,6 +19,7 @@ subroutine s111 (ntimes,ld,n,ctime,dtime,a,b,c,d,e,aa,bb,cc)
end end
! { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } ! { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } }
! { dg-final { scan-tree-dump-times "complicated access pattern" 1 "vect" } } ! { dg-final { scan-tree-dump-times "complicated access pattern" 1 "vect" { xfail vect_multiple_sizes } } }
! { dg-final { scan-tree-dump-times "complicated access pattern" 2 "vect" { target vect_multiple_sizes } } }
! { dg-final { cleanup-tree-dump "vect" } } ! { dg-final { cleanup-tree-dump "vect" } }
...@@ -3375,6 +3375,24 @@ foreach N {2 3 4 8} { ...@@ -3375,6 +3375,24 @@ foreach N {2 3 4 8} {
}] }]
} }
# Return 1 if the target supports multiple vector sizes
proc check_effective_target_vect_multiple_sizes { } {
global et_vect_multiple_sizes
if [info exists et_vect_multiple_sizes_saved] {
verbose "check_effective_target_vect_multiple_sizes: using cached result" 2
} else {
set et_vect_multiple_sizes_saved 0
if { ([istarget arm*-*-*] && [check_effective_target_arm_neon]) } {
set et_vect_multiple_sizes_saved 1
}
}
verbose "check_effective_target_vect_multiple_sizes: returning $et_vect_multiple_sizes_saved" 2
return $et_vect_multiple_sizes_saved
}
# Return 1 if the target supports section-anchors # Return 1 if the target supports section-anchors
proc check_effective_target_section_anchors { } { proc check_effective_target_section_anchors { } {
...@@ -3758,11 +3776,11 @@ proc add_options_for_bind_pic_locally { flags } { ...@@ -3758,11 +3776,11 @@ proc add_options_for_bind_pic_locally { flags } {
return $flags return $flags
} }
# Add to FLAGS the flags needed to enable 128-bit vectors. # Add to FLAGS the flags needed to enable 64-bit vectors.
proc add_options_for_quad_vectors { flags } { proc add_options_for_double_vectors { flags } {
if [is-effective-target arm_neon_ok] { if [is-effective-target arm_neon_ok] {
return "$flags -mvectorize-with-neon-quad" return "$flags -mvectorize-with-neon-double"
} }
return $flags return $flags
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment