1 /* { dg-require-effective-target vect_int } */
2 /* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
20 __attribute__ ((noinline
))
24 p
= (struct extraction
*) malloc (sizeof (struct extraction
));
25 for (i
= 0; i
< N
; i
++)
27 for (j
= 0; j
< N
; j
++)
29 a
[i
][j
] = (i
*7 + j
*17)%53;
30 b
[i
][j
] = (i
*11+ j
*13)%41;
31 asm volatile ("" ::: "memory");
34 for (i
= 0; i
< N
; i
++)
36 for (j
= 0; j
< N
; j
++)
39 asm volatile ("" ::: "memory");
42 for (i
= 1; i
< N
; i
++)
44 for (j
= 0; j
< N
; j
++)
46 off
= x
+ i
+ j
+ N
+1;
47 if (x
+ i
+ j
> N
*N
-1)
50 *(&c
[0][0]+x
+i
+j
) = *(&b
[0][0] + off
- N
*N
);
52 *(&c
[0][0]+x
+i
+j
) = *(&a
[0][0] + off
);
53 asm volatile ("" ::: "memory");
57 for (i
= 0; i
< N
; i
++)
59 for (j
= 0; j
< N
; j
++)
63 asm volatile ("" ::: "memory");
67 /* Vectorizable: distance > number of iterations. */
68 for (i
= 1; i
< N
; i
++)
70 for (j
= 0; j
< N
; j
++)
72 *((int *)p
+ x
+ i
+ j
) = *((int *)p
+ x
+ i
+ j
+ N
+1);
77 for (i
= 0; i
< N
; i
++)
80 for (j
= 0; j
< N
; j
++)
82 if (p
->a
[i
][j
] != c
[i
][j
])
96 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
97 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
98 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
100 /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */