File: target-34.c

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (112 lines) | stat: -rw-r--r-- 2,518 bytes parent folder | download | duplicates (3)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
extern void abort (void);

int
main ()
{
  int a = 1, b = 2, c = 4, d[7];
  #pragma omp parallel
  {
    #pragma omp single
    {
      #pragma omp taskgroup
      {
	#pragma omp target enter data nowait map (to: a, b, c) depend(out: d[0])
	#pragma omp target nowait map (alloc: a, b) depend(in: d[0]) depend(out: d[1])
	{
	  #pragma omp atomic update
	  a |= 4;
	  #pragma omp atomic update
	  b |= 8;
	}
	#pragma omp target nowait map (alloc: a, c) depend(in: d[0]) depend(out: d[2])
	{
	  #pragma omp atomic update
	  a |= 16;
	  #pragma omp atomic update
	  c |= 32;
	}
	#pragma omp target exit data nowait map (from: a, b, c) depend(in: d[1], d[2])
      }
      if (a != 21 || b != 10 || c != 36)
	abort ();
      #pragma omp target map (tofrom: a, b) nowait
      {
	a &= ~16;
	b &= ~2;
      }
      #pragma omp target map (tofrom: c) nowait
      {
	c |= 8;
      }
    } /* Implicit barrier here.  */
    #pragma omp single
    {
      if (a != 5 || b != 8 || c != 44)
	abort ();
      #pragma omp target map (tofrom: a, b) nowait
      {
	a |= 32;
	b |= 4;
      }
      #pragma omp target map (tofrom: c) nowait
      c &= ~4;
      #pragma omp taskwait
      if (a != 37 || b != 12 || c != 40)
	abort ();
      #pragma omp target nowait map (tofrom: a, b) depend(out: d[3])
      {
	#pragma omp atomic update
	a = a + 9;
	b -= 8;
      }
      #pragma omp target nowait map (tofrom: a, c) depend(out: d[4])
      {
	#pragma omp atomic update
	a = a + 4;
	c >>= 1;
      }
      #pragma omp task if (0) depend (in: d[3], d[4]) shared (a, b, c)
      if (a != 50 || b != 4 || c != 20)
	abort ();
      #pragma omp task shared (a)
      a += 50;
      #pragma omp target nowait map (tofrom: b)
      b++;
      #pragma omp target map (tofrom: c) nowait
      c--;
      #pragma omp taskwait
      if (a != 100 || b != 5 || c != 19)
	abort ();
      #pragma omp target map (tofrom: a) nowait depend(out: d[5])
      a++;
      #pragma omp target map (tofrom: b) nowait depend(out: d[6])
      b++;
      #pragma omp target map (tofrom: a, b) depend(in: d[5], d[6])
      {
	if (a != 101 || b != 6)
	  a = -9;
	else
	  {
	    a = 24;
	    b = 38;
	  }
      }
      if (a != 24 || b != 38)
	abort ();
    } /* Implicit barrier here.  */
    #pragma omp master
    {
      #pragma omp target nowait map (tofrom: a, b)
      {
	a *= 2;
	b++;
      }
      #pragma omp target map (tofrom: c) nowait
      c--;
    }
    #pragma omp barrier
    if (a != 48 || b != 39 || c != 18)
      abort ();
  }
  return 0;
}