// RUN: %libomptarget-compile-run-and-check-aarch64-unknown-linux-gnu // RUN: %libomptarget-compile-run-and-check-powerpc64-ibm-linux-gnu // RUN: %libomptarget-compile-run-and-check-powerpc64le-ibm-linux-gnu // RUN: %libomptarget-compile-run-and-check-x86_64-unknown-linux-gnu // RUN: %libomptarget-compile-run-and-check-nvptx64-nvidia-cuda // REQUIRES: unified_shared_memory // UNSUPPORTED: amdgcn-amd-amdhsa #pragma omp declare target int *ptr1; #pragma omp end declare target int a[10]; #include #include int main() { ptr1 = (int *)malloc(sizeof(int) * 100); int *ptr2; ptr2 = (int *)malloc(sizeof(int) * 100); #pragma omp target map(ptr1, ptr1[ : 100]) { ptr1[1] = 6; } // CHECK: 6 printf(" %d \n", ptr1[1]); #pragma omp target data map(ptr1[ : 5]) { #pragma omp target map(ptr1[2], ptr1, ptr1[3]) map(ptr2, ptr2[2]) { ptr1[2] = 7; ptr1[3] = 9; ptr2[2] = 7; } } // CHECK: 7 7 9 printf(" %d %d %d \n", ptr2[2], ptr1[2], ptr1[3]); free(ptr1); #pragma omp target map(ptr2, ptr2[ : 100]) { ptr2[1] = 6; } // CHECK: 6 printf(" %d \n", ptr2[1]); free(ptr2); a[1] = 111; int *p = &a[0]; // CHECK: 111 printf("%d %p %p\n", p[1], p, &p); // 111 hst_p1 hst_p2 #pragma omp target data map(to : p[1 : 3]) map(p) #pragma omp target data use_device_addr(p) { #pragma omp target has_device_addr(p) { // CHECK: 111 printf("%d %p %p\n", p[1], p, &p); // 111 dev_p1 dev_p2 p[1] = 222; // CHECK: 222 printf("%d %p %p\n", p[1], p, &p); // 222 dev_p1 dev_p2 } } // CHECK: 111 printf("%d %p %p\n", p[1], p, &p); // 111 hst_p1 hst_p2 return 0; }