/* { dg-do run } */ /* { dg-additional-options "-msse2" { target sse2_runtime } } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */ #include #include #define EPS 0.005 int P[1000]; float A[1000]; float do_work(float *arr) { float pri; #pragma omp simd lastprivate(pri) for (int i = 0; i < 999; ++i) { int j = P[i]; pri = 0.5f; if (j % 2 == 0) { pri = A[j+1] + arr[i]; } A[j] = pri * 1.5f; pri = pri + A[j]; } return pri; } int main(void) { float pri, arr[1000], diff; for (int i = 0; i < 1000; ++i) { P[i] = i; A[i] = i * 1.5f; arr[i] = i * 1.8f; } pri = do_work(&arr[0]); diff = pri - 8237.25; if (diff > EPS || -diff > EPS) abort (); return 0; }