123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- 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;
- }
|