1/* Prefetching when the step is loop invariant.  */
2/* { dg-do compile } */
3/* { dg-require-effective-target sse2 } */
4/* { dg-options "-O3 -msse2 -fprefetch-loop-arrays -fdump-tree-aprefetch-details --param min-insn-to-prefetch-ratio=3 --param simultaneous-prefetches=10 -fdump-tree-aprefetch-details" } */
5
6
7double data[16384];
8void prefetch_when_non_constant_step_is_invariant(int step, int n)
9{
10     int a;
11     int b;
12     for (a = 1; a < step; a++) {
13        for (b = 0; b < n; b += 2 * step) {
14
15          int i = 2*(b + a);
16          int j = 2*(b + a + step);
17
18
19          data[j]   = data[i];
20          data[j+1] = data[i+1];
21        }
22     }
23}
24
25/* { dg-final { scan-tree-dump "Issued prefetch" "aprefetch" } } */
26/* { dg-final { scan-assembler "prefetcht0" } } */
27
28/* { dg-final { cleanup-tree-dump "aprefetch" } } */
29