/* { dg-do run { target vect_simd_clones } } */ /* { dg-additional-options "-msse2" { target sse2_runtime } } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */ #include #include #define N 30 int a[N], a_ref[N], b[N]; #pragma omp declare simd inbranch int fib( int n ) { if (n <= 1) return n; else return fib(n-1) + fib(n-2); } void fib_ref() { int i; a_ref[0] = 0; a_ref[1] = 1; for (i=2; i < N; i++) a_ref[i] = a_ref[i-2] + a_ref[i-1]; } int main(void) { int i; #pragma omp simd for (i=0; i < N; i++) b[i] = i; #pragma omp simd for (i=0; i < N; i++) a[i] = fib(b[i]); fib_ref (); for (i=0; i < N; i++) if (a[i] != a_ref[i]) abort (); return 0; }