329 lines
5.8 KiB
C
329 lines
5.8 KiB
C
|
/* PR libgomp/29947 */
|
||
|
/* { dg-options "-O2 -fopenmp" } */
|
||
|
/* { dg-do run } */
|
||
|
|
||
|
extern void abort (void);
|
||
|
|
||
|
int cnt;
|
||
|
|
||
|
void
|
||
|
test1 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (dynamic)
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test2 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (dynamic)
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test3 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (guided)
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test4 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (guided)
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test5 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (dynamic) ordered
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test6 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (dynamic) ordered
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test7 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (guided) ordered
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test8 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel reduction (+:e,c)
|
||
|
{
|
||
|
#pragma omp for schedule (guided) ordered
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
#pragma omp atomic
|
||
|
++cnt;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test9 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (dynamic)
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test10 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (dynamic)
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test11 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (guided)
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test12 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (guided)
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test13 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test14 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test15 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
|
||
|
for (i = j1; i <= k1; ++i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test16 (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
long i, e = 0, c = 0;
|
||
|
#pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
|
||
|
for (i = k1; i >= j1; --i)
|
||
|
{
|
||
|
if (i < j2 || i > k2)
|
||
|
++e;
|
||
|
#pragma omp ordered
|
||
|
++c;
|
||
|
}
|
||
|
if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
|
||
|
abort ();
|
||
|
}
|
||
|
|
||
|
int
|
||
|
__attribute__((noinline))
|
||
|
test (long j1, long k1, long j2, long k2)
|
||
|
{
|
||
|
test1 (j1, k1, j2, k2);
|
||
|
test2 (j1, k1, j2, k2);
|
||
|
test3 (j1, k1, j2, k2);
|
||
|
test4 (j1, k1, j2, k2);
|
||
|
test5 (j1, k1, j2, k2);
|
||
|
test6 (j1, k1, j2, k2);
|
||
|
test7 (j1, k1, j2, k2);
|
||
|
test8 (j1, k1, j2, k2);
|
||
|
test9 (j1, k1, j2, k2);
|
||
|
test10 (j1, k1, j2, k2);
|
||
|
test11 (j1, k1, j2, k2);
|
||
|
test12 (j1, k1, j2, k2);
|
||
|
test13 (j1, k1, j2, k2);
|
||
|
test14 (j1, k1, j2, k2);
|
||
|
test15 (j1, k1, j2, k2);
|
||
|
test16 (j1, k1, j2, k2);
|
||
|
return cnt;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main (void)
|
||
|
{
|
||
|
test (1, 5, 1, 5);
|
||
|
test (5, 5, 5, 5);
|
||
|
test (5, 4, 5, 4);
|
||
|
test (5, 1, 5, 1);
|
||
|
return 0;
|
||
|
}
|