]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm.c (arm_preferred_simd_mode): Check TARGET_NEON_VECTORIZE_DOUBLE instead of TARGET...
authorIra Rosen <ira.rosen@linaro.org>
Tue, 6 Sep 2011 11:29:53 +0000 (11:29 +0000)
committerIra Rosen <irar@gcc.gnu.org>
Tue, 6 Sep 2011 11:29:53 +0000 (11:29 +0000)
* 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

38 files changed:
gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/arm.opt
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-102a.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-37.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-79.c
gcc/testsuite/gcc.dg/vect/slp-25.c
gcc/testsuite/gcc.dg/vect/slp-3.c
gcc/testsuite/gcc.dg/vect/vect-104.c
gcc/testsuite/gcc.dg/vect/vect-109.c
gcc/testsuite/gcc.dg/vect/vect-40.c
gcc/testsuite/gcc.dg/vect/vect-42.c
gcc/testsuite/gcc.dg/vect/vect-46.c
gcc/testsuite/gcc.dg/vect/vect-48.c
gcc/testsuite/gcc.dg/vect/vect-52.c
gcc/testsuite/gcc.dg/vect/vect-54.c
gcc/testsuite/gcc.dg/vect/vect-96.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c
gcc/testsuite/gcc.dg/vect/vect-outer-1.c
gcc/testsuite/gcc.dg/vect/vect-outer-1a.c
gcc/testsuite/gcc.dg/vect/vect-outer-1b.c
gcc/testsuite/gcc.dg/vect/vect-outer-2b.c
gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
gcc/testsuite/gcc.dg/vect/vect-outer-3b.c
gcc/testsuite/gcc.dg/vect/vect-outer-5.c
gcc/testsuite/gcc.dg/vect/vect-peel-1.c
gcc/testsuite/gcc.dg/vect/vect-peel-2.c
gcc/testsuite/gcc.dg/vect/vect-peel-4.c
gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c
gcc/testsuite/gfortran.dg/vect/pr19049.f90
gcc/testsuite/lib/target-supports.exp

index d1c5cee94035082efdd7e9202a20119ed0955a97..bb1fbec7497343f7e55e9316d27601c29b5827ff 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        * tree-ssa-sccvn.c (visit_use): CSE stmt pieces and simplify
index 00479692bd2c0593eecd0f68fd4c7729a345542b..0a1a6518a1c3082363a4703514d166125321a0ac 100644 (file)
@@ -23026,7 +23026,7 @@ arm_array_mode_supported_p (enum machine_mode mode,
   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
    widths are supported properly by the middle-end.  */
 
@@ -23037,15 +23037,15 @@ arm_preferred_simd_mode (enum machine_mode mode)
     switch (mode)
       {
       case SFmode:
-       return TARGET_NEON_VECTORIZE_QUAD ? V4SFmode : V2SFmode;
+       return TARGET_NEON_VECTORIZE_DOUBLE ? V2SFmode : V4SFmode;
       case SImode:
-       return TARGET_NEON_VECTORIZE_QUAD ? V4SImode : V2SImode;
+       return TARGET_NEON_VECTORIZE_DOUBLE ? V2SImode : V4SImode;
       case HImode:
-       return TARGET_NEON_VECTORIZE_QUAD ? V8HImode : V4HImode;
+       return TARGET_NEON_VECTORIZE_DOUBLE ? V4HImode : V8HImode;
       case QImode:
-       return TARGET_NEON_VECTORIZE_QUAD ? V16QImode : V8QImode;
+       return TARGET_NEON_VECTORIZE_DOUBLE ? V8QImode : V16QImode;
       case DImode:
-       if (TARGET_NEON_VECTORIZE_QUAD)
+       if (!TARGET_NEON_VECTORIZE_DOUBLE)
          return V2DImode;
        break;
 
@@ -24268,7 +24268,7 @@ arm_expand_sync (enum machine_mode mode,
 static unsigned int
 arm_autovectorize_vector_sizes (void)
 {
-  return TARGET_NEON_VECTORIZE_QUAD ? 16 | 8 : 0;
+  return TARGET_NEON_VECTORIZE_DOUBLE ? 0 : (16 | 8);
 }
 
 static bool
index be5fd3c538316a84d0358ca88aacab0a81634611..4d29e2fb707048f532d75a29ab9503a09e937112 100644 (file)
@@ -238,9 +238,13 @@ Target Report RejectNegative Mask(LITTLE_WORDS)
 Assume big endian bytes, little endian words.  This option is deprecated.
 
 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
 
+mvectorize-with-neon-double
+Target Report RejectNegative Mask(NEON_VECTORIZE_DOUBLE)
+Use Neon double-word (rather than quad-word) registers for vectorization
+
 mword-relocations
 Target Report Var(target_word_relocations) Init(TARGET_DEFAULT_WORD_RELOCATIONS)
 Only generate absolute relocations on word sized values.
index 0f24c9d682c80112d0034eb122d8a74bd25562db..79749668203cf2a4ee30c4f382e1e921114a673c 100644 (file)
@@ -1,3 +1,33 @@
+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>
 
        PR target/49606
index 0bbb8e943ce4650bab942e3e126a9552eafd334d..e475ffff6385162be8bf3c8c527c6e8cb137a24b 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 1830eb8aa27e65e15b211c8528137b10835e4091..3a54a7530650bdee3acf0e89d8042e4d8889d60f 100644 (file)
@@ -45,6 +45,7 @@ int main (void)
 }
 
 /* { 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" } } */
 
index e49633e02536cc1b805afbfdc9fa76a6816b03f7..a8d3b042dc60a32d1ee79be96a274ece85bfc7af 100644 (file)
@@ -53,6 +53,7 @@ int main (void)
 }
 
 /* { 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" } } */
 
index da8afaa1a7d4c4c49486ddba57329720eff51c9d..41bbbc15cb23329762a55cdfd76cd0c189e06bf0 100644 (file)
@@ -53,6 +53,7 @@ int main (void)
 }
 
 /* { 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" } } */
 
index dc17239a3b4efa44dd6741f06d5c8140d0d8a099..c8cf2cafb907eb2e120d35fd1c918bbb6cec5534 100644 (file)
@@ -58,5 +58,6 @@ int main (void)
    If/when the aliasing problems are resolved, unalignment may
    prevent vectorization on some targets.  */
 /* { 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" } } */
index 1a694b33e05a495170d47d997d40867a69e614de..3c5ce4be8479c26b2b92eb7ee33a4490f08716ce 100644 (file)
@@ -46,5 +46,6 @@ int main (void)
   If/when the aliasing problems are resolved, unalignment may
   prevent vectorization on some targets.  */
 /* { 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" } } */
index 45176398834649d0d0c1d083c64c0b0f3c14d38f..0dec2f11cdc3e909588c89975b94eeb6e04ce534 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 9a504d901e03dc20d9a9c1a9da61522352d3afa6..7d9bd563739ab9170222de5a0b72cd71e3d4d45d 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 5ea2f801a2857116925185c22224392b53c45b24..2b56ddfb3c73bbf4bbd6e816f595bd82534edcf2 100644 (file)
@@ -64,6 +64,7 @@ int main (void)
 }
 
 /* { 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" } } */
 
index 1f2f53ed9ebac042a019ae33e9cdbde3f1d5a02e..854c9707a6d28c22e2332020b9a4b1478b1b61c7 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index d2c17d1d97df2b55a178230ed44e87ca6d8d8bee..269b08955495b6ee0d83c3d6c087a9b5b4069946 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index b9faea491d9a52ad5ce57cda9800d002c9906e63..31810817b46a981d484902956a1165d0a929fe11 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index d506d4329c04e501839195953e116a859daac9ff..26e0e520b9e7cd3078fa0a37a9480b0866b39a68 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index e47ee00de91b80582829fec8c0f94a5869439c67..d2eed3a6b97b747a89e20e2a17c66df1b064c9df 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index af485abbd1492cf0cb3f88083383a733d9627a0d..69c097966edd18bee3bc755a2952be4b491b807f 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 629e82df59b6597ecda3d05830c88eebe2c71644..d563cc34b2d607e60f252e4859e7d0bdd54958a9 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 049ac2434032d9217e8dd779f8f01915d9fa9b06..0060d4eb4bf0d8cf3658d69a43fefffcd2f065db 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_int } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 5e2b41a82f6ba56dc395d2cba636c189cb85c678..7981c4a475f4b98e00c1667a0cf4db24e4b3d87c 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 3346e71e523c17b0df86b8ee49a15702df01c6c7..93796d0cec3f6628b4c405417b8e60994ccbe2b6 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_int } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 9cb6817cec13e4ca0f298f04ae0c60a8eedb2984..ed6ac6eda6b7662fb265dbb852adb10abb9955f2 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 5bb4be8c37a5339dfcabab60e24cec1a906dd9e3..7f72785069a51bc7f1d8850c31de30a472d22d04 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-require-effective-target vect_int } */
+/* { dg-add-options double_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index f0df5d4cd9d2893a4af44fb32cb101b646c7b0ff..2ce8f8ebac85e323ed8a4674b631ff96f21df5e0 100644 (file)
@@ -22,5 +22,6 @@ foo (){
 }
 
 /* { 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" } } */
index f88dd21059bf21e8ad160c85488cd12377e1ec0a..a9b786e235c218681fc3f62475160df011f97c6a 100644 (file)
@@ -20,5 +20,6 @@ foo (){
 }
 
 /* { 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" } } */
index e093d0ea3653dc20ec2d372e71d217f3b250f367..815758c766f703b3c760587439f7ed15a9db12f4 100644 (file)
@@ -22,5 +22,6 @@ foo (){
 }
 
 /* { 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" } } */
index df2e6a7b1291d4bfe57d4dd8c0dc9846d8b9e921..cb62881f004183280f8fb2e0cfbe7052f3d67c4f 100644 (file)
@@ -37,5 +37,6 @@ int main (void)
   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" } } */
index 4b5107dcf4eeee80db77cbe3a063473fe74ce3cc..1759ee38db784d20d11e9f15ea6e30f519d35a93 100644 (file)
@@ -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 "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" } } */
index f11cb751ca4a847d59ba6ad742e6836217b8677c..fda8727bf68d42c94a859bb208edef2d39745362 100644 (file)
@@ -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 "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" } } */
index 05ed39a3da2bc5d30bc1961ad486d4c38e204fea..e319d77e492bc990abded3f39624dee3373216d6 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_float } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include <signal.h>
index 2a150e91203f812c942260bfd441cf9959cce987..342da1827a2143ad6d6779ad07b3562807b42561 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 126c2cf1139131535722eea55411c39d277f6002..6a764c150400f8470794300df2e0b4c9fa7c8dff 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
index 1b47f2682bb9e0decd7b9053bfc2a9281be61878..dffb858e2b2e662b215ac4a5ecd949c3fbfa89cf 100644 (file)
@@ -6,12 +6,12 @@
 #define N 128
 
 int ib[N+7];
+int ia[N+1];
 
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
-  int ia[N+1];
 
   /* Don't peel keeping one load and the store aligned.  */
   for (i = 0; i <= N; i++)
index 53a240118c65151a70ae66f3449c16217fada566..dc9eb61580d0fb8ad4e28c58874f77ed8c62dc60 100644 (file)
@@ -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_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 *-*-* } } } */
 
index 6c8030cce30dad8c615c54b3114f008876662525..5552af6da84081d5865686ccbe90693c20335663 100644 (file)
@@ -19,6 +19,7 @@ subroutine s111 (ntimes,ld,n,ctime,dtime,a,b,c,d,e,aa,bb,cc)
       end
 
 ! { 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" } }
 
index 54dc6b60bd58a38462f15b1b9a6a47272aa30819..5470dafafc2a942130634e470ec26fa4219d1e12 100644 (file)
@@ -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
 
 proc check_effective_target_section_anchors { } {
@@ -3758,11 +3776,11 @@ proc add_options_for_bind_pic_locally { 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] {
-       return "$flags -mvectorize-with-neon-quad"
+       return "$flags -mvectorize-with-neon-double"
     }
 
     return $flags