From patchwork Tue Aug 16 09:28:37 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ira Rosen X-Patchwork-Id: 3464 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 21A4523F42 for ; Tue, 16 Aug 2011 09:28:42 +0000 (UTC) Received: from mail-ey0-f170.google.com (mail-ey0-f170.google.com [209.85.215.170]) by fiordland.canonical.com (Postfix) with ESMTP id 069ADA183AB for ; Tue, 16 Aug 2011 09:28:42 +0000 (UTC) Received: by eyd10 with SMTP id 10so4507266eyd.29 for ; Tue, 16 Aug 2011 02:28:41 -0700 (PDT) Received: by 10.213.3.155 with SMTP id 27mr747963ebn.18.1313486920231; Tue, 16 Aug 2011 02:28:40 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.213.102.5 with SMTP id e5cs143151ebo; Tue, 16 Aug 2011 02:28:39 -0700 (PDT) Received: from mr.google.com ([10.101.163.16]) by 10.101.163.16 with SMTP id q16mr6348173ano.76.1313486919570 (num_hops = 1); Tue, 16 Aug 2011 02:28:39 -0700 (PDT) Received: by 10.101.163.16 with SMTP id q16mr4806730ano.76.1313486918657; Tue, 16 Aug 2011 02:28:38 -0700 (PDT) Received: from mail-yi0-f50.google.com (mail-yi0-f50.google.com [209.85.218.50]) by mx.google.com with ESMTPS id u19si8846954anu.48.2011.08.16.02.28.37 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 16 Aug 2011 02:28:38 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.218.50 is neither permitted nor denied by best guess record for domain of ira.rosen@linaro.org) client-ip=209.85.218.50; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.218.50 is neither permitted nor denied by best guess record for domain of ira.rosen@linaro.org) smtp.mail=ira.rosen@linaro.org Received: by yib18 with SMTP id 18so3962106yib.37 for ; Tue, 16 Aug 2011 02:28:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.100.23.8 with SMTP id 8mr4540632anw.87.1313486917745; Tue, 16 Aug 2011 02:28:37 -0700 (PDT) Received: by 10.100.191.10 with HTTP; Tue, 16 Aug 2011 02:28:37 -0700 (PDT) Date: Tue, 16 Aug 2011 12:28:37 +0300 Message-ID: Subject: [patch, ARM] Change default vector size to 128 bits - take 3 From: Ira Rosen To: gcc-patches@gcc.gnu.org Cc: Ramana Radhakrishnan , Richard Earnshaw , Patch Tracking 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. Only generate absolute relocations on word sized values. 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 #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 #include 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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #include "tree-vect.h" 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)