simd-7.c 750 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* { dg-do run { target vect_simd_clones } } */
  2. /* { dg-additional-options "-msse2" { target sse2_runtime } } */
  3. /* { dg-additional-options "-mavx" { target avx_runtime } } */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #define N 30
  7. int a[N], a_ref[N], b[N];
  8. #pragma omp declare simd inbranch
  9. int fib( int n )
  10. {
  11. if (n <= 1)
  12. return n;
  13. else
  14. return fib(n-1) + fib(n-2);
  15. }
  16. void fib_ref()
  17. {
  18. int i;
  19. a_ref[0] = 0;
  20. a_ref[1] = 1;
  21. for (i=2; i < N; i++)
  22. a_ref[i] = a_ref[i-2] + a_ref[i-1];
  23. }
  24. int main(void)
  25. {
  26. int i;
  27. #pragma omp simd
  28. for (i=0; i < N; i++)
  29. b[i] = i;
  30. #pragma omp simd
  31. for (i=0; i < N; i++)
  32. a[i] = fib(b[i]);
  33. fib_ref ();
  34. for (i=0; i < N; i++)
  35. if (a[i] != a_ref[i])
  36. abort ();
  37. return 0;
  38. }