mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-29 12:50:35 +00:00
115 lines
2.1 KiB
C
115 lines
2.1 KiB
C
// PR libgomp/69555
|
|
// { dg-do run }
|
|
|
|
#include <omp.h>
|
|
|
|
__attribute__((noinline, noclone)) void
|
|
f1 (int y)
|
|
{
|
|
int a[y - 2];
|
|
int (&c)[y - 2] = a;
|
|
c[0] = 111;
|
|
int e = 0;
|
|
|
|
#pragma omp parallel private (c) num_threads (4) reduction (+:e)
|
|
{
|
|
int v = omp_get_thread_num ();
|
|
for (int i = 0; i < y - 2; i++)
|
|
c[i] = i + v;
|
|
#pragma omp barrier
|
|
for (int i = 0; i < y - 2; i++)
|
|
if (c[i] != i + v)
|
|
e++;
|
|
}
|
|
if (c[0] != 111 || e)
|
|
__builtin_abort ();
|
|
}
|
|
|
|
__attribute__((noinline, noclone)) void
|
|
f2 (int y)
|
|
{
|
|
int a[y - 2];
|
|
int (&c)[y - 2] = a;
|
|
c[0] = 111;
|
|
|
|
#pragma omp task private (c)
|
|
{
|
|
int v = omp_get_thread_num ();
|
|
for (int i = 0; i < y - 2; i++)
|
|
c[i] = i + v;
|
|
asm volatile ("" : : "r" (&c[0]) : "memory");
|
|
for (int i = 0; i < y - 2; i++)
|
|
if (c[i] != i + v)
|
|
__builtin_abort ();
|
|
}
|
|
if (c[0] != 111)
|
|
__builtin_abort ();
|
|
}
|
|
|
|
__attribute__((noinline, noclone)) void
|
|
f3 (int y)
|
|
{
|
|
int a[y - 2];
|
|
int (&c)[y - 2] = a;
|
|
for (int i = 0; i < y - 2; i++)
|
|
c[i] = i + 4;
|
|
|
|
#pragma omp parallel firstprivate (c) num_threads (4)
|
|
{
|
|
int v = omp_get_thread_num ();
|
|
for (int i = 0; i < y - 2; i++)
|
|
{
|
|
if (c[i] != i + 4)
|
|
__builtin_abort ();
|
|
c[i] = i + v;
|
|
}
|
|
#pragma omp barrier
|
|
for (int i = 0; i < y - 2; i++)
|
|
if (c[i] != i + v)
|
|
__builtin_abort ();
|
|
}
|
|
for (int i = 0; i < y - 2; i++)
|
|
if (c[i] != i + 4)
|
|
__builtin_abort ();
|
|
}
|
|
|
|
__attribute__((noinline, noclone)) void
|
|
f4 (int y)
|
|
{
|
|
int a[y - 2];
|
|
int (&c)[y - 2] = a;
|
|
for (int i = 0; i < y - 2; i++)
|
|
c[i] = i + 4;
|
|
|
|
#pragma omp task firstprivate (c)
|
|
{
|
|
int v = omp_get_thread_num ();
|
|
for (int i = 0; i < y - 2; i++)
|
|
{
|
|
if (c[i] != i + 4)
|
|
__builtin_abort ();
|
|
c[i] = i + v;
|
|
}
|
|
asm volatile ("" : : "r" (&c[0]) : "memory");
|
|
for (int i = 0; i < y - 2; i++)
|
|
if (c[i] != i + v)
|
|
__builtin_abort ();
|
|
}
|
|
for (int i = 0; i < y - 2; i++)
|
|
if (c[i] != i + 4)
|
|
__builtin_abort ();
|
|
}
|
|
|
|
int
|
|
main ()
|
|
{
|
|
f1 (6);
|
|
f3 (6);
|
|
#pragma omp parallel num_threads (4)
|
|
{
|
|
f2 (6);
|
|
f4 (6);
|
|
}
|
|
return 0;
|
|
}
|