diff options
author | Ira Rosen <irar@il.ibm.com> | 2007-01-21 09:22:56 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2007-01-21 09:22:56 +0000 |
commit | 6004caaf4dd656f955034b444a38a3a886a035c1 (patch) | |
tree | 05e8577ec4efe6bacd28333f67700b524ca9e2a3 /gcc/testsuite/gcc.dg | |
parent | 52b213f385400a4f4adfa2a167fe8ec6303e4ca7 (diff) | |
download | gcc-6004caaf4dd656f955034b444a38a3a886a035c1.zip gcc-6004caaf4dd656f955034b444a38a3a886a035c1.tar.gz gcc-6004caaf4dd656f955034b444a38a3a886a035c1.tar.bz2 |
tree-vectorizer.h (struct _stmt_vec_info): Add new field read_write_dep and macros for its access.
* tree-vectorizer.h (struct _stmt_vec_info): Add new field
read_write_dep and macros for its access.
* tree-vectorizer.c (new_stmt_vec_info): Initialize the new field.
* tree-vect-analyze.c (vect_analyze_data_ref_dependence): Remove
argument, call vect_check_interleaving for every independent pair of
data-refs. Mark loads that access the same memory location as a store
in the loop.
(vect_check_dependences): Remove.
(vect_analyze_data_ref_dependences): Remove vect_check_dependences
call, fix the call to vect_analyze_data_ref_dependence.
(vect_analyze_data_ref_access): For statements that access the same
data-ref, check that they are not stores; for loads, check that there
is no store that access the same location.
From-SVN: r121026
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c b/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c new file mode 100644 index 0000000..f04658d --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-same-dr.c @@ -0,0 +1,77 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdarg.h> +#include "tree-vect.h" + +#define N 128 + +typedef struct { + unsigned short a; + unsigned short b; +} s; + +s buffer1[N], buffer2[N]; + +int +main1 (s * __restrict__ pIn, s* __restrict__ pOut) +{ + unsigned short i, x, y, d; + s *p, *q; + + p = pIn; + q = pOut; + + for (i = 0; i < N/2; i++) + { + x = pIn->a + 5; + y = pIn->a + 2; + pOut->a = x; + pOut->b = pIn->b; + pOut++; + pOut->a = y; + pOut->b = pIn->b; + pOut++; + pIn++; + } + + /* check results: */ + for (i = 0; i < N/2; i++) + { + if (q->a != p->a + 5 + || q->b != p->b) + abort (); + q++; + if (q->a != p->a + 2 + || q->b != p->b) + abort (); + q++; + p++; + } + + return 0; +} + +int main (void) +{ + short i; + + for (i = 0; i < N*2; i++) + { + buffer1[i].a = i; + buffer1[i].b = i + 8; + buffer2[i].a = i * 3; + buffer2[i].b = i * 2; + if (buffer1[i].a == 500) + abort(); + } + + check_vect (); + + main1 (buffer1, buffer2); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave && vect_extract_even_odd } } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + |