blob: de696081d166c224bd3aa2f6e9214de7ad51f6ea [file] [log] [blame]
extern
#ifdef __cplusplus
"C"
#endif
void abort (void);
#define N 256
int r;
void
foo (int *a)
{
int i, j;
#pragma omp loop bind(thread) order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
for (i = 0; i < N; i++)
{
j = i - 2;
a[i] = j;
r += j;
}
}
void
bar (int *a)
{
int i, j;
#pragma omp loop bind(parallel) order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
for (i = 0; i < N; i++)
{
j = i;
a[i] = j;
r += j;
}
}
void
baz (int *a)
{
int i, j;
#pragma omp loop bind(teams) order(concurrent) private (j) lastprivate (i) reduction(+:r)
for (i = 0; i < N; i++)
{
j = i + 2;
a[i] = j;
r += j;
}
}
int
main ()
{
int a[N], i, j;
foo (a);
for (i = 0; i < N; ++i)
if (a[i] != i - 2)
abort ();
else
a[i] = -35;
if (r != N * (N - 5) / 2)
abort ();
else
r = 0;
bar (a);
for (i = 0; i < N; ++i)
if (a[i] != i)
abort ();
else
a[i] = -35;
if (r != N * (N - 1) / 2)
abort ();
else
r = 0;
#pragma omp parallel loop private (j) lastprivate (i) reduction(+:r)
for (i = 0; i < N; i++)
{
j = i + 4;
a[i] = j;
r += j;
}
if (i != N)
abort ();
for (i = 0; i < N; ++i)
if (a[i] != i + 4)
abort ();
else
a[i] = -35;
if (r != N * (N + 7) / 2)
abort ();
else
r = 0;
#pragma omp parallel
bar (a);
for (i = 0; i < N; ++i)
if (a[i] != i)
abort ();
else
a[i] = -35;
if (r != N * (N - 1) / 2)
abort ();
else
r = 0;
#pragma omp teams
baz (a);
for (i = 0; i < N; ++i)
if (a[i] != i + 2)
abort ();
else
a[i] = -35;
if (r != N * (N + 3) / 2)
abort ();
else
r = 0;
#pragma omp teams loop order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
for (i = 0; i < N; i++)
{
j = i - 4;
a[i] = j;
r += j;
}
if (i != N)
abort ();
for (i = 0; i < N; ++i)
if (a[i] != i - 4)
abort ();
if (r != N * (N - 9) / 2)
abort ();
return 0;
}