xref: /llvm-project/offload/test/offloading/task_in_reduction_target.c (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
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 Doerfert int 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