From a826c5019e1439181a822c2b5079fec22654e37b Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 9 Nov 2017 15:15:36 +0000 Subject: [PATCH] Add VECTOR_BITS to tree-vect.h Several vector tests are sensitive to the vector size. This patch adds a VECTOR_BITS macro to tree-vect.h to select the expected vector size and uses it to influence iteration counts and array sizes. The tests keep the original values if the vector size is small enough. For now VECTOR_BITS is always 128, but the SVE patches add other values. 2017-11-09 Richard Sandiford Alan Hayward David Sherwood gcc/testsuite/ * gcc.dg/vect/tree-vect.h (VECTOR_BITS): Define. * gcc.dg/vect/bb-slp-pr69907.c: Include tree-vect.h. (N): New macro. (foo): Use it instead of hard-coded 320. * gcc.dg/vect/no-scevccp-outer-7.c (N): Redefine if the default value is too small for VECTOR_BITS. * gcc.dg/vect/no-scevccp-vect-iv-3.c (N): Likewise. * gcc.dg/vect/no-section-anchors-vect-31.c (N): Likewise. * gcc.dg/vect/no-section-anchors-vect-36.c (N): Likewise. * gcc.dg/vect/slp-perm-9.c (N): Likewise. * gcc.dg/vect/vect-32.c (N): Likewise. * gcc.dg/vect/vect-75.c (N, OFF): Likewise. * gcc.dg/vect/vect-77-alignchecks.c (N, OFF): Likewise. * gcc.dg/vect/vect-78-alignchecks.c (N, OFF): Likewise. * gcc.dg/vect/vect-89.c (N): Likewise. * gcc.dg/vect/vect-96.c (N): Likewise. * gcc.dg/vect/vect-multitypes-3.c (N): Likewise. * gcc.dg/vect/vect-multitypes-6.c (N): Likewise. * gcc.dg/vect/vect-over-widen-1.c (N): Likewise. * gcc.dg/vect/vect-over-widen-4.c (N): Likewise. * gcc.dg/vect/vect-reduc-pattern-1a.c (N): Likewise. * gcc.dg/vect/vect-reduc-pattern-1b.c (N): Likewise. * gcc.dg/vect/vect-reduc-pattern-2a.c (N): Likewise. * gcc.dg/vect/no-section-anchors-vect-64.c (NINTS): New macro. (N): Redefine in terms of NINTS. (ia, ib, ic): Use NINTS instead of hard-coded constants in the array bounds. * gcc.dg/vect/no-section-anchors-vect-69.c (NINTS): New macro. (N): Redefine in terms of NINTS. (test1): Replace a and b fields with NINTS - 2 ints of padding. (main1): Use NINTS instead of hard-coded constants. * gcc.dg/vect/section-anchors-vect-69.c (NINTS): New macro. (N): Redefine in terms of NINTS. (test1): Replace a and b fields with NINTS - 2 ints of padding. (test2): Remove incorrect comments about alignment. (main1): Use NINTS instead of hard-coded constants. * gcc.dg/vect/pr45752.c (N): Redefine if the default value is too small for VECTOR_BITS. (main): Continue to use canned results for the default value of N, but compute the expected results from scratch for other values. * gcc.dg/vect/slp-perm-1.c (N, main): As for pr45752.c. * gcc.dg/vect/slp-perm-4.c (N, main): Likewise. * gcc.dg/vect/slp-perm-5.c (N, main): Likewise. * gcc.dg/vect/slp-perm-6.c (N, main): Likewise. * gcc.dg/vect/slp-perm-7.c (N, main): Likewise. * gcc.dg/vect/pr65518.c (NINTS, N, RESULT): New macros. (giga): Use NINTS as the array bound. (main): Use NINTS, N and RESULT. * gcc.dg/vect/pr65947-5.c (N): Redefine if the default value is too small for VECTOR_BITS. (main): Fill in any remaining elements of A programmatically. * gcc.dg/vect/pr81136.c: Include tree-vect.h. (a): Use VECTOR_BITS to set the alignment of the target structure. * gcc.dg/vect/slp-19c.c (N): Redefine if the default value is too small for VECTOR_BITS. (main1): Continue to use the canned input for the default value of N, but compute the input from scratch for other values. * gcc.dg/vect/slp-28.c (N): Redefine if the default value is too small for VECTOR_BITS. (in1, in2, in3): Remove initialization. (check1, check2): Delete. (main1): Initialize in1, in2 and in3 here. Check every element of the vectors and compute the expected values directly instead of using an array. * gcc.dg/vect/slp-perm-8.c (N): Redefine if the default value is too small for VECTOR_BITS. (foo, main): Change type of "i" to int. * gcc.dg/vect/vect-103.c (NINTS): New macro. (N): Redefine in terms of N. (c): Delete. (main1): Use NINTS. Check the result from a and b directly. * gcc.dg/vect/vect-67.c (NINTS): New macro. (N): Redefine in terms of N. (main1): Use NINTS for the inner array bounds. * gcc.dg/vect/vect-70.c (NINTS, OUTERN): New macros. (N): Redefine in terms of NINTS. (s): Keep the outer dimensions as 4 even if N is larger than 24. (tmp1): New variable. (main1): Only define a local tmp1 if NINTS is relatively small. Use OUTERN for the outer loops and NINTS for the inner loops. * gcc.dg/vect/vect-91.c (OFF): New macro. (a, main3): Use it. * gcc.dg/vect/vect-92.c (NITER): New macro. (main1, main2): Use it. * gcc.dg/vect/vect-93.c (N): Rename to... (N1): ...this. (main): Update accordingly. (N2): New macro. (main1): Use N1 instead of 3001 and N2 insteaed of 10. * gcc.dg/vect/vect-multitypes-1.c (NSHORTS, NINTS): New macros. (N): Redefine in terms of NSHORTS. (main1): Use NINTS - 1 instead of 3 and NSHORTS - 1 instead of 7. (main): Likewise. * gcc.dg/vect/vect-over-widen-3-big-array.c (N): Define to VECTOR_BITS. (foo): Truncate the expected value to the type of *d. * gcc.dg/vect/vect-peel-3.c (NINTS, EXTRA): New macros. (ia, ib, ic, main): Use EXTRA. (main): Use NINTS. (RES_A, RES_B, REC_C): New macros. (RES): Redefine as their sum. * gcc.dg/vect/vect-reduc-or_1.c (N): New macro. (in): Change number of elements to N. (main): Update accordingly. Calculate the expected result. * gcc.dg/vect/vect-reduc-or_2.c (N, in, main): As for vect-reduc-or-1.c. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r254589 --- gcc/testsuite/ChangeLog | 110 ++++++++++++++++++ gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c | 10 +- .../gcc.dg/vect/no-scevccp-outer-7.c | 4 + .../gcc.dg/vect/no-scevccp-vect-iv-3.c | 4 + .../gcc.dg/vect/no-section-anchors-vect-31.c | 5 + .../gcc.dg/vect/no-section-anchors-vect-36.c | 4 + .../gcc.dg/vect/no-section-anchors-vect-64.c | 14 ++- .../gcc.dg/vect/no-section-anchors-vect-69.c | 23 ++-- gcc/testsuite/gcc.dg/vect/pr45752.c | 61 +++++++++- gcc/testsuite/gcc.dg/vect/pr65518.c | 19 ++- gcc/testsuite/gcc.dg/vect/pr65947-5.c | 9 ++ gcc/testsuite/gcc.dg/vect/pr81136.c | 4 +- .../gcc.dg/vect/section-anchors-vect-69.c | 27 +++-- gcc/testsuite/gcc.dg/vect/slp-19c.c | 13 +++ gcc/testsuite/gcc.dg/vect/slp-28.c | 28 +++-- gcc/testsuite/gcc.dg/vect/slp-perm-1.c | 24 +++- gcc/testsuite/gcc.dg/vect/slp-perm-4.c | 35 +++++- gcc/testsuite/gcc.dg/vect/slp-perm-5.c | 35 +++++- gcc/testsuite/gcc.dg/vect/slp-perm-6.c | 35 +++++- gcc/testsuite/gcc.dg/vect/slp-perm-7.c | 30 ++++- gcc/testsuite/gcc.dg/vect/slp-perm-8.c | 10 +- gcc/testsuite/gcc.dg/vect/slp-perm-9.c | 4 + gcc/testsuite/gcc.dg/vect/tree-vect.h | 2 + gcc/testsuite/gcc.dg/vect/vect-103.c | 24 ++-- gcc/testsuite/gcc.dg/vect/vect-32.c | 6 +- gcc/testsuite/gcc.dg/vect/vect-67.c | 14 ++- gcc/testsuite/gcc.dg/vect/vect-70.c | 40 +++++-- gcc/testsuite/gcc.dg/vect/vect-75.c | 5 + .../gcc.dg/vect/vect-77-alignchecks.c | 5 + .../gcc.dg/vect/vect-78-alignchecks.c | 5 + gcc/testsuite/gcc.dg/vect/vect-89.c | 4 + gcc/testsuite/gcc.dg/vect/vect-91.c | 11 +- gcc/testsuite/gcc.dg/vect/vect-92.c | 10 +- gcc/testsuite/gcc.dg/vect/vect-93.c | 22 ++-- gcc/testsuite/gcc.dg/vect/vect-96.c | 4 + gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c | 25 ++-- gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c | 4 + gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c | 4 + gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c | 4 + .../gcc.dg/vect/vect-over-widen-3-big-array.c | 6 +- gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c | 4 + gcc/testsuite/gcc.dg/vect/vect-peel-3.c | 26 +++-- gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c | 21 +++- gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c | 21 +++- .../gcc.dg/vect/vect-reduc-pattern-1a.c | 5 + .../gcc.dg/vect/vect-reduc-pattern-1b.c | 5 + .../gcc.dg/vect/vect-reduc-pattern-2a.c | 5 + 47 files changed, 668 insertions(+), 122 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c9a3fba3f14c..b444978769e7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,113 @@ +2017-11-09 Richard Sandiford + Alan Hayward + David Sherwood + + * gcc.dg/vect/tree-vect.h (VECTOR_BITS): Define. + * gcc.dg/vect/bb-slp-pr69907.c: Include tree-vect.h. + (N): New macro. + (foo): Use it instead of hard-coded 320. + * gcc.dg/vect/no-scevccp-outer-7.c (N): Redefine if the default + value is too small for VECTOR_BITS. + * gcc.dg/vect/no-scevccp-vect-iv-3.c (N): Likewise. + * gcc.dg/vect/no-section-anchors-vect-31.c (N): Likewise. + * gcc.dg/vect/no-section-anchors-vect-36.c (N): Likewise. + * gcc.dg/vect/slp-perm-9.c (N): Likewise. + * gcc.dg/vect/vect-32.c (N): Likewise. + * gcc.dg/vect/vect-75.c (N, OFF): Likewise. + * gcc.dg/vect/vect-77-alignchecks.c (N, OFF): Likewise. + * gcc.dg/vect/vect-78-alignchecks.c (N, OFF): Likewise. + * gcc.dg/vect/vect-89.c (N): Likewise. + * gcc.dg/vect/vect-96.c (N): Likewise. + * gcc.dg/vect/vect-multitypes-3.c (N): Likewise. + * gcc.dg/vect/vect-multitypes-6.c (N): Likewise. + * gcc.dg/vect/vect-over-widen-1.c (N): Likewise. + * gcc.dg/vect/vect-over-widen-4.c (N): Likewise. + * gcc.dg/vect/vect-reduc-pattern-1a.c (N): Likewise. + * gcc.dg/vect/vect-reduc-pattern-1b.c (N): Likewise. + * gcc.dg/vect/vect-reduc-pattern-2a.c (N): Likewise. + * gcc.dg/vect/no-section-anchors-vect-64.c (NINTS): New macro. + (N): Redefine in terms of NINTS. + (ia, ib, ic): Use NINTS instead of hard-coded constants in the + array bounds. + * gcc.dg/vect/no-section-anchors-vect-69.c (NINTS): New macro. + (N): Redefine in terms of NINTS. + (test1): Replace a and b fields with NINTS - 2 ints of padding. + (main1): Use NINTS instead of hard-coded constants. + * gcc.dg/vect/section-anchors-vect-69.c (NINTS): New macro. + (N): Redefine in terms of NINTS. + (test1): Replace a and b fields with NINTS - 2 ints of padding. + (test2): Remove incorrect comments about alignment. + (main1): Use NINTS instead of hard-coded constants. + * gcc.dg/vect/pr45752.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (main): Continue to use canned results for the default value of N, + but compute the expected results from scratch for other values. + * gcc.dg/vect/slp-perm-1.c (N, main): As for pr45752.c. + * gcc.dg/vect/slp-perm-4.c (N, main): Likewise. + * gcc.dg/vect/slp-perm-5.c (N, main): Likewise. + * gcc.dg/vect/slp-perm-6.c (N, main): Likewise. + * gcc.dg/vect/slp-perm-7.c (N, main): Likewise. + * gcc.dg/vect/pr65518.c (NINTS, N, RESULT): New macros. + (giga): Use NINTS as the array bound. + (main): Use NINTS, N and RESULT. + * gcc.dg/vect/pr65947-5.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (main): Fill in any remaining elements of A programmatically. + * gcc.dg/vect/pr81136.c: Include tree-vect.h. + (a): Use VECTOR_BITS to set the alignment of the target structure. + * gcc.dg/vect/slp-19c.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (main1): Continue to use the canned input for the default value of N, + but compute the input from scratch for other values. + * gcc.dg/vect/slp-28.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (in1, in2, in3): Remove initialization. + (check1, check2): Delete. + (main1): Initialize in1, in2 and in3 here. Check every element + of the vectors and compute the expected values directly instead + of using an array. + * gcc.dg/vect/slp-perm-8.c (N): Redefine if the default value is + too small for VECTOR_BITS. + (foo, main): Change type of "i" to int. + * gcc.dg/vect/vect-103.c (NINTS): New macro. + (N): Redefine in terms of N. + (c): Delete. + (main1): Use NINTS. Check the result from a and b directly. + * gcc.dg/vect/vect-67.c (NINTS): New macro. + (N): Redefine in terms of N. + (main1): Use NINTS for the inner array bounds. + * gcc.dg/vect/vect-70.c (NINTS, OUTERN): New macros. + (N): Redefine in terms of NINTS. + (s): Keep the outer dimensions as 4 even if N is larger than 24. + (tmp1): New variable. + (main1): Only define a local tmp1 if NINTS is relatively small. + Use OUTERN for the outer loops and NINTS for the inner loops. + * gcc.dg/vect/vect-91.c (OFF): New macro. + (a, main3): Use it. + * gcc.dg/vect/vect-92.c (NITER): New macro. + (main1, main2): Use it. + * gcc.dg/vect/vect-93.c (N): Rename to... + (N1): ...this. + (main): Update accordingly. + (N2): New macro. + (main1): Use N1 instead of 3001 and N2 insteaed of 10. + * gcc.dg/vect/vect-multitypes-1.c (NSHORTS, NINTS): New macros. + (N): Redefine in terms of NSHORTS. + (main1): Use NINTS - 1 instead of 3 and NSHORTS - 1 instead of 7. + (main): Likewise. + * gcc.dg/vect/vect-over-widen-3-big-array.c (N): Define to VECTOR_BITS. + (foo): Truncate the expected value to the type of *d. + * gcc.dg/vect/vect-peel-3.c (NINTS, EXTRA): New macros. + (ia, ib, ic, main): Use EXTRA. + (main): Use NINTS. + (RES_A, RES_B, REC_C): New macros. + (RES): Redefine as their sum. + * gcc.dg/vect/vect-reduc-or_1.c (N): New macro. + (in): Change number of elements to N. + (main): Update accordingly. Calculate the expected result. + * gcc.dg/vect/vect-reduc-or_2.c (N, in, main): As for + vect-reduc-or-1.c. + 2017-11-09 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c index 9f1e71a3db13..7e4a452e6099 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c @@ -2,10 +2,18 @@ /* { dg-additional-options "-O3" } */ /* { dg-require-effective-target vect_unpack } */ +#include "tree-vect.h" + +#if VECTOR_BITS > 512 +#define N (VECTOR_BITS * 10 / 16) +#else +#define N 320 +#endif + void foo(unsigned *p1, unsigned short *p2) { int n; - for (n = 0; n < 320; n++) + for (n = 0; n < N; n++) p1[n] = p2[n * 2]; } diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-7.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-7.c index 224148d2b1e6..f56bd2e50af4 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-7.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-7.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 256 +#define N (VECTOR_BITS / 16) +#else #define N 16 +#endif unsigned short in[N]; unsigned short coef[N]; diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-vect-iv-3.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-vect-iv-3.c index 3bc73077b1ff..50b4998bb6c9 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-vect-iv-3.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-vect-iv-3.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 256 +#define N (VECTOR_BITS / 16 + 10) +#else #define N 26 +#endif __attribute__ ((noinline)) unsigned int main1 () diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c index c7b8b0eeff23..629f908d4c85 100644 --- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c +++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c @@ -4,7 +4,12 @@ #include #include "tree-vect.h" +/* N / 2 bytes has to be worth vectorizing even with peeling. */ +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 4 / 8) +#else #define N 64 +#endif struct t{ int k[N]; diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-36.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-36.c index 0fb9594ea166..7663ca7281aa 100644 --- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-36.c +++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-36.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 8) +#else #define N 32 +#endif struct { char ca[N]; diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c index fc52c92b89a3..8ff84b5ab581 100644 --- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c +++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c @@ -4,12 +4,18 @@ #include #include "tree-vect.h" -#define N 16 +#if VECTOR_BITS > 128 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 4 +#endif + +#define N (NINTS * 4) int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; -int ia[N][4][N+1]; -int ic[N][N][3][2*N+2]; -int id[N][N][N+4]; +int ia[N][NINTS][N + 1]; +int ic[N][N][NINTS - 1][2 * N + 2]; +int id[N][N][N + NINTS]; __attribute__ ((noinline)) int main1 () diff --git a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c index 1458ba60426e..f7ad45b4f7ab 100644 --- a/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c +++ b/gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c @@ -5,7 +5,13 @@ #include #include "tree-vect.h" -#define N 24 +#if VECTOR_BITS > 128 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 4 +#endif + +#define N (NINTS * 6) struct s{ int m; @@ -19,8 +25,7 @@ struct s2{ struct test1{ struct s a; /* array a.n is unaligned */ - int b; - int c; + int pad[NINTS - 2]; struct s e; /* array e.n is aligned */ }; @@ -54,13 +59,13 @@ int main1 () } /* 2. aligned */ - for (i = 3; i < N-1; i++) + for (i = NINTS - 1; i < N - 1; i++) { tmp1[2].a.n[1][2][i] = 6; } /* check results: */ - for (i = 3; i < N-1; i++) + for (i = NINTS; i < N - 1; i++) { if (tmp1[2].a.n[1][2][i] != 6) abort (); @@ -86,18 +91,18 @@ int main1 () } /* 4. unaligned (unknown misalignment) */ - for (i = 0; i < N-4; i++) + for (i = 0; i < N - NINTS; i++) { - for (j = 0; j < N-4; j++) + for (j = 0; j < N - NINTS; j++) { tmp2[2].e.n[1][i][j] = 8; } } /* check results: */ - for (i = 0; i < N-4; i++) + for (i = 0; i < N - NINTS; i++) { - for (j = 0; j < N-4; j++) + for (j = 0; j < N - NINTS; j++) { if (tmp2[2].e.n[1][i][j] != 8) abort (); diff --git a/gcc/testsuite/gcc.dg/vect/pr45752.c b/gcc/testsuite/gcc.dg/vect/pr45752.c index 5e5f45555c40..4ddac7ad5097 100644 --- a/gcc/testsuite/gcc.dg/vect/pr45752.c +++ b/gcc/testsuite/gcc.dg/vect/pr45752.c @@ -35,7 +35,11 @@ #define M34 7716 #define M44 16 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 5 / 32) +#else #define N 20 +#endif void foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput, @@ -77,12 +81,6 @@ void foo (unsigned int *__restrict__ pInput, int main (int argc, const char* argv[]) { unsigned int input[N], output[N], i, input2[N], output2[N]; - unsigned int check_results[N] - = {3208, 1334, 28764, 35679, 2789, 13028, 4754, 168364, 91254, 12399, - 22848, 8174, 307964, 146829, 22009, 32668, 11594, 447564, 202404, 31619 }; - unsigned int check_results2[N] - = {7136, 2702, 84604, 57909, 6633, 16956, 6122, 224204, 113484, 16243, - 26776, 9542, 363804, 169059, 25853, 36596, 12962, 503404, 224634, 35463 }; check_vect (); @@ -95,6 +93,57 @@ int main (int argc, const char* argv[]) __asm__ volatile (""); } +#if N == 20 + unsigned int check_results[N] + = { 3208, 1334, 28764, 35679, 2789, 13028, 4754, 168364, 91254, 12399, + 22848, 8174, 307964, 146829, 22009, 32668, 11594, 447564, 202404, + 31619 }; + unsigned int check_results2[N] + = { 7136, 2702, 84604, 57909, 6633, 16956, 6122, 224204, 113484, 16243, + 26776, 9542, 363804, 169059, 25853, 36596, 12962, 503404, 224634, + 35463 }; +#else + volatile unsigned int check_results[N]; + volatile unsigned int check_results2[N]; + + for (i = 0; i < N / 5; i++) + { + unsigned int a = input[i * 5]; + unsigned int b = input[i * 5 + 1]; + unsigned int c = input[i * 5 + 2]; + unsigned int d = input[i * 5 + 3]; + unsigned int e = input[i * 5 + 4]; + + check_results[i * 5] = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e; + check_results[i * 5 + 1] = (M10 * a + M11 * b + M12 * c + + M13 * d + M14 * e); + check_results[i * 5 + 2] = (M20 * a + M21 * b + M22 * c + + M23 * d + M24 * e); + check_results[i * 5 + 3] = (M30 * a + M31 * b + M32 * c + + M33 * d + M34 * e); + check_results[i * 5 + 4] = (M40 * a + M41 * b + M42 * c + + M43 * d + M44 * e); + + a = input2[i * 5]; + b = input2[i * 5 + 1]; + c = input2[i * 5 + 2]; + d = input2[i * 5 + 3]; + e = input2[i * 5 + 4]; + + check_results2[i * 5] = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e; + check_results2[i * 5 + 1] = (M10 * a + M11 * b + M12 * c + + M13 * d + M14 * e); + check_results2[i * 5 + 2] = (M20 * a + M21 * b + M22 * c + + M23 * d + M24 * e); + check_results2[i * 5 + 3] = (M30 * a + M31 * b + M32 * c + + M33 * d + M34 * e); + check_results2[i * 5 + 4] = (M40 * a + M41 * b + M42 * c + + M43 * d + M44 * e); + + asm volatile ("" ::: "memory"); + } +#endif + foo (input, output, input2, output2); for (i = 0; i < N; i++) diff --git a/gcc/testsuite/gcc.dg/vect/pr65518.c b/gcc/testsuite/gcc.dg/vect/pr65518.c index b194c9899ce8..3e5b986183c0 100644 --- a/gcc/testsuite/gcc.dg/vect/pr65518.c +++ b/gcc/testsuite/gcc.dg/vect/pr65518.c @@ -1,10 +1,19 @@ #include "tree-vect.h" +#if VECTOR_BITS > 256 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 8 +#endif + +#define N (NINTS * 2) +#define RESULT (NINTS * (NINTS - 1) / 2 * N + NINTS) + extern void abort (void); typedef struct giga { - unsigned int g[16]; + unsigned int g[N]; } giga; unsigned long __attribute__((noinline,noclone)) @@ -19,17 +28,17 @@ addfst(giga const *gptr, int num) int main () { - struct giga g[8]; + struct giga g[NINTS]; unsigned int n = 1; int i, j; check_vect (); - for (i = 0; i < 8; ++i) - for (j = 0; j < 16; ++j) + for (i = 0; i < NINTS; ++i) + for (j = 0; j < N; ++j) { g[i].g[j] = n++; __asm__ volatile (""); } - if (addfst (g, 8) != 456) + if (addfst (g, NINTS) != RESULT) abort (); return 0; } diff --git a/gcc/testsuite/gcc.dg/vect/pr65947-5.c b/gcc/testsuite/gcc.dg/vect/pr65947-5.c index 04d9b38d58aa..e577820ac3fd 100644 --- a/gcc/testsuite/gcc.dg/vect/pr65947-5.c +++ b/gcc/testsuite/gcc.dg/vect/pr65947-5.c @@ -4,7 +4,11 @@ extern void abort (void) __attribute__ ((noreturn)); +#if VECTOR_BITS > 256 +#define N (VECTOR_BITS / 8) +#else #define N 32 +#endif /* Condition reduction where loop size is not known at compile time. Will fail to vectorize. Version inlined into main loop will vectorize. */ @@ -30,6 +34,11 @@ main (void) 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; + for (int i = 32; i < N; ++i) + { + a[i] = 70 + (i & 3); + asm volatile ("" ::: "memory"); + } check_vect (); diff --git a/gcc/testsuite/gcc.dg/vect/pr81136.c b/gcc/testsuite/gcc.dg/vect/pr81136.c index c67357684dfe..0ae4a4d4d5b6 100644 --- a/gcc/testsuite/gcc.dg/vect/pr81136.c +++ b/gcc/testsuite/gcc.dg/vect/pr81136.c @@ -1,6 +1,8 @@ /* { dg-do compile } */ -struct __attribute__((aligned (32))) +#include "tree-vect.h" + +struct __attribute__((aligned (VECTOR_BITS / 8))) { char misaligner; int foo[100]; diff --git a/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c b/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c index 26bcf4b0d765..e3466d0da1de 100644 --- a/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c +++ b/gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c @@ -4,7 +4,13 @@ #include #include "tree-vect.h" -#define N 32 +#if VECTOR_BITS > 128 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 4 +#endif + +#define N (NINTS * 8) struct s{ int m; @@ -18,16 +24,15 @@ struct s2{ struct test1{ struct s a; /* array a.n is unaligned */ - int b; - int c; + int pad[NINTS - 2]; struct s e; /* array e.n is aligned */ }; struct test2{ - struct s2 a; /* array a.n is unaligned */ + struct s2 a; int b; int c; - struct s2 e; /* array e.n is aligned */ + struct s2 e; }; @@ -52,13 +57,13 @@ int main1 () } /* 2. aligned */ - for (i = 3; i < N-1; i++) + for (i = NINTS - 1; i < N - 1; i++) { tmp1[2].a.n[1][2][i] = 6; } /* check results: */ - for (i = 3; i < N-1; i++) + for (i = NINTS - 1; i < N - 1; i++) { if (tmp1[2].a.n[1][2][i] != 6) abort (); @@ -84,18 +89,18 @@ int main1 () } /* 4. unaligned */ - for (i = 0; i < N-4; i++) + for (i = 0; i < N - NINTS; i++) { - for (j = 0; j < N-4; j++) + for (j = 0; j < N - NINTS; j++) { tmp2[2].e.n[1][i][j] = 8; } } /* check results: */ - for (i = 0; i < N-4; i++) + for (i = 0; i < N - NINTS; i++) { - for (j = 0; j < N-4; j++) + for (j = 0; j < N - NINTS; j++) { if (tmp2[2].e.n[1][i][j] != 8) abort (); diff --git a/gcc/testsuite/gcc.dg/vect/slp-19c.c b/gcc/testsuite/gcc.dg/vect/slp-19c.c index 82e876785038..32566cb5e132 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-19c.c +++ b/gcc/testsuite/gcc.dg/vect/slp-19c.c @@ -3,14 +3,27 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 32) +#else #define N 16 +#endif int main1 () { unsigned int i; unsigned int out[N*8]; +#if N == 16 unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; +#else + unsigned int in[N * 8]; + for (unsigned int i = 0; i < N * 8; ++i) + { + in[i] = i & 63; + asm volatile ("" ::: "memory"); + } +#endif unsigned int ia[N*2], a0, a1, a2, a3; /* The last stmt requires interleaving of not power of 2 size - not diff --git a/gcc/testsuite/gcc.dg/vect/slp-28.c b/gcc/testsuite/gcc.dg/vect/slp-28.c index e697f0efe098..e66728e1656f 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-28.c +++ b/gcc/testsuite/gcc.dg/vect/slp-28.c @@ -3,19 +3,27 @@ #include #include "tree-vect.h" -#define N 32 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 4 / 16) +#else +#define N 32 +#endif -unsigned short in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; -unsigned short in2[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; -unsigned short in3[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; -unsigned short check[N] = {0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,20,21,22,23,25,26,27,28,30,31,32,33,35,36,37,38}; -unsigned short check3[N] = {0,1,2,3,4,5,6,7,8,9,10,11,5,6,7,8,9,10,11,12,13,14,15,16,10,11,12,13,14,15,16,17}; +unsigned short in[N] = {}; +unsigned short in2[N] = {}; +unsigned short in3[N] = {}; int main1 () { int i; + for (i = 0; i < N; i++) + { + in[i] = in2[i] = in3[i] = i; + asm volatile ("" ::: "memory"); + } + for (i = 0; i < N/4; i++) { in[i*4] = in[i*4] + 5; @@ -43,9 +51,9 @@ main1 () } /* check results: */ - for (i = 4; i < N; i++) + for (i = 0; i < N; i++) { - if (in2[i] != check[i]) + if (in2[i] != (i % 4) + (i / 4) * 5) abort (); } @@ -61,9 +69,9 @@ main1 () } /* check results: */ - for (i = 12; i < N; i++) + for (i = 0; i < N; i++) { - if (in3[i] != check3[i]) + if (in3[i] != (i % 12) + (i / 12) * 5) abort (); } diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-1.c b/gcc/testsuite/gcc.dg/vect/slp-perm-1.c index ee211f2d7a26..ca832b0a182d 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-1.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-1.c @@ -13,7 +13,11 @@ #define M12 191 #define M22 500 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 3 / 32 + 4) +#else #define N 16 +#endif void foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput) { @@ -34,7 +38,6 @@ void foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput) int main (int argc, const char* argv[]) { unsigned int input[N], output[N], i; - unsigned int check_results[N] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0}; check_vect (); @@ -45,6 +48,25 @@ int main (int argc, const char* argv[]) __asm__ volatile (""); } +#if N == 16 + unsigned int check_results[N] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0}; +#else + volatile unsigned int check_results[N] = {}; + + for (unsigned int i = 0; i < N / 3; i++) + { + unsigned int a = input[i * 3]; + unsigned int b = input[i * 3 + 1]; + unsigned int c = input[i * 3 + 2]; + + check_results[i * 3] = M00 * a + M01 * b + M02 * c; + check_results[i * 3 + 1] = M10 * a + M11 * b + M12 * c; + check_results[i * 3 + 2] = M20 * a + M21 * b + M22 * c; + + asm volatile ("" ::: "memory"); + } +#endif + foo (input, output); for (i = 0; i < N; i++) diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-4.c b/gcc/testsuite/gcc.dg/vect/slp-perm-4.c index c4e27f4d0ee9..8457e4f45d62 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-4.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-4.c @@ -34,7 +34,11 @@ #define M34 7716 #define M44 16 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 5 / 32) +#else #define N 20 +#endif void foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput) { @@ -59,9 +63,6 @@ void foo (unsigned int *__restrict__ pInput, unsigned int *__restrict__ pOutput) int main (int argc, const char* argv[]) { unsigned int input[N], output[N], i; - unsigned int check_results[N] - = {3208, 1334, 28764, 35679, 2789, 13028, 4754, 168364, 91254, 12399, - 22848, 8174, 307964, 146829, 22009, 32668, 11594, 447564, 202404, 31619}; check_vect (); @@ -72,6 +73,34 @@ int main (int argc, const char* argv[]) asm volatile ("" ::: "memory"); } +#if N == 20 + unsigned int check_results[N] + = {3208, 1334, 28764, 35679, 2789, 13028, 4754, 168364, 91254, 12399, + 22848, 8174, 307964, 146829, 22009, 32668, 11594, 447564, 202404, 31619}; +#else + volatile unsigned int check_results[N]; + + for (i = 0; i < N / 5; i++) + { + unsigned int a = input[i * 5]; + unsigned int b = input[i * 5 + 1]; + unsigned int c = input[i * 5 + 2]; + unsigned int d = input[i * 5 + 3]; + unsigned int e = input[i * 5 + 4]; + + check_results[i * 5] = M00 * a + M01 * b + M02 * c + M03 * d + M04 * e; + check_results[i * 5 + 1] = (M10 * a + M11 * b + M12 * c + + M13 * d + M14 * e); + check_results[i * 5 + 2] = (M20 * a + M21 * b + M22 * c + + M23 * d + M24 * e); + check_results[i * 5 + 3] = (M30 * a + M31 * b + M32 * c + + M33 * d + M34 * e); + check_results[i * 5 + 4] = (M40 * a + M41 * b + M42 * c + + M43 * d + M44 * e); + asm volatile (""); + } +#endif + foo (input, output); for (i = 0; i < N; i++) diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-5.c b/gcc/testsuite/gcc.dg/vect/slp-perm-5.c index 806603f7f739..0d2bf14c642a 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-5.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-5.c @@ -18,7 +18,11 @@ #define K01 4322 #define K11 135 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 3 / 32 + 4) +#else #define N 16 +#endif void foo (int *__restrict__ pInput, int *__restrict__ pOutput, int *__restrict__ pInput2, int *__restrict__ pOutput2) @@ -46,9 +50,7 @@ void foo (int *__restrict__ pInput, int *__restrict__ pOutput, int main (int argc, const char* argv[]) { int input[N], output[N], i; - int check_results[N] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0}; int input2[N], output2[N]; - int check_results2[N] = {4322, 135, 13776, 629, 23230, 1123, 32684, 1617, 42138, 2111, 0, 0, 0, 0, 0, 0}; check_vect (); @@ -63,6 +65,35 @@ int main (int argc, const char* argv[]) __asm__ volatile (""); } +#if N == 16 + int check_results[N] = { 1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, + 195035, 14934, 4175, 278417, 19422, 5435, 361799, + 0 }; + int check_results2[N] = { 4322, 135, 13776, 629, 23230, 1123, 32684, 1617, + 42138, 2111, 0, 0, 0, 0, 0, 0 }; +#else + volatile int check_results[N] = {}; + volatile int check_results2[N] = {}; + + for (int i = 0; i < N / 3; i++) + { + int a = input[i * 3]; + int b = input[i * 3 + 1]; + int c = input[i * 3 + 2]; + int d = input2[i * 2]; + int e = input2[i * 2 + 1]; + + check_results[i * 3] = M00 * a + M01 * b + M02 * c; + check_results[i * 3 + 1] = M10 * a + M11 * b + M12 * c; + check_results[i * 3 + 2] = M20 * a + M21 * b + M22 * c; + + check_results2[i * 2] = K00 * d + K01 * e; + check_results2[i * 2 + 1] = K10 * d + K11 * e; + + asm volatile ("" ::: "memory"); + } +#endif + foo (input, output, input2, output2); for (i = 0; i < N; i++) diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-6.c b/gcc/testsuite/gcc.dg/vect/slp-perm-6.c index 0fb4a6b0fc92..a69740914736 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-6.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-6.c @@ -18,7 +18,11 @@ #define K01 4322 #define K11 135 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 3 / 32 + 4) +#else #define N 16 +#endif void foo (int *__restrict__ pInput, int *__restrict__ pOutput, int *__restrict__ pInput2, int *__restrict__ pOutput2) @@ -47,9 +51,7 @@ void foo (int *__restrict__ pInput, int *__restrict__ pOutput, int main (int argc, const char* argv[]) { int input[N], output[N], i; - int check_results[N] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0}; int input2[N], output2[N]; - int check_results2[N] = {0, 112, 810, 336, 1620, 560, 2430, 784, 3240, 1008, 0, 0, 0, 0, 0, 0}; check_vect (); @@ -62,6 +64,35 @@ int main (int argc, const char* argv[]) __asm__ volatile (""); } +#if N == 16 + int check_results[N] = { 1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, + 195035, 14934, 4175, 278417, 19422, 5435, 361799, + 0 }; + int check_results2[N] = { 0, 112, 810, 336, 1620, 560, 2430, 784, 3240, 1008, + 0, 0, 0, 0, 0, 0 }; +#else + volatile int check_results[N] = {}; + volatile int check_results2[N] = {}; + + for (int i = 0; i < N / 3; i++) + { + int a = input[i * 3]; + int b = input[i * 3 + 1]; + int c = input[i * 3 + 2]; + int d = input2[i * 2]; + int e = input2[i * 2 + 1]; + + check_results[i * 3] = M00 * a + M01 * b + M02 * c; + check_results[i * 3 + 1] = M10 * a + M11 * b + M12 * c; + check_results[i * 3 + 2] = M20 * a + M21 * b + M22 * c; + + check_results2[i * 2] = K00 * d; + check_results2[i * 2 + 1] = K10 * e; + + asm volatile ("" ::: "memory"); + } +#endif + foo (input, output, input2, output2); for (i = 0; i < N; i++) diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-7.c b/gcc/testsuite/gcc.dg/vect/slp-perm-7.c index 307d823d73a2..928ebfe9a714 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-7.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-7.c @@ -18,7 +18,11 @@ #define K01 4322 #define K11 135 +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 3 / 32 + 4) +#else #define N 16 +#endif /* SLP with load permutation and loop-based vectorization. */ void foo (int *__restrict__ pInput, int *__restrict__ pOutput, @@ -45,9 +49,7 @@ void foo (int *__restrict__ pInput, int *__restrict__ pOutput, int main (int argc, const char* argv[]) { int input[N], output[N], i; - int check_results[N] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0}; int input2[N], output2[N]; - int check_results2[N] = {0, 405, 810, 1215, 1620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; check_vect (); @@ -60,6 +62,30 @@ int main (int argc, const char* argv[]) asm volatile ("" ::: "memory"); } +#if N == 16 + int check_results[N] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0}; + int check_results2[N] = {0, 405, 810, 1215, 1620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +#else + volatile int check_results[N] = {}; + volatile int check_results2[N] = {}; + + for (int i = 0; i < N / 3; i++) + { + int a = input[i * 3]; + int b = input[i * 3 + 1]; + int c = input[i * 3 + 2]; + int d = input2[i]; + + check_results[i * 3] = M00 * a + M01 * b + M02 * c; + check_results[i * 3 + 1] = M10 * a + M11 * b + M12 * c; + check_results[i * 3 + 2] = M20 * a + M21 * b + M22 * c; + + check_results2[i] = K00 * d; + + asm volatile ("" ::: "memory"); + } +#endif + foo (input, output, input2, output2); for (i = 0; i < N; i++) diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-8.c b/gcc/testsuite/gcc.dg/vect/slp-perm-8.c index f804dcc8163c..915bba2b44c8 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-8.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-8.c @@ -3,12 +3,17 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 512 +#define N (VECTOR_BITS * 6 / 16) +#else #define N 200 +#endif void __attribute__((noinline)) foo (unsigned char *__restrict__ pInput, unsigned char *__restrict__ pOutput) { - unsigned char i, a, b, c; + unsigned char a, b, c; + unsigned int i; for (i = 0; i < N / 3; i++) { @@ -24,8 +29,9 @@ foo (unsigned char *__restrict__ pInput, unsigned char *__restrict__ pOutput) int main (int argc, const char* argv[]) { - unsigned char input[N], output[N], i; + unsigned char input[N], output[N]; unsigned char check_results[N]; + unsigned int i; check_vect (); diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-9.c b/gcc/testsuite/gcc.dg/vect/slp-perm-9.c index bbf9cae86866..4be200d713b5 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-9.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-9.c @@ -3,7 +3,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 512 +#define N (VECTOR_BITS * 6 / 16) +#else #define N 200 +#endif void __attribute__((noinline)) foo (unsigned short *__restrict__ pInput, unsigned short *__restrict__ pOutput) diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h index ab40e7f3c2eb..88135376ea4b 100644 --- a/gcc/testsuite/gcc.dg/vect/tree-vect.h +++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h @@ -75,3 +75,5 @@ check_vect (void) #endif signal (SIGILL, SIG_DFL); } + +#define VECTOR_BITS 128 diff --git a/gcc/testsuite/gcc.dg/vect/vect-103.c b/gcc/testsuite/gcc.dg/vect/vect-103.c index 6ebb4e12bd46..4a9e1574eb0c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-103.c +++ b/gcc/testsuite/gcc.dg/vect/vect-103.c @@ -4,7 +4,13 @@ #include #include "tree-vect.h" -#define N 9 +#if VECTOR_BITS > 256 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 8 +#endif + +#define N (NINTS + 1) struct extraction { @@ -14,7 +20,6 @@ struct extraction static int a[N] = {1,2,3,4,5,6,7,8,9}; static int b[N] = {17,24,7,0,2,3,4,31,82}; -static int c[N] = {9,17,24,7,0,2,3,4,31}; __attribute__ ((noinline)) int main1 (int x, int y) { @@ -31,16 +36,15 @@ int main1 (int x, int y) { /* Vectorizable: distance > VF. */ for (i = 0; i < N; i++) - { - *((int *)p + x + i) = *((int *)p + x + i + 8); - } + *((int *)p + x + i) = *((int *)p + x + i + NINTS); /* check results: */ - for (i = 0; i < N; i++) - { - if (p->a[i] != c[i]) - abort(); - } + if (p->a[0] != a[N - 1]) + abort (); + for (i = 1; i < N; i++) + if (p->a[i] != b[i - 1]) + abort (); + return 0; } diff --git a/gcc/testsuite/gcc.dg/vect/vect-32.c b/gcc/testsuite/gcc.dg/vect/vect-32.c index 6fe5099ac1a5..96c8ff52b8bf 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-32.c +++ b/gcc/testsuite/gcc.dg/vect/vect-32.c @@ -3,8 +3,12 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS / 8) +#else #define N 16 - +#endif + __attribute__ ((noinline)) int main1 () { diff --git a/gcc/testsuite/gcc.dg/vect/vect-67.c b/gcc/testsuite/gcc.dg/vect/vect-67.c index 0af0b1145231..3dcae7094587 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-67.c +++ b/gcc/testsuite/gcc.dg/vect/vect-67.c @@ -3,13 +3,19 @@ #include #include "tree-vect.h" -#define N 16 +#if VECTOR_BITS > 256 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 8 +#endif + +#define N (NINTS * 2) __attribute__ ((noinline)) int main1 (int a, int b) { int i, j; - int ia[N][4][N+8]; + int ia[N][4][N + NINTS]; /* Multidimensional array. Aligned. The "inner" dimensions are invariant in the inner loop. Store. @@ -18,7 +24,7 @@ int main1 (int a, int b) { for (j = 0; j < N; j++) { - ia[i][1][j+8] = (a == b); + ia[i][1][j + NINTS] = (a == b); } } @@ -27,7 +33,7 @@ int main1 (int a, int b) { for (j = 0; j < N; j++) { - if (ia[i][1][j+8] != (a == b)) + if (ia[i][1][j + NINTS] != (a == b)) abort(); } } diff --git a/gcc/testsuite/gcc.dg/vect/vect-70.c b/gcc/testsuite/gcc.dg/vect/vect-70.c index a110f9c34e81..793dbfb74816 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-70.c +++ b/gcc/testsuite/gcc.dg/vect/vect-70.c @@ -4,11 +4,24 @@ #include #include "tree-vect.h" -#define N 24 +#if VECTOR_BITS > 128 +#define NINTS (VECTOR_BITS / 32) +#else +#define NINTS 4 +#endif + +#define N (NINTS * 6) + +/* Keep execution time down. */ +#if N <= 24 +#define OUTERN N +#else +#define OUTERN NINTS +#endif struct s{ int m; - int n[N/6][N/6][N]; + int n[4][4][N]; }; struct test1{ @@ -18,36 +31,43 @@ struct test1{ struct s e[N]; /* array e.n is aligned */ }; +/* Avoid big local temporaries. */ +#if NINTS > 8 +struct test1 tmp1; +#endif + __attribute__ ((noinline)) int main1 () { int i,j; +#if NINTS <= 8 struct test1 tmp1; +#endif - for (i = 0; i < N; i++) - for (j = 3; j < N-3; j++) + for (i = 0; i < OUTERN; i++) + for (j = NINTS - 1; j < N - NINTS + 1; j++) { tmp1.e[i].n[1][2][j] = 8; } /* check results: */ - for (i = 0; i < N; i++) - for (j = 3; j < N-3; j++) + for (i = 0; i < OUTERN; i++) + for (j = NINTS - 1; j < N - NINTS + 1; j++) { if (tmp1.e[i].n[1][2][j] != 8) abort (); } /* not consecutive, will use strided stores */ - for (i = 0; i < N; i++) - for (j = 3; j < N-3; j++) + for (i = 0; i < OUTERN; i++) + for (j = NINTS - 1; j < N - NINTS + 1; j++) { tmp1.e[j].n[1][2][j] = 8; } /* check results: */ - for (i = 0; i < N; i++) - for (j = 3; j < N-3; j++) + for (i = 0; i < OUTERN; i++) + for (j = NINTS - 1; j < N - NINTS + 1; j++) { if (tmp1.e[j].n[1][2][j] != 8) abort (); diff --git a/gcc/testsuite/gcc.dg/vect/vect-75.c b/gcc/testsuite/gcc.dg/vect/vect-75.c index e8c77ea98f46..b9b4a55d6908 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-75.c +++ b/gcc/testsuite/gcc.dg/vect/vect-75.c @@ -3,8 +3,13 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 32) +#define OFF (VECTOR_BITS / 32) +#else #define N 8 #define OFF 8 +#endif /* Check handling of accesses for which the "initial condition" - the expression that represents the first location accessed - is diff --git a/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c b/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c index 535fa16a2340..fcf32d928945 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c +++ b/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c @@ -3,8 +3,13 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 32) +#define OFF (VECTOR_BITS / 32) +#else #define N 8 #define OFF 8 +#endif /* Check handling of accesses for which the "initial condition" - the expression that represents the first location accessed - is diff --git a/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c b/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c index 1386a9da72f4..93e7208961f5 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c +++ b/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c @@ -3,8 +3,13 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 32) +#define OFF (VECTOR_BITS / 32) +#else #define N 8 #define OFF 8 +#endif /* Check handling of accesses for which the "initial condition" - the expression that represents the first location accessed - is diff --git a/gcc/testsuite/gcc.dg/vect/vect-89.c b/gcc/testsuite/gcc.dg/vect/vect-89.c index f634751c89df..dd0405508c09 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-89.c +++ b/gcc/testsuite/gcc.dg/vect/vect-89.c @@ -3,7 +3,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 256 +#define N (VECTOR_BITS * 2 / 32) +#else #define N 16 +#endif struct tmp_struct { diff --git a/gcc/testsuite/gcc.dg/vect/vect-91.c b/gcc/testsuite/gcc.dg/vect/vect-91.c index 979b8e93aefa..9430da3290aa 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-91.c +++ b/gcc/testsuite/gcc.dg/vect/vect-91.c @@ -7,7 +7,14 @@ #define N 256 -extern int a[N+20]; +/* Pick a value greater than the vector length. */ +#if VECTOR_BITS > 128 +#define OFF (VECTOR_BITS * 5 / 32) +#else +#define OFF 20 +#endif + +extern int a[N + OFF]; /* The alignment of 'pa' is unknown. Yet we do know that both the read access and write access have @@ -52,7 +59,7 @@ main3 () for (i = 0; i < N; i++) { - a[i] = a[i+20]; + a[i] = a[i + OFF]; } return 0; diff --git a/gcc/testsuite/gcc.dg/vect/vect-92.c b/gcc/testsuite/gcc.dg/vect/vect-92.c index 19283d61517a..ba108f78e913 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-92.c +++ b/gcc/testsuite/gcc.dg/vect/vect-92.c @@ -17,12 +17,18 @@ float pc[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0,1,2,3,4,5, can use this information (generate prolog and epilog loops with known number of iterations, and only if needed). */ +#if VECTOR_BITS > 128 +#define NITER (VECTOR_BITS * 3 / 32) +#else +#define NITER 12 +#endif + __attribute__ ((noinline)) int main1 () { int i; - for (i = 0; i < 10; i++) + for (i = 0; i < NITER - 2; i++) { pa[i+1] = pb[i+1] * pc[i+1]; } @@ -42,7 +48,7 @@ main2 () { int i; - for (i = 0; i < 12; i++) + for (i = 0; i < NITER; i++) { pa[i+1] = pb[i+1] * pc[i+1]; } diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c index dfa4d42b8b2c..397c2ed05aae 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-93.c +++ b/gcc/testsuite/gcc.dg/vect/vect-93.c @@ -4,33 +4,38 @@ #include #include "tree-vect.h" -#define N 3001 +#define N1 3001 +#if VECTOR_BITS > 256 +#define N2 (VECTOR_BITS / 32 + 2) +#else +#define N2 10 +#endif __attribute__ ((noinline)) int main1 (float *pa) { int i; - for (i = 0; i < 3001; i++) + for (i = 0; i < N1; i++) { pa[i] = 2.0; } /* check results: */ - for (i = 0; i < 3001; i++) + for (i = 0; i < N1; i++) { if (pa[i] != 2.0) abort (); } - for (i = 1; i <= 10; i++) + for (i = 1; i <= N2; i++) { pa[i] = 3.0; } /* check results: */ - for (i = 1; i <= 10; i++) + for (i = 1; i <= N2; i++) { if (pa[i] != 3.0) abort (); @@ -42,13 +47,14 @@ main1 (float *pa) int main (void) { int i; - float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); - float b[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); + float a[N1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); + float b[N1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))); check_vect (); /* from bzip2: */ - for (i=0; i #include "tree-vect.h" +#if VECTOR_BITS > 256 +#define N (VECTOR_BITS * 2 / 32) +#else #define N 16 +#endif struct tmp { diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c index 1afdb463d50f..34685c839b90 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c @@ -4,7 +4,14 @@ #include #include "tree-vect.h" -#define N 32 +#if VECTOR_BITS > 128 +#define NSHORTS (VECTOR_BITS / 16) +#else +#define NSHORTS 8 +#endif + +#define NINTS (NSHORTS / 2) +#define N (NSHORTS * 4) short sa[N]; short sb[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, @@ -27,14 +34,14 @@ __attribute__ ((noinline)) int main1 (int n) copmutations. Vectorizable. */ for (i = 0; i < n; i++) { - sa[i+7] = sb[i]; - ia[i+3] = ib[i+1]; + sa[i + NSHORTS - 1] = sb[i]; + ia[i + NINTS - 1] = ib[i + 1]; } /* check results: */ for (i = 0; i < n; i++) { - if (sa[i+7] != sb[i] || ia[i+3] != ib[i+1]) + if (sa[i + NSHORTS - 1] != sb[i] || ia[i + NINTS - 1] != ib[i + 1]) abort (); } @@ -57,14 +64,14 @@ __attribute__ ((noinline)) int main2 (int n) copmutations. */ for (i = 0; i < n; i++) { - ia[i+3] = ib[i]; - sa[i+3] = sb[i+1]; + ia[i + NINTS - 1] = ib[i]; + sa[i + NINTS - 1] = sb[i + 1]; } /* check results: */ for (i = 0; i < n; i++) { - if (sa[i+3] != sb[i+1] || ia[i+3] != ib[i]) + if (sa[i + NINTS - 1] != sb[i + 1] || ia[i + NINTS - 1] != ib[i]) abort (); } @@ -75,8 +82,8 @@ int main (void) { check_vect (); - main1 (N-7); - main2 (N-3); + main1 (N - NSHORTS + 1); + main2 (N - NINTS + 1); return 0; } diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c index 9e558b81b900..0acff364911b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-3.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 8) +#else #define N 32 +#endif int ib[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c index 930dc4c0c3df..5e8ad8be3b87 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c +++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-6.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 8) +#else #define N 32 +#endif unsigned int ic[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; diff --git a/gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c b/gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c index 01ef4d2b68fa..3140829c73d1 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 8 / 16) +#else #define N 64 +#endif /* Modified rgb to rgb conversion from FFmpeg. */ __attribute__ ((noinline)) void diff --git a/gcc/testsuite/gcc.dg/vect/vect-over-widen-3-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-over-widen-3-big-array.c index 92404bf74ac0..e419f203ecad 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-over-widen-3-big-array.c +++ b/gcc/testsuite/gcc.dg/vect/vect-over-widen-3-big-array.c @@ -4,7 +4,7 @@ #include #include "tree-vect.h" -#define N 128 +#define N VECTOR_BITS /* Modified rgb to rgb conversion from FFmpeg. */ __attribute__ ((noinline)) void @@ -32,7 +32,9 @@ foo (unsigned char *src, unsigned char *dst) const int g = *s++; const int r = *s++; const int a = *s++; - if (*d != ((b>>3) | ((g&0xFFC)<<3) | ((r+0xF8)>>8) | (a<<9))) + unsigned short expected + = ((b>>3) | ((g&0xFFC)<<3) | ((r+0xF8)>>8) | (a<<9)); + if (*d != expected) abort (); d++; } diff --git a/gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c b/gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c index cc75646514de..9dd1ea553ea7 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c @@ -4,7 +4,11 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 8 / 16) +#else #define N 64 +#endif /* Modified rgb to rgb conversion from FFmpeg. */ __attribute__ ((noinline)) int diff --git a/gcc/testsuite/gcc.dg/vect/vect-peel-3.c b/gcc/testsuite/gcc.dg/vect/vect-peel-3.c index 8baee0d5657f..e6470fc6e1d2 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-peel-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-peel-3.c @@ -4,12 +4,24 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define NINTS (VECTOR_BITS / 32) +#define EXTRA (NINTS * 2) +#else +#define NINTS 4 +#define EXTRA 10 +#endif + #define N 128 -#define RES 21640 -int ib[N+10]; -int ia[N+10]; -int ic[N+10]; +#define RES_A (N * N / 4) +#define RES_B (N * (N + 1) / 2 + (NINTS + 3) * (N + 1)) +#define RES_C (N * (N + 1) / 2 + (N + 1)) +#define RES (RES_A + RES_B + RES_C) + +int ib[N + EXTRA]; +int ia[N + EXTRA]; +int ic[N + EXTRA]; __attribute__ ((noinline)) int main1 () @@ -20,8 +32,8 @@ int main1 () for (i = 0; i <= N; i++) { suma += ia[i]; - sumb += ib[i+5]; - sumc += ic[i+1]; + sumb += ib[i + NINTS + 1]; + sumc += ic[i + 1]; } /* check results: */ @@ -37,7 +49,7 @@ int main (void) check_vect (); - for (i = 0; i < N+10; i++) + for (i = 0; i < N + EXTRA; i++) { asm volatile ("" : "+r" (i)); ib[i] = i; diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c index af448920aa41..aad145161b70 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c @@ -4,28 +4,41 @@ #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS / 8) +#else +#define N 16 +#endif + extern void abort(void); -unsigned char in[16] __attribute__((__aligned__(16))); +unsigned char in[N] __attribute__((__aligned__(16))); int main (unsigned char argc, char **argv) { unsigned char i = 0; unsigned char sum = 1; + unsigned char expected = 1; check_vect (); - for (i = 0; i < 16; i++) + for (i = 0; i < N; i++) in[i] = (i + i + 1) & 0xfd; + for (i = 0; i < N; i++) + { + expected |= in[i]; + asm volatile (""); + } + /* Prevent constant propagation of the entire loop below. */ asm volatile ("" : : : "memory"); - for (i = 0; i < 16; i++) + for (i = 0; i < N; i++) sum |= in[i]; - if (sum != 29) + if (sum != expected) { __builtin_printf("Failed %d\n", sum); abort(); diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c index 71a70aef622e..ff3dfb212ad1 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c @@ -4,24 +4,37 @@ #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS / 8) +#else +#define N 16 +#endif + extern void abort(void); int main (unsigned char argc, char **argv) { - unsigned char in[16] __attribute__((aligned(16))); + unsigned char in[N] __attribute__((aligned(16))); unsigned char i = 0; unsigned char sum = 1; + unsigned char expected = 1; check_vect (); - for (i = 0; i < 16; i++) + for (i = 0; i < N; i++) in[i] = (i + i + 1) & 0xfd; - for (i = 0; i < 16; i++) + for (i = 0; i < N; i++) + { + expected |= in[i]; + asm volatile (""); + } + + for (i = 0; i < N; i++) sum |= in[i]; - if (sum != 29) + if (sum != expected) { __builtin_printf("Failed %d\n", sum); abort(); diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c index a8cb21b4eb4a..b06b234072b8 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1a.c @@ -3,7 +3,12 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 16) +#else #define N 16 +#endif + unsigned short udata_sh[N] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; #define SUM 210 diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c index 1deb147da589..96f8b740ced1 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c @@ -3,7 +3,12 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 16) +#else #define N 16 +#endif + unsigned char udata_ch[N] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; #define SUM 210 diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c index 813843000883..a98edd3045ad 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2a.c @@ -3,7 +3,12 @@ #include #include "tree-vect.h" +#if VECTOR_BITS > 128 +#define N (VECTOR_BITS * 2 / 16) +#else #define N 16 +#endif + signed short data_sh[N] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; #define SUM 210 -- 2.47.2