Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.c/target-34.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-xfail-run-if "GOMP_OFFLOAD_async_run not implemented" { offload_target_nvptx } } Cf. https://gcc.gnu.org/PR81688. */ 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; }