* [patch, ARM] Change default vector size to 128 bits - take 3
@ 2011-08-16 11:25 Ira Rosen
2011-08-17 13:54 ` Richard Earnshaw
0 siblings, 1 reply; 3+ messages in thread
From: Ira Rosen @ 2011-08-16 11:25 UTC (permalink / raw)
To: gcc-patches; +Cc: Ramana Radhakrishnan, Richard Earnshaw, Patch Tracking
[-- Attachment #1: Type: text/plain, Size: 4689 bytes --]
Hi,
This patch changes the default vector size for auto-vectorization on
ARM NEON to 128 bits. This new version is a result of a discussion
with Richard and Ramana.
wwwdocs changes will follow shortly.
Bootstrapped and tested on arm-linux-gnueabi. The testsuite changes
were also checked on powerpc64-suse-linux and x86_64-suse-linux.
There is one new failure:
gcc.c-torture/execute/mode-dependent-address.c fails with -O3
-funroll-loops with this patch or with -mvectorize-with-neon-quad.
Ramana has a patch to fix this
http://gcc.gnu.org/ml/gcc/2011-08/msg00284.html. I will wait with
committing my patch until this issue is resolved.
OK for mainline?
Thanks,
Ira
ChangeLog:
* config/arm/arm.c (arm_preferred_simd_mode): Check
TARGET_NEON_VECTORIZE_DOUBLE instead of
TARGET_NEON_VECTORIZE_QUAD.
(arm_expand_sync): Likewise.
* config/arm/arm.opt (mvectorize-with-neon-quad): Make inverse
mask of mvectorize-with-neon-double. Add RejectNegative.
(mvectorize-with-neon-double): New.
testsuite/ChangeLog:
* 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.
Index: arm.c
===================================================================
--- arm.c (revision 177426)
+++ arm.c (working copy)
@@ -22767,15 +22767,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;
@@ -23998,7 +23998,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: arm.opt
===================================================================
--- arm.opt (revision 177426)
+++ arm.opt (working copy)
@@ -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.
[-- Attachment #2: new-tests.txt --]
[-- Type: text/plain, Size: 19123 bytes --]
Index: testsuite/lib/target-supports.exp
===================================================================
--- testsuite/lib/target-supports.exp (revision 177426)
+++ testsuite/lib/target-supports.exp (working copy)
@@ -3362,6 +3362,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 { } {
@@ -3745,11 +3763,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
Index: testsuite/gfortran.dg/vect/pr19049.f90
===================================================================
--- testsuite/gfortran.dg/vect/pr19049.f90 (revision 177426)
+++ testsuite/gfortran.dg/vect/pr19049.f90 (working copy)
@@ -19,6 +19,7 @@ subroutine s111 (ntimes,ld,n,ctime,dtime,a,b,c,d,e
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: testsuite/gcc.dg/vect/vect-42.c
===================================================================
--- testsuite/gcc.dg/vect/vect-42.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-42.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/no-vfa-vect-79.c
===================================================================
--- testsuite/gcc.dg/vect/no-vfa-vect-79.c (revision 177426)
+++ testsuite/gcc.dg/vect/no-vfa-vect-79.c (working copy)
@@ -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: testsuite/gcc.dg/vect/no-vfa-vect-102a.c
===================================================================
--- testsuite/gcc.dg/vect/no-vfa-vect-102a.c (revision 177426)
+++ testsuite/gcc.dg/vect/no-vfa-vect-102a.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-outer-5.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-5.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-5.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_float } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include <signal.h>
Index: testsuite/gcc.dg/vect/vect-multitypes-6.c
===================================================================
--- testsuite/gcc.dg/vect/vect-multitypes-6.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-multitypes-6.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-52.c
===================================================================
--- testsuite/gcc.dg/vect/vect-52.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-52.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-109.c
===================================================================
--- testsuite/gcc.dg/vect/vect-109.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-109.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-54.c
===================================================================
--- testsuite/gcc.dg/vect/vect-54.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-54.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-46.c
===================================================================
--- testsuite/gcc.dg/vect/vect-46.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-46.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-peel-1.c
===================================================================
--- testsuite/gcc.dg/vect/vect-peel-1.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-peel-1.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-outer-1a.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-1a.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-1a.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-peel-2.c
===================================================================
--- testsuite/gcc.dg/vect/vect-peel-2.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-peel-2.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-48.c
===================================================================
--- testsuite/gcc.dg/vect/vect-48.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-48.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-outer-1b.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-1b.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-1b.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-peel-4.c
===================================================================
--- testsuite/gcc.dg/vect/vect-peel-4.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-peel-4.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-outer-2b.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-2b.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-2b.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-outer-3a.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-3a.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-3a.c (working copy)
@@ -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: testsuite/gcc.dg/vect/no-vfa-vect-37.c
===================================================================
--- testsuite/gcc.dg/vect/no-vfa-vect-37.c (revision 177426)
+++ testsuite/gcc.dg/vect/no-vfa-vect-37.c (working copy)
@@ -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: testsuite/gcc.dg/vect/slp-25.c
===================================================================
--- testsuite/gcc.dg/vect/slp-25.c (revision 177426)
+++ testsuite/gcc.dg/vect/slp-25.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-outer-3b.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-3b.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-3b.c (working copy)
@@ -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: testsuite/gcc.dg/vect/no-vfa-vect-101.c
===================================================================
--- testsuite/gcc.dg/vect/no-vfa-vect-101.c (revision 177426)
+++ testsuite/gcc.dg/vect/no-vfa-vect-101.c (working copy)
@@ -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: testsuite/gcc.dg/vect/no-vfa-vect-102.c
===================================================================
--- testsuite/gcc.dg/vect/no-vfa-vect-102.c (revision 177426)
+++ testsuite/gcc.dg/vect/no-vfa-vect-102.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-96.c
===================================================================
--- testsuite/gcc.dg/vect/vect-96.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-96.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-multitypes-1.c
===================================================================
--- testsuite/gcc.dg/vect/vect-multitypes-1.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-multitypes-1.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c
===================================================================
--- testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-reduc-dot-s8b.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-outer-1.c
===================================================================
--- testsuite/gcc.dg/vect/vect-outer-1.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-outer-1.c (working copy)
@@ -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: testsuite/gcc.dg/vect/slp-3.c
===================================================================
--- testsuite/gcc.dg/vect/slp-3.c (revision 177426)
+++ testsuite/gcc.dg/vect/slp-3.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/no-vfa-pr29145.c
===================================================================
--- testsuite/gcc.dg/vect/no-vfa-pr29145.c (revision 177426)
+++ testsuite/gcc.dg/vect/no-vfa-pr29145.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-multitypes-3.c
===================================================================
--- testsuite/gcc.dg/vect/vect-multitypes-3.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-multitypes-3.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_int } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-40.c
===================================================================
--- testsuite/gcc.dg/vect/vect-40.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-40.c (working copy)
@@ -1,4 +1,5 @@
/* { dg-require-effective-target vect_float } */
+/* { dg-add-options double_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
Index: testsuite/gcc.dg/vect/vect-104.c
===================================================================
--- testsuite/gcc.dg/vect/vect-104.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-104.c (working copy)
@@ -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: testsuite/gcc.dg/vect/vect-multitypes-4.c
===================================================================
--- testsuite/gcc.dg/vect/vect-multitypes-4.c (revision 177426)
+++ testsuite/gcc.dg/vect/vect-multitypes-4.c (working copy)
@@ -1,5 +1,4 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-add-options quad_vectors } */
#include <stdarg.h>
#include "tree-vect.h"
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch, ARM] Change default vector size to 128 bits - take 3
2011-08-16 11:25 [patch, ARM] Change default vector size to 128 bits - take 3 Ira Rosen
@ 2011-08-17 13:54 ` Richard Earnshaw
2011-09-06 11:36 ` Ira Rosen
0 siblings, 1 reply; 3+ messages in thread
From: Richard Earnshaw @ 2011-08-17 13:54 UTC (permalink / raw)
To: Ira Rosen; +Cc: gcc-patches, Ramana Radhakrishnan, Patch Tracking
On 16/08/11 10:28, Ira Rosen wrote:
> Hi,
>
> This patch changes the default vector size for auto-vectorization on
> ARM NEON to 128 bits. This new version is a result of a discussion
> with Richard and Ramana.
>
> wwwdocs changes will follow shortly.
>
> Bootstrapped and tested on arm-linux-gnueabi. The testsuite changes
> were also checked on powerpc64-suse-linux and x86_64-suse-linux.
>
> There is one new failure:
> gcc.c-torture/execute/mode-dependent-address.c fails with -O3
> -funroll-loops with this patch or with -mvectorize-with-neon-quad.
> Ramana has a patch to fix this
> http://gcc.gnu.org/ml/gcc/2011-08/msg00284.html. I will wait with
> committing my patch until this issue is resolved.
>
> OK for mainline?
>
> Thanks,
> Ira
>
> ChangeLog:
>
> * config/arm/arm.c (arm_preferred_simd_mode): Check
> TARGET_NEON_VECTORIZE_DOUBLE instead of
> TARGET_NEON_VECTORIZE_QUAD.
> (arm_expand_sync): Likewise.
> * config/arm/arm.opt (mvectorize-with-neon-quad): Make inverse
> mask of mvectorize-with-neon-double. Add RejectNegative.
> (mvectorize-with-neon-double): New.
>
> testsuite/ChangeLog:
>
> * 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.
>
Ok with the following change:
> static unsigned int
> arm_autovectorize_vector_sizes (void)
> {
> - return TARGET_NEON_VECTORIZE_QUAD ? 16 | 8 : 0;
> + return TARGET_NEON_VECTORIZE_DOUBLE ? 0 : 16 | 8;
> }
Please put parentheses round the expression to make the precedence explicit.
R.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [patch, ARM] Change default vector size to 128 bits - take 3
2011-08-17 13:54 ` Richard Earnshaw
@ 2011-09-06 11:36 ` Ira Rosen
0 siblings, 0 replies; 3+ messages in thread
From: Ira Rosen @ 2011-09-06 11:36 UTC (permalink / raw)
To: Richard Earnshaw; +Cc: gcc-patches, Ramana Radhakrishnan, Patch Tracking
On 17 August 2011 15:49, Richard Earnshaw <rearnsha@arm.com> wrote:
> On 16/08/11 10:28, Ira Rosen wrote:
>> Hi,
>>
>> This patch changes the default vector size for auto-vectorization on
>> ARM NEON to 128 bits. This new version is a result of a discussion
>> with Richard and Ramana.
>>
>> wwwdocs changes will follow shortly.
>>
>> Bootstrapped and tested on arm-linux-gnueabi. The testsuite changes
>> were also checked on powerpc64-suse-linux and x86_64-suse-linux.
>>
>> There is one new failure:
>> gcc.c-torture/execute/mode-dependent-address.c fails with -O3
>> -funroll-loops with this patch or with -mvectorize-with-neon-quad.
>> Ramana has a patch to fix this
>> http://gcc.gnu.org/ml/gcc/2011-08/msg00284.html. I will wait with
>> committing my patch until this issue is resolved.
>>
>> OK for mainline?
>>
>> Thanks,
>> Ira
>>
>> ChangeLog:
>>
>> * config/arm/arm.c (arm_preferred_simd_mode): Check
>> TARGET_NEON_VECTORIZE_DOUBLE instead of
>> TARGET_NEON_VECTORIZE_QUAD.
>> (arm_expand_sync): Likewise.
>> * config/arm/arm.opt (mvectorize-with-neon-quad): Make inverse
>> mask of mvectorize-with-neon-double. Add RejectNegative.
>> (mvectorize-with-neon-double): New.
>>
>> testsuite/ChangeLog:
>>
>> * 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.
>>
>
> Ok with the following change:
>
>> static unsigned int
>> arm_autovectorize_vector_sizes (void)
>> {
>> - return TARGET_NEON_VECTORIZE_QUAD ? 16 | 8 : 0;
>> + return TARGET_NEON_VECTORIZE_DOUBLE ? 0 : 16 | 8;
>> }
>
>
> Please put parentheses round the expression to make the precedence explicit.
I added parentheses and committed the patch.
Thanks,
Ira
>
> R.
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-09-06 11:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-16 11:25 [patch, ARM] Change default vector size to 128 bits - take 3 Ira Rosen
2011-08-17 13:54 ` Richard Earnshaw
2011-09-06 11:36 ` Ira Rosen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).