1*140ab574SGeorge Rokos // RUN: %libomptarget-compile-run-and-check-aarch64-unknown-linux-gnu 2*140ab574SGeorge Rokos // RUN: %libomptarget-compile-run-and-check-nvptx64-nvidia-cuda 3*140ab574SGeorge Rokos // RUN: %libomptarget-compile-run-and-check-powerpc64-ibm-linux-gnu 4*140ab574SGeorge Rokos // RUN: %libomptarget-compile-run-and-check-powerpc64le-ibm-linux-gnu 5*140ab574SGeorge Rokos // RUN: %libomptarget-compile-run-and-check-x86_64-pc-linux-gnu 6*140ab574SGeorge Rokos 7*140ab574SGeorge Rokos #include <cstdio> 8*140ab574SGeorge Rokos #include <cstdlib> 9*140ab574SGeorge Rokos 10*140ab574SGeorge Rokos #define NUM 1024 11*140ab574SGeorge Rokos 12*140ab574SGeorge Rokos class C { 13*140ab574SGeorge Rokos public: 14*140ab574SGeorge Rokos int *a; 15*140ab574SGeorge Rokos }; 16*140ab574SGeorge Rokos 17*140ab574SGeorge Rokos #pragma omp declare mapper(id: C s) map(s.a[0:NUM]) 18*140ab574SGeorge Rokos 19*140ab574SGeorge Rokos int main() { 20*140ab574SGeorge Rokos C c; 21*140ab574SGeorge Rokos c.a = (int*) malloc(sizeof(int)*NUM); 22*140ab574SGeorge Rokos for (int i = 0; i < NUM; i++) { 23*140ab574SGeorge Rokos c.a[i] = 1; 24*140ab574SGeorge Rokos } 25*140ab574SGeorge Rokos #pragma omp target data map(mapper(id),tofrom: c) 26*140ab574SGeorge Rokos { 27*140ab574SGeorge Rokos #pragma omp target teams distribute parallel for 28*140ab574SGeorge Rokos for (int i = 0; i < NUM; i++) { 29*140ab574SGeorge Rokos ++c.a[i]; 30*140ab574SGeorge Rokos } 31*140ab574SGeorge Rokos } 32*140ab574SGeorge Rokos int sum = 0; 33*140ab574SGeorge Rokos for (int i = 0; i < NUM; i++) { 34*140ab574SGeorge Rokos sum += c.a[i]; 35*140ab574SGeorge Rokos } 36*140ab574SGeorge Rokos // CHECK: Sum = 2048 37*140ab574SGeorge Rokos printf("Sum = %d\n", sum); 38*140ab574SGeorge Rokos return 0; 39*140ab574SGeorge Rokos } 40*140ab574SGeorge Rokos 41