URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 816 |
Rev 826 |
/* { dg-do run } */
|
/* { dg-do run } */
|
/* { dg-options "-fopenmp -O0" } */
|
/* { dg-options "-fopenmp -O0" } */
|
|
|
#include <omp.h>
|
#include <omp.h>
|
#include <stdlib.h>
|
#include <stdlib.h>
|
|
|
short e[64];
|
short e[64];
|
int g;
|
int g;
|
_Complex double d, f;
|
_Complex double d, f;
|
int num_threads;
|
int num_threads;
|
|
|
__attribute__((noinline)) void
|
__attribute__((noinline)) void
|
foo (int x, long long y)
|
foo (int x, long long y)
|
{
|
{
|
#pragma omp parallel num_threads (4)
|
#pragma omp parallel num_threads (4)
|
{
|
{
|
int i;
|
int i;
|
#pragma omp barrier
|
#pragma omp barrier
|
for (i = 0; i < 2400; i++)
|
for (i = 0; i < 2400; i++)
|
{
|
{
|
if (i == 0)
|
if (i == 0)
|
num_threads = omp_get_num_threads ();
|
num_threads = omp_get_num_threads ();
|
#pragma omp atomic
|
#pragma omp atomic
|
e[0] += x;
|
e[0] += x;
|
#pragma omp atomic
|
#pragma omp atomic
|
e[16] += x;
|
e[16] += x;
|
#pragma omp atomic
|
#pragma omp atomic
|
g += y;
|
g += y;
|
#pragma omp atomic
|
#pragma omp atomic
|
__real__ d += x;
|
__real__ d += x;
|
#pragma omp atomic
|
#pragma omp atomic
|
__imag__ f += x;
|
__imag__ f += x;
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
int
|
int
|
main (void)
|
main (void)
|
{
|
{
|
int i;
|
int i;
|
foo (3, 3LL);
|
foo (3, 3LL);
|
if (g != 3 * 2400 * num_threads
|
if (g != 3 * 2400 * num_threads
|
|| __real__ d != g || __imag__ d != 0
|
|| __real__ d != g || __imag__ d != 0
|
|| __real__ f != 0 || __imag__ f != g)
|
|| __real__ f != 0 || __imag__ f != g)
|
abort ();
|
abort ();
|
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
if (e[i] != ((i && i != 16) ? 0 : g))
|
if (e[i] != ((i && i != 16) ? 0 : g))
|
abort ();
|
abort ();
|
return 0;
|
return 0;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.