OSDN Git Service

2010-04-13 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vect / no-vfa-vect-depend-1.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include "tree-vect.h"
5
6 #define N 17
7
8 int ia[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
9 int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
10 int res[N] = {12,24,36,48,60,72,84,96,108,120,132,144,156,168,180,192,48};
11
12 __attribute__ ((noinline))
13 int main1 ()
14 {
15   int i;
16
17   /* Not vectorizable due to data dependence: dependence distance 1.  */ 
18   for (i = 0; i < N - 1; i++)
19     {
20       ia[i+1] = ia[i] * 4;
21     }
22
23   /* check results:  */
24   for (i = 0; i < N - 1; i++)
25     {
26       if (ia[i] != 0)
27         abort ();
28     } 
29
30   /* Vectorizable. Dependence distance -1.  */
31   for (i = 0; i < N - 1; i++)
32     {
33       ib[i] = ib[i+1] * 4;
34     }
35
36   /* check results:  */
37   for (i = 0; i < N - 1; i++)
38     {
39       if (ib[i] != res[i])
40         abort ();
41     }
42
43   return 0;
44 }
45
46 int main (void)
47 {
48   check_vect();
49
50   return main1 ();
51 }
52
53 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail vect_no_align } } } */
54 /* { dg-final { scan-tree-dump-times "dependence distance negative" 1 "vect"  } } */
55 /* { dg-final { cleanup-tree-dump "vect" } } */
56