blob: af12295541a2671f8edc26c2d437abcd1954c155 [file] [log] [blame]
/* Based on sollve_vv's tests/5.0/declare_target/test_nested_declare_target.c. */
#define N 1024
int a[N], b[N], c[N];
int i = 0;
void
update ()
{
for (i = 0; i < N; i++)
{
a[i] += 1;
b[i] += 2;
c[i] += 3;
}
}
#pragma omp declare target
#pragma omp declare target link(a,c,b,i)
#pragma omp declare target to(update)
#pragma omp end declare target
int
main ()
{
for (i = 0; i < N; i++)
{
a[i] = i;
b[i] = i + 1;
c[i] = i + 2;
}
//__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]);
#pragma omp target map(to: i) map(tofrom: a, b, c)
{
update(); /* Device. */
}
//__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]);
for (i = 0; i < N; i++)
if ( a[i] != i + 1 || b[i] != i + 3 || c[i] != i + 5)
__builtin_abort();
update(); /* Host. */
//__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]);
for (i = 0; i < N; i++)
if ( a[i] != i + 2 || b[i] != i + 5 || c[i] != i + 8)
__builtin_abort ();
return 0;
}