1 // RUN: %libomptarget-compilexx-run-and-check-generic 2 3 // UNSUPPORTED: x86_64-pc-linux-gnu 4 // UNSUPPORTED: x86_64-pc-linux-gnu-oldDriver 5 6 #include <omp.h> 7 8 #include <cassert> 9 #include <iostream> 10 11 int main(int argc, char *argv[]) { 12 #pragma omp parallel for 13 for (int i = 0; i < 16; ++i) { 14 for (int n = 1; n < (1 << 13); n <<= 1) { 15 void *p = omp_target_alloc(n * sizeof(int), 0); 16 omp_target_free(p, 0); 17 } 18 } 19 20 #pragma omp parallel for 21 for (int i = 0; i < 16; ++i) { 22 for (int n = 1; n < (1 << 13); n <<= 1) { 23 int *p = (int *)omp_target_alloc(n * sizeof(int), 0); 24 #pragma omp target teams distribute parallel for is_device_ptr(p) 25 for (int j = 0; j < n; ++j) { 26 p[j] = i; 27 } 28 int buffer[n]; 29 #pragma omp target teams distribute parallel for is_device_ptr(p) \ 30 map(from \ 31 : buffer) 32 for (int j = 0; j < n; ++j) { 33 buffer[j] = p[j]; 34 } 35 for (int j = 0; j < n; ++j) { 36 assert(buffer[j] == i); 37 } 38 omp_target_free(p, 0); 39 } 40 } 41 42 std::cout << "PASS\n"; 43 return 0; 44 } 45 46 // CHECK: PASS 47