1#ifndef VARS
2#define VARS
3int a[1500];
4float b[10][15][10];
5__attribute__((noreturn)) void
6noreturn (void)
7{
8  for (;;);
9}
10#endif
11#ifndef SC
12#define SC
13#endif
14
15__attribute__((noinline, noclone)) void
16N(f0) (void)
17{
18  int i;
19#pragma omp F S
20  for (i = 0; i < 1500; i++)
21    a[i] += 2;
22}
23
24__attribute__((noinline, noclone)) void
25N(f1) (void)
26{
27#pragma omp F S
28  for (unsigned int i = __INT_MAX__; i < 3000U + __INT_MAX__; i += 2)
29    a[(i - __INT_MAX__) >> 1] -= 2;
30}
31
32__attribute__((noinline, noclone)) void
33N(f2) (void)
34{
35  unsigned long long i;
36#pragma omp F S
37  for (i = __LONG_LONG_MAX__ + 4500ULL - 27;
38       i > __LONG_LONG_MAX__ - 27ULL; i -= 3)
39    a[(i + 26LL - __LONG_LONG_MAX__) / 3] -= 4;
40}
41
42__attribute__((noinline, noclone)) void
43N(f3) (long long n1, long long n2, long long s3)
44{
45#pragma omp F S
46  for (long long i = n1 + 23; i > n2 - 25; i -= s3)
47    a[i + 48] += 7;
48}
49
50__attribute__((noinline, noclone)) void
51N(f4) (void)
52{
53  unsigned int i;
54#pragma omp F S
55  for (i = 30; i < 20; i += 2)
56    a[i] += 10;
57}
58
59__attribute__((noinline, noclone)) void
60N(f5) (int n11, int n12, int n21, int n22, int n31, int n32,
61       int s1, int s2, int s3)
62{
63  SC int v1, v2, v3;
64#pragma omp F S collapse(3)
65  for (v1 = n11; v1 < n12; v1 += s1)
66    for (v2 = n21; v2 < n22; v2 += s2)
67      for (v3 = n31; v3 < n32; v3 += s3)
68	b[v1][v2][v3] += 2.5;
69}
70
71__attribute__((noinline, noclone)) void
72N(f6) (int n11, int n12, int n21, int n22, long long n31, long long n32,
73       int s1, int s2, long long int s3)
74{
75  SC int v1, v2;
76  SC long long v3;
77#pragma omp F S collapse(3)
78  for (v1 = n11; v1 > n12; v1 += s1)
79    for (v2 = n21; v2 > n22; v2 += s2)
80      for (v3 = n31; v3 > n32; v3 += s3)
81	b[v1][v2 / 2][v3] -= 4.5;
82}
83
84__attribute__((noinline, noclone)) void
85N(f7) (void)
86{
87  SC unsigned int v1, v3;
88  SC unsigned long long v2;
89#pragma omp F S collapse(3)
90  for (v1 = 0; v1 < 20; v1 += 2)
91    for (v2 = __LONG_LONG_MAX__ + 16ULL;
92	 v2 > __LONG_LONG_MAX__ - 29ULL; v2 -= 3)
93      for (v3 = 10; v3 > 0; v3--)
94	b[v1 >> 1][(v2 - __LONG_LONG_MAX__ + 64) / 3 - 12][v3 - 1] += 5.5;
95}
96
97__attribute__((noinline, noclone)) void
98N(f8) (void)
99{
100  SC long long v1, v2, v3;
101#pragma omp F S collapse(3)
102  for (v1 = 0; v1 < 20; v1 += 2)
103    for (v2 = 30; v2 < 20; v2++)
104      for (v3 = 10; v3 < 0; v3--)
105	b[v1][v2][v3] += 5.5;
106}
107
108__attribute__((noinline, noclone)) void
109N(f9) (void)
110{
111  int i;
112#pragma omp F S
113  for (i = 20; i < 10; i++)
114    {
115      a[i] += 2;
116      noreturn ();
117      a[i] -= 4;
118    }
119}
120
121__attribute__((noinline, noclone)) void
122N(f10) (void)
123{
124  SC int i;
125#pragma omp F S collapse(3)
126  for (i = 0; i < 10; i++)
127    for (int j = 10; j < 8; j++)
128      for (long k = -10; k < 10; k++)
129	{
130	  b[i][j][k] += 4;
131	  noreturn ();
132	  b[i][j][k] -= 8;
133	}
134}
135
136__attribute__((noinline, noclone)) void
137N(f11) (int n)
138{
139  int i;
140#pragma omp F S
141  for (i = 20; i < n; i++)
142    {
143      a[i] += 8;
144      noreturn ();
145      a[i] -= 16;
146    }
147}
148
149__attribute__((noinline, noclone)) void
150N(f12) (int n)
151{
152  SC int i;
153#pragma omp F S collapse(3)
154  for (i = 0; i < 10; i++)
155    for (int j = n; j < 8; j++)
156      for (long k = -10; k < 10; k++)
157	{
158	  b[i][j][k] += 16;
159	  noreturn ();
160	  b[i][j][k] -= 32;
161	}
162}
163
164__attribute__((noinline, noclone)) void
165N(f13) (void)
166{
167  int *i;
168#pragma omp F S
169  for (i = a; i < &a[1500]; i++)
170    i[0] += 2;
171}
172
173__attribute__((noinline, noclone)) void
174N(f14) (void)
175{
176  SC float *i;
177#pragma omp F S collapse(3)
178  for (i = &b[0][0][0]; i < &b[0][0][10]; i++)
179    for (float *j = &b[0][15][0]; j > &b[0][0][0]; j -= 10)
180      for (float *k = &b[0][0][10]; k > &b[0][0][0]; --k)
181	b[i - &b[0][0][0]][(j - &b[0][0][0]) / 10 - 1][(k - &b[0][0][0]) - 1]
182	  -= 3.5;
183}
184
185__attribute__((noinline, noclone)) int
186N(test) (void)
187{
188  int i, j, k;
189  for (i = 0; i < 1500; i++)
190    a[i] = i - 25;
191  N(f0) ();
192  for (i = 0; i < 1500; i++)
193    if (a[i] != i - 23)
194      return 1;
195  N(f1) ();
196  for (i = 0; i < 1500; i++)
197    if (a[i] != i - 25)
198      return 1;
199  N(f2) ();
200  for (i = 0; i < 1500; i++)
201    if (a[i] != i - 29)
202      return 1;
203  N(f3) (1500LL - 1 - 23 - 48, -1LL + 25 - 48, 1LL);
204  for (i = 0; i < 1500; i++)
205    if (a[i] != i - 22)
206      return 1;
207  N(f3) (1500LL - 1 - 23 - 48, 1500LL - 1, 7LL);
208  for (i = 0; i < 1500; i++)
209    if (a[i] != i - 22)
210      return 1;
211  N(f4) ();
212  for (i = 0; i < 1500; i++)
213    if (a[i] != i - 22)
214      return 1;
215  for (i = 0; i < 10; i++)
216    for (j = 0; j < 15; j++)
217      for (k = 0; k < 10; k++)
218	b[i][j][k] = i - 2.5 + 1.5 * j - 1.5 * k;
219  N(f5) (0, 10, 0, 15, 0, 10, 1, 1, 1);
220  for (i = 0; i < 10; i++)
221    for (j = 0; j < 15; j++)
222      for (k = 0; k < 10; k++)
223	if (b[i][j][k] != i + 1.5 * j - 1.5 * k)
224	  return 1;
225  N(f5) (0, 10, 30, 15, 0, 10, 4, 5, 6);
226  for (i = 0; i < 10; i++)
227    for (j = 0; j < 15; j++)
228      for (k = 0; k < 10; k++)
229	if (b[i][j][k] != i + 1.5 * j - 1.5 * k)
230	  return 1;
231  N(f6) (9, -1, 29, 0, 9, -1, -1, -2, -1);
232  for (i = 0; i < 10; i++)
233    for (j = 0; j < 15; j++)
234      for (k = 0; k < 10; k++)
235	if (b[i][j][k] != i - 4.5 + 1.5 * j - 1.5 * k)
236	  return 1;
237  N(f7) ();
238  for (i = 0; i < 10; i++)
239    for (j = 0; j < 15; j++)
240      for (k = 0; k < 10; k++)
241	if (b[i][j][k] != i + 1.0 + 1.5 * j - 1.5 * k)
242	  return 1;
243  N(f8) ();
244  for (i = 0; i < 10; i++)
245    for (j = 0; j < 15; j++)
246      for (k = 0; k < 10; k++)
247	if (b[i][j][k] != i + 1.0 + 1.5 * j - 1.5 * k)
248	  return 1;
249  N(f9) ();
250  N(f10) ();
251  N(f11) (10);
252  N(f12) (12);
253  for (i = 0; i < 1500; i++)
254    if (a[i] != i - 22)
255      return 1;
256  for (i = 0; i < 10; i++)
257    for (j = 0; j < 15; j++)
258      for (k = 0; k < 10; k++)
259	if (b[i][j][k] != i + 1.0 + 1.5 * j - 1.5 * k)
260	  return 1;
261  N(f13) ();
262  N(f14) ();
263  for (i = 0; i < 1500; i++)
264    if (a[i] != i - 20)
265      return 1;
266  for (i = 0; i < 10; i++)
267    for (j = 0; j < 15; j++)
268      for (k = 0; k < 10; k++)
269	if (b[i][j][k] != i - 2.5 + 1.5 * j - 1.5 * k)
270	  return 1;
271  return 0;
272}
273