Retro68/gcc/libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c
Wolfgang Thaller 6fbf4226da gcc-9.1
2019-06-20 20:10:10 +02:00

67 lines
1.4 KiB
C

/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-additional-options "-std=c99" { target c } } */
/* { dg-additional-options "-msse2" { target sse2_runtime } } */
/* { dg-additional-options "-mavx" { target avx_runtime } } */
#include <omp.h>
#include <stdlib.h>
#define N 64
int
main ()
{
int p, *q, i, l;
int a[N];
q = a;
#pragma omp parallel master num_threads(4) private (p) shared(a)
{
int i;
p = omp_get_thread_num ();
if (p != 0)
abort ();
#pragma omp taskloop nogroup
for (i = 0; i < N; ++i)
{
if (omp_get_thread_num () >= 4)
abort ();
a[i] = i;
}
}
#pragma omp parallel num_threads(4)
{
#pragma omp master taskloop lastprivate (i, l) firstprivate (q)
for (i = 0; i != N; i = i + 1)
l = q[i];
}
if (i != N || l != N - 1)
abort ();
#pragma omp parallel master taskloop num_threads(4) \
lastprivate (i, l) firstprivate (q)
for (i = 0; i < N - 5; i += 2)
if (q[i] != i)
abort ();
else
l = q[i];
if (i != N - 4 || l != N - 6)
abort ();
#pragma omp parallel master taskloop simd num_threads(4)
for (i = 0; i < N; i++)
a[i] = 2 * a[i];
if (i != N)
abort ();
#pragma omp parallel num_threads(4)
{
int j;
#pragma omp master taskloop simd collapse(2)
for (i = 0; i < 2; i += 2)
for (j = 0; j < N; j++)
a[j] = a[j] + 1;
}
for (i = 0; i < N; i++)
if (a[i] != 2 * i + 1)
abort ();
return 0;
}