OSDN Git Service

2012-01-30 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / tree-ssa / prefetch-5.c
1 /* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
2 /* { dg-options "-O2 --param min-insn-to-prefetch-ratio=5 -fprefetch-loop-arrays -march=athlon -fdump-tree-aprefetch-details" } */
3
4 /* These are common idioms for writing variable-length arrays at the end
5    of structures.  We should not deduce anything about the number of iterations
6    of the loops from them.  */
7
8 struct tail0
9 {
10   int xxx;
11   int yyy[0];
12 };
13
14 int loop0 (int n, struct tail0 *x)
15 {
16   int i, s = 0;
17
18   for (i = 0; i < n; i++)
19     s += x->yyy[i];
20
21   return s;
22 }
23
24 struct tail1
25 {
26   int xxx;
27   int yyy[1];
28 };
29 int loop1 (int n, struct tail1 *x)
30 {
31   int i, s = 0;
32
33   for (i = 0; i < n; i++)
34     s += x->yyy[i];
35
36   return s;
37 }
38
39 /* It is unlikely that this should be a tail array.  We may deduce that most
40    likely, the loop iterates about 5 times, and the array is not worth prefetching.  */
41
42 struct tail5
43 {
44   int xxx;
45   int yyy[5];
46 };
47 int loop5 (int n, struct tail5 *x)
48 {
49   int i, s = 0;
50
51   for (i = 0; i < n; i++)
52     s += x->yyy[i];
53
54   return s;
55 }
56
57 /* { dg-final { scan-tree-dump-times "Issued prefetch" 2 "aprefetch" } } */
58 /* { dg-final { scan-tree-dump-times "Not prefetching" 1 "aprefetch" } } */
59 /* { dg-final { cleanup-tree-dump "aprefetch" } } */