2018-01-22 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / linear-1.C
blob1dd1ffc89398b50e1303b20b2b9abf8b9faed6d0
1 int a[256];
3 __attribute__((noinline, noclone)) int
4 f1 (int i)
6   #pragma omp parallel for linear (i: 4)
7   for (int j = 16; j < 64; j++)
8     {
9       a[i] = j;
10       i += 4;
11     }
12   return i;
15 __attribute__((noinline, noclone)) short int &
16 f2 (short int &i, char k)
18   #pragma omp parallel for linear (i: k + 1)
19   for (long j = 16; j < 64; j++)
20     {
21       a[i] = j;
22       i += 4;
23     }
24   return i;
27 template <typename T>
28 __attribute__((noinline, noclone)) T
29 f3 (T i, T k)
31   #pragma omp parallel for linear (i: k)
32   for (short j = 16; j < 64; j++)
33     {
34       a[i] = j;
35       i += 4;
36     }
37   return i;
40 template <typename T>
41 __attribute__((noinline, noclone)) T &
42 f4 (T &i)
44   #pragma omp parallel for linear (i: 4) schedule(static, 3)
45   for (int j = 16; j < 64; j++)
46     {
47       a[i] = j;
48       i += 4;
49     }
50   return i;
53 __attribute__((noinline, noclone)) short int
54 f5 (short int i, char &k)
56   #pragma omp parallel for linear (i: k + 1) schedule(static, 5)
57   for (long j = 16; j < 64; j++)
58     {
59       a[i] = j;
60       i += 4;
61     }
62   return i;
65 template <int N>
66 __attribute__((noinline, noclone)) long long int
67 f6 (long long int i, long long int k)
69   #pragma omp parallel for linear (i: k) schedule(static, 7)
70   for (short j = 16; j < 64; j++)
71     {
72       a[i] = j;
73       i += 4;
74     }
75   return i;
78 __attribute__((noinline, noclone)) int
79 f7 (int &i)
81   #pragma omp parallel for linear (i: 4) schedule(dynamic, 3)
82   for (int j = 16; j < 64; j++)
83     {
84       a[i] = j;
85       i += 4;
86     }
87   return i;
90 __attribute__((noinline, noclone)) short int
91 f8 (short int i, char k)
93   #pragma omp parallel for linear (i: k + 1) schedule(dynamic, 5)
94   for (long j = 16; j < 64; j++)
95     {
96       a[i] = j;
97       i += 4;
98     }
99   return i;
102 __attribute__((noinline, noclone)) long long int
103 f9 (long long int i, long long int k)
105   #pragma omp parallel for linear (i: k) schedule(dynamic, 7)
106   for (short j = 16; j < 64; j++)
107     {
108       a[i] = j;
109       i += 4;
110     }
111   return i;
114 template <typename T>
115 __attribute__((noinline, noclone)) T &
116 f10 (T &i, long &step)
118   #pragma omp parallel for linear (i: 4)
119   for (int j = 16; j < 112; j += step)
120     {
121       a[i] = j / 2 + 8;
122       i += 4;
123     }
124   return i;
127 __attribute__((noinline, noclone)) short int
128 f11 (short int i, char k, char step)
130   #pragma omp parallel for linear (i: k + 1)
131   for (long j = 16; j < 112; j += step)
132     {
133       a[i] = j / 2 + 8;
134       i += 4;
135     }
136   return i;
139 __attribute__((noinline, noclone)) long long int
140 f12 (long long int i, long long int k, int step)
142   #pragma omp parallel for linear (i: k)
143   for (short j = 16; j < 112; j += step)
144     {
145       a[i] = j / 2 + 8;
146       i += 4;
147     }
148   return i;
151 __attribute__((noinline, noclone)) int
152 f13 (int &i, long long int step)
154   #pragma omp parallel for linear (i: 4) schedule(static, 3)
155   for (int j = 16; j < 112; j += step)
156     {
157       a[i] = j / 2 + 8;
158       i += 4;
159     }
160   return i;
163 __attribute__((noinline, noclone)) short int
164 f14 (short int &i, char &k, int &step)
166   #pragma omp parallel for linear (i: k + 1) schedule(static, 5)
167   for (long j = 16; j < 112; j += step)
168     {
169       a[i] = j / 2 + 8;
170       i += 4;
171     }
172   return i;
175 template <int N>
176 __attribute__((noinline, noclone)) long long int
177 f15 (long long int i, long long int k, long int step)
179   #pragma omp parallel for linear (i: k) schedule(static, 7)
180   for (short j = 16; j < 112; j += step)
181     {
182       a[i] = j / 2 + 8;
183       i += 4;
184     }
185   return i;
188 __attribute__((noinline, noclone)) int
189 f16 (int i, long long int step)
191   #pragma omp parallel for linear (i: 4) schedule(dynamic, 3)
192   for (int j = 16; j < 112; j += step)
193     {
194       a[i] = j / 2 + 8;
195       i += 4;
196     }
197   return i;
200 __attribute__((noinline, noclone)) short int
201 f17 (short int i, char k, int step)
203   #pragma omp parallel for linear (i: k + 1) schedule(dynamic, 5)
204   for (long j = 16; j < 112; j += step)
205     {
206       a[i] = j / 2 + 8;
207       i += 4;
208     }
209   return i;
212 template <typename T>
213 __attribute__((noinline, noclone)) T
214 f18 (T i, T k, long int step)
216   #pragma omp parallel for linear (i: k) schedule(dynamic, 7)
217   for (short j = 16; j < 112; j += step)
218     {
219       a[i] = j / 2 + 8;
220       i += 4;
221     }
222   return i;
226 main ()
228 #define TEST(x) \
229   if (x != 8 + 48 * 4)                          \
230     __builtin_abort ();                         \
231   for (int i = 0; i < 256; i++)                 \
232     if (a[i] != (((i & 3) == 0 && i >= 8        \
233                   && i < 8 + 48 * 4)            \
234                  ? ((i - 8) / 4) + 16 : 0))     \
235       __builtin_abort ();                       \
236   __builtin_memset (a, 0, sizeof (a))
237   TEST (f1 (8));
238   short int vs = 8;
239   TEST (f2 (vs, 3));
240   TEST (f3 (8LL, 4LL));
241   int vi = 8;
242   TEST (f4 (vi));
243   char vk = 3;
244   TEST (f5 (8, vk));
245   TEST (f6<7> (8LL, 4LL));
246   vi = 8;
247   TEST (f7 (vi));
248   TEST (f8 (8, 3));
249   TEST (f9 (8LL, 4LL));
250   vi = 8;
251   long vl = 2;
252   TEST (f10 (vi, vl));
253   TEST (f11 (8, 3, 2));
254   TEST (f12 (8LL, 4LL, 2));
255   vi = 8;
256   TEST (f13 (vi, 2));
257   vs = 8;
258   vk = 3;
259   vi = 2;
260   TEST (f14 (vs, vk, vi));
261   TEST (f15<9> (8LL, 4LL, 2));
262   TEST (f16 (8, 2));
263   TEST (f17 (8, 3, 2));
264   long long int vll1 = 8LL;
265   long long int vll2 = 4LL;
266   TEST (f18<long long int &> (vll1, vll2, 2));
267   return 0;