1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include "tree-vect.h"
5
6 #define N 16
7 char x[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
8 char cb[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
9
10 __attribute__ ((noinline))
11 int main1 (char *y)
12 {
13 struct {
14 char *p;
15 char *q;
16 } s;
17 int i;
18
19 /* Not vectorized - can't antialias the pointer s.p from the array cb. */
20 s.p = y;
21 for (i = 0; i < N; i++)
22 {
23 s.p[i] = cb[i];
24 }
25
26 /* check results: */
27 for (i = 0; i < N; i++)
28 {
29 if (s.p[i] != cb[i])
30 abort ();
31 }
32
33 /* Not vectorized - can't antialias the pointer s.p from the pointer s.q. */
34 s.q = cb;
35 for (i = 0; i < N; i++)
36 {
37 s.p[i] = s.q[i];
38 }
39
40 /* check results: */
41 for (i = 0; i < N; i++)
42 {
43 if (s.p[i] != s.q[i])
44 abort ();
45 }
46
47 return 0;
48 }
49
50 int main (void)
51 {
52 check_vect ();
53
54 return main1 (x);
55 }
56
57 /* Currently the loops fail to vectorize due to aliasing problems.
58 If/when the aliasing problems are resolved, unalignment may
59 prevent vectorization on some targets. */
60 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail *-*-* } } } */
61 /* { dg-final { scan-tree-dump-times "can't determine dependence" 2 "vect" { target { ! vect_multiple_sizes } } } } */
62 /* { dg-final { scan-tree-dump "can't determine dependence" "vect" { target vect_multiple_sizes } } } */