19582f096SJoseph Huber // RUN: %libomptarget-compilexx-generic && \ 29582f096SJoseph Huber // RUN: env LIBOMPTARGET_STACK_SIZE=2048 %libomptarget-run-generic 39582f096SJoseph Huber 49582f096SJoseph Huber // UNSUPPORTED: amdgcn-amd-amdhsa 5ae23be84SJoseph Huber // UNSUPPORTED: amdgcn-amd-amdhsa-oldDriver 6*d5d83663SJoseph Huber // UNSUPPORTED: amdgcn-amd-amdhsa-LTO 7a2dbfb6bSGiorgis Georgakoudis 8a2dbfb6bSGiorgis Georgakoudis #include <cassert> 9a2dbfb6bSGiorgis Georgakoudis #include <iostream> 10a2dbfb6bSGiorgis Georgakoudis work(int * C)11a2dbfb6bSGiorgis Georgakoudisvoid work(int *C) { 12a2dbfb6bSGiorgis Georgakoudis #pragma omp atomic 13a2dbfb6bSGiorgis Georgakoudis ++(*C); 14a2dbfb6bSGiorgis Georgakoudis } 15a2dbfb6bSGiorgis Georgakoudis use(int * C)16a2dbfb6bSGiorgis Georgakoudisvoid use(int *C) { 17a2dbfb6bSGiorgis Georgakoudis #pragma omp parallel num_threads(2) 18a2dbfb6bSGiorgis Georgakoudis work(C); 19a2dbfb6bSGiorgis Georgakoudis } 20a2dbfb6bSGiorgis Georgakoudis main()21a2dbfb6bSGiorgis Georgakoudisint main() { 22a2dbfb6bSGiorgis Georgakoudis int C = 0; 23a2dbfb6bSGiorgis Georgakoudis #pragma omp target map(C) 24a2dbfb6bSGiorgis Georgakoudis { 25a2dbfb6bSGiorgis Georgakoudis use(&C); 26a2dbfb6bSGiorgis Georgakoudis #pragma omp parallel num_threads(2) 27a2dbfb6bSGiorgis Georgakoudis use(&C); 28a2dbfb6bSGiorgis Georgakoudis } 29a2dbfb6bSGiorgis Georgakoudis 30a2dbfb6bSGiorgis Georgakoudis assert(C >= 2 && C <= 6); 31a2dbfb6bSGiorgis Georgakoudis 32a2dbfb6bSGiorgis Georgakoudis std::cout << "PASS\n"; 33a2dbfb6bSGiorgis Georgakoudis 34a2dbfb6bSGiorgis Georgakoudis return 0; 35a2dbfb6bSGiorgis Georgakoudis } 36a2dbfb6bSGiorgis Georgakoudis 37a2dbfb6bSGiorgis Georgakoudis // CHECK: PASS 38