124f836e8SJoachim Protze // RUN: %libomptarget-compilexx-run-and-check-generic 2f5eebc25SShilei Tian 3ad0f6e1dSJon Chesterfield // UNSUPPORTED: x86_64-pc-linux-gnu 4ae23be84SJoseph Huber // UNSUPPORTED: x86_64-pc-linux-gnu-oldDriver 5*d5d83663SJoseph Huber // UNSUPPORTED: x86_64-pc-linux-gnu-LTO 6ad0f6e1dSJon Chesterfield 7f5eebc25SShilei Tian #include <cassert> 8f5eebc25SShilei Tian #include <iostream> 9f5eebc25SShilei Tian main(int argc,char * argv[])10f5eebc25SShilei Tianint main(int argc, char *argv[]) { 11f5eebc25SShilei Tian constexpr const int num_threads = 64, N = 128; 12f5eebc25SShilei Tian int array[num_threads] = {0}; 13f5eebc25SShilei Tian 14f5eebc25SShilei Tian #pragma omp parallel for 15f5eebc25SShilei Tian for (int i = 0; i < num_threads; ++i) { 16f5eebc25SShilei Tian int tmp[N]; 17f5eebc25SShilei Tian 18f5eebc25SShilei Tian for (int j = 0; j < N; ++j) { 19f5eebc25SShilei Tian tmp[j] = i; 20f5eebc25SShilei Tian } 21f5eebc25SShilei Tian 22f5eebc25SShilei Tian #pragma omp target teams distribute parallel for map(tofrom : tmp) 23f5eebc25SShilei Tian for (int j = 0; j < N; ++j) { 24f5eebc25SShilei Tian tmp[j] += j; 25f5eebc25SShilei Tian } 26f5eebc25SShilei Tian 27f5eebc25SShilei Tian for (int j = 0; j < N; ++j) { 28f5eebc25SShilei Tian array[i] += tmp[j]; 29f5eebc25SShilei Tian } 30f5eebc25SShilei Tian } 31f5eebc25SShilei Tian 32f5eebc25SShilei Tian // Verify 33f5eebc25SShilei Tian for (int i = 0; i < num_threads; ++i) { 34f5eebc25SShilei Tian const int ref = (0 + N - 1) * N / 2 + i * N; 35f5eebc25SShilei Tian assert(array[i] == ref); 36f5eebc25SShilei Tian } 37f5eebc25SShilei Tian 38f5eebc25SShilei Tian std::cout << "PASS\n"; 39f5eebc25SShilei Tian 40f5eebc25SShilei Tian return 0; 41f5eebc25SShilei Tian } 42f5eebc25SShilei Tian 43f5eebc25SShilei Tian // CHECK: PASS 44