OSDN Git Service

PR tree-optimization/40238
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vect / slp-1.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include <stdio.h>
5 #include "tree-vect.h"
6
7 #define N 128 
8
9 int
10 main1 ()
11 {
12   int i;
13   unsigned short out[N*8];
14
15   for (i = 0; i < N; i++)
16     {
17       out[i*4] = 8;
18       out[i*4 + 1] = 18;
19       out[i*4 + 2] = 28;
20       out[i*4 + 3] = 38;
21     }
22
23   /* check results:  */
24   for (i = 0; i < N; i++)
25     {
26       if (out[i*4] != 8 
27          || out[i*4 + 1] != 18
28          || out[i*4 + 2] != 28
29          || out[i*4 + 3] != 38)
30         abort ();
31     }
32
33   for (i = 0; i < N; i++)
34     {
35       out[i*8] = 8;
36       out[i*8 + 1] = 7;
37       out[i*8 + 2] = 81;
38       out[i*8 + 3] = 28;
39       out[i*8 + 4] = 18;
40       out[i*8 + 5] = 85;
41       out[i*8 + 6] = 5;
42       out[i*8 + 7] = 4;
43     }
44
45   /* check results:  */
46   for (i = 0; i < N; i++)
47     {
48       if (out[i*8] != 8
49          || out[i*8 + 1] != 7
50          || out[i*8 + 2] != 81
51          || out[i*8 + 3] != 28
52          || out[i*8 + 4] != 18
53          || out[i*8 + 5] != 85
54          || out[i*8 + 6] != 5
55          || out[i*8 + 7] != 4)
56         abort ();
57     }
58
59   /* SLP with unrolling by 8.  */
60   for (i = 0; i < N; i++)
61     {
62       out[i*5] = 8;
63       out[i*5 + 1] = 7;
64       out[i*5 + 2] = 81;
65       out[i*5 + 3] = 28;
66       out[i*5 + 4] = 18;
67     }
68
69   /* check results:  */
70   for (i = 0; i < N; i++)
71     {
72       if (out[i*5] != 8
73          || out[i*5 + 1] != 7
74          || out[i*5 + 2] != 81
75          || out[i*5 + 3] != 28
76          || out[i*5 + 4] != 18)
77         abort ();
78     }
79
80   /* SLP with unrolling by 8.  */
81   for (i = 0; i < N/2; i++)
82     {
83       out[i*9] = 8;
84       out[i*9 + 1] = 7;
85       out[i*9 + 2] = 81;
86       out[i*9 + 3] = 28;
87       out[i*9 + 4] = 18;
88       out[i*9 + 5] = 85;
89       out[i*9 + 6] = 5;
90       out[i*9 + 7] = 4;
91       out[i*9 + 8] = 14;
92     }
93
94   /* check results:  */
95   for (i = 0; i < N/2; i++)
96     {
97       if (out[i*9] != 8
98          || out[i*9 + 1] != 7
99          || out[i*9 + 2] != 81
100          || out[i*9 + 3] != 28
101          || out[i*9 + 4] != 18
102          || out[i*9 + 5] != 85
103          || out[i*9 + 6] != 5
104          || out[i*9 + 7] != 4
105          || out[i*9 + 8] != 14)
106         abort ();
107     }
108
109   return 0;
110 }
111
112 int main (void)
113 {
114   check_vect ();
115
116   main1 ();
117
118   return 0;
119 }
120
121 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect"  } } */
122 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect"  } } */
123 /* { dg-final { cleanup-tree-dump "vect" } } */
124