Viewing file: vect-100.c (1.34 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-require-effective-target vect_int } */
#include <stdlib.h> #include <stdarg.h> #include "tree-vect.h"
#define N 9
struct extraction { int a[N]; int b[N]; };
static int a[N] = {1,2,3,4,5,6,7,8,9}; static int b[N] = {2,3,4,5,6,7,8,9,0};
__attribute__ ((noinline)) int main1 () { int i; struct extraction *p; p = (struct extraction *) malloc (sizeof (struct extraction));
/* Vectorizable: alias analysis determines that p can't point to a and/or b. */ for (i = 0; i < N; i++) { p->a[i] = a[i]; p->b[i] = b[i]; }
/* check results: */ for (i = 0; i < N; i++) { if (p->a[i] != a[i] || p->b[i] != b[i]) abort(); }
return 0; }
__attribute__ ((noinline)) int main2 () { int i; int c[N] = {1,2,3,4,5,6,7,8,9}; int d[N] = {2,3,4,5,6,7,8,9,0}; struct extraction *p; p = (struct extraction *) malloc (sizeof (struct extraction));
/* Vectorizable: c and d are local arrays. */ for (i = 0; i < N; i++) { p->a[i] = c[i]; p->b[i] = d[i]; }
/* check results: */ for (i = 0; i < N; i++) { if (p->a[i] != c[i] || p->b[i] != d[i]) abort(); }
return 0; }
int main (void) { check_vect ();
main1 (); main2 (); return 0; }
/* Requires versioning. */ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 0 "vect" } } */
|