102dff789SShilei Tian // RUN: %libomptarget-compilexx-and-run-generic 2996baa58SShilei 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 7996baa58SShilei Tian #include <cmath> 8996baa58SShilei Tian #include <cstdlib> 9996baa58SShilei Tian #include <iostream> 10996baa58SShilei Tian almost_equal(float x,float gold,float tol)11996baa58SShilei Tianbool almost_equal(float x, float gold, float tol) { 12996baa58SShilei Tian if (std::signbit(x) != std::signbit(gold)) 13996baa58SShilei Tian x = std::abs(gold) - std::abs(x); 14996baa58SShilei Tian 15996baa58SShilei Tian return std::abs(gold) * (1 - tol) <= std::abs(x) && 16996baa58SShilei Tian std::abs(x) <= std::abs(gold) * (1 + tol); 17996baa58SShilei Tian } 18996baa58SShilei Tian main(int argc,char * argv[])19996baa58SShilei Tianint main(int argc, char *argv[]) { 20996baa58SShilei Tian constexpr const int N0{2}; 21996baa58SShilei Tian constexpr const int N1{182}; 22996baa58SShilei Tian constexpr const float expected_value{N0 * N1}; 23996baa58SShilei Tian float counter_N0{}; 24996baa58SShilei Tian 25996baa58SShilei Tian #pragma omp target data map(tofrom : counter_N0) 26996baa58SShilei Tian { 27996baa58SShilei Tian #pragma omp taskloop shared(counter_N0) 28996baa58SShilei Tian for (int i0 = 0; i0 < N0; i0++) { 29996baa58SShilei Tian #pragma omp target teams distribute parallel for map(tofrom : counter_N0) nowait 30996baa58SShilei Tian for (int i1 = 0; i1 < N1; i1++) { 31996baa58SShilei Tian #pragma omp atomic update 32996baa58SShilei Tian counter_N0 = counter_N0 + 1.; 33996baa58SShilei Tian } 34996baa58SShilei Tian } 35996baa58SShilei Tian } 36996baa58SShilei Tian 37996baa58SShilei Tian if (!almost_equal(counter_N0, expected_value, 0.1)) { 38996baa58SShilei Tian std::cerr << "Expected: " << expected_value << " Got: " << counter_N0 39996baa58SShilei Tian << '\n'; 40996baa58SShilei Tian return -1; 41996baa58SShilei Tian } 42996baa58SShilei Tian 43996baa58SShilei Tian return 0; 44996baa58SShilei Tian } 45