1*330d8983SJohannes Doerfert // RUN: %libomptarget-compile-generic && \ 2*330d8983SJohannes Doerfert // RUN: %libomptarget-run-generic 3*330d8983SJohannes Doerfert 4*330d8983SJohannes Doerfert #include <omp.h> 5*330d8983SJohannes Doerfert #include <stdio.h> 6*330d8983SJohannes Doerfert #include <stdlib.h> 7*330d8983SJohannes Doerfert main(int argc,char * argv[])8*330d8983SJohannes Doerfertint main(int argc, char *argv[]) { 9*330d8983SJohannes Doerfert 10*330d8983SJohannes Doerfert int num_devices = omp_get_num_devices(); 11*330d8983SJohannes Doerfert 12*330d8983SJohannes Doerfert // No target devices, just return 13*330d8983SJohannes Doerfert if (num_devices == 0) { 14*330d8983SJohannes Doerfert printf("PASS\n"); 15*330d8983SJohannes Doerfert return 0; 16*330d8983SJohannes Doerfert } 17*330d8983SJohannes Doerfert 18*330d8983SJohannes Doerfert double sum = 999; 19*330d8983SJohannes Doerfert double A = 311; 20*330d8983SJohannes Doerfert 21*330d8983SJohannes Doerfert #pragma omp taskgroup task_reduction(+ : sum) 22*330d8983SJohannes Doerfert { 23*330d8983SJohannes Doerfert #pragma omp target map(to : A) in_reduction(+ : sum) device(0) nowait 24*330d8983SJohannes Doerfert { sum += A; } 25*330d8983SJohannes Doerfert } 26*330d8983SJohannes Doerfert 27*330d8983SJohannes Doerfert printf("PASS\n"); 28*330d8983SJohannes Doerfert return EXIT_SUCCESS; 29*330d8983SJohannes Doerfert } 30*330d8983SJohannes Doerfert 31*330d8983SJohannes Doerfert // CHECK: PASS 32