diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c b/gcc-4.9/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c new file mode 100644 index 000000000..f99a2afd7 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c @@ -0,0 +1,106 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdlib.h> +#include <stdarg.h> +#include "tree-vect.h" + +#define N 16 + +struct extraction +{ + int a[N][N]; + int b[N][N]; +}; + +static int a[N][N]; +static int b[N][N]; +static int c[N][N]; + +volatile int y; + +__attribute__ ((noinline)) +int main1 (int x) { + int i,j, off; + struct extraction *p; + p = (struct extraction *) malloc (sizeof (struct extraction)); + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + a[i][j] = (i*7 + j*17)%53; + b[i][j] = (i*11+ j*13)%41; + if (y) + abort (); /* to avoid vectorization. */ + } + } + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + c[i][j] = a[i][j]; + if (y) + abort (); /* to avoid vectorization. */ + } + } + for (i = 1; i < N; i++) + { + for (j = 0; j < N; j++) + { + off = x + i + j + N+1; + if (x + i + j > N*N-1) + break; + if (off > N*N-1) + *(&c[0][0]+x+i+j) = *(&b[0][0] + off - N*N); + else + *(&c[0][0]+x+i+j) = *(&a[0][0] + off); + if (y) + abort (); /* to avoid vectorization. */ + } + } + + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + p->a[i][j] = a[i][j]; + p->b[i][j] = b[i][j]; + /* Because Y is volatile, the compiler cannot move this check out + of the loop. */ + if (y) + abort (); /* to avoid vectorization. */ + } + } + + /* Vectorizable: distance > number of iterations. */ + for (i = 1; i < N; i++) + { + for (j = 0; j < N; j++) + { + *((int *)p + x + i + j) = *((int *)p + x + i + j + N+1); + } + } + + /* check results: */ + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + { + if (p->a[i][j] != c[i][j]) + abort (); + } + } + return 0; +} + +int main (void) +{ + check_vect (); + + return main1 (N); +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */ +/* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + |