aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c
blob: af12295541a2671f8edc26c2d437abcd1954c155 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* 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;
}