1 /* { dg-require-effective-target vect_int } */
21 __attribute__ ((noinline
))
25 p
= (struct extraction
*) malloc (sizeof (struct extraction
));
26 for (i
= 0; i
< N
; i
++)
28 for (j
= 0; j
< N
; j
++)
30 a
[i
][j
] = (i
*7 + j
*17)%53;
31 b
[i
][j
] = (i
*11+ j
*13)%41;
33 abort (); /* to avoid vectorization. */
36 for (i
= 0; i
< N
; i
++)
38 for (j
= 0; j
< N
; j
++)
42 abort (); /* to avoid vectorization. */
45 for (i
= 1; i
< N
; i
++)
47 for (j
= 0; j
< N
; j
++)
49 off
= x
+ i
+ j
+ N
+1;
50 if (x
+ i
+ j
> N
*N
-1)
53 *(&c
[0][0]+x
+i
+j
) = *(&b
[0][0] + off
- N
*N
);
55 *(&c
[0][0]+x
+i
+j
) = *(&a
[0][0] + off
);
57 abort (); /* to avoid vectorization. */
61 for (i
= 0; i
< N
; i
++)
63 for (j
= 0; j
< N
; j
++)
67 /* Because Y is volatile, the compiler cannot move this check out
70 abort (); /* to avoid vectorization. */
74 /* Vectorizable: distance > number of iterations. */
75 for (i
= 1; i
< N
; i
++)
77 for (j
= 0; j
< N
; j
++)
79 *((int *)p
+ x
+ i
+ j
) = *((int *)p
+ x
+ i
+ j
+ N
+1);
84 for (i
= 0; i
< N
; i
++)
86 for (j
= 0; j
< N
; j
++)
88 if (p
->a
[i
][j
] != c
[i
][j
])
102 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
103 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
104 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */