simd14.C 861 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // { dg-do run }
  2. // { dg-options "-O2" }
  3. // { dg-additional-options "-msse2" { target sse2_runtime } }
  4. // { dg-additional-options "-mavx" { target avx_runtime } }
  5. int a[1024];
  6. short b[2048];
  7. static inline void
  8. bar (int &x, unsigned long long &y, short *&z)
  9. {
  10. a[x] = x + y + *z;
  11. x++;
  12. y += 17;
  13. z += 2;
  14. }
  15. __attribute__((noinline, noclone)) int
  16. foo (unsigned long long &s, short *&t)
  17. {
  18. int i, j = 0;
  19. int &r = j;
  20. #pragma omp parallel for simd linear(r) linear(s:17ULL) linear(t:2)
  21. for (i = 0; i < 1024; i++)
  22. bar (r, s, t);
  23. return j;
  24. }
  25. int
  26. main ()
  27. {
  28. int i;
  29. for (i = 0; i < 2048; i++)
  30. b[i] = 3 * i;
  31. unsigned long long s = 12;
  32. short *t = b;
  33. int j = foo (s, t);
  34. for (i = 0; i < 1024; i++)
  35. if (a[i] != 12 + 24 * i)
  36. __builtin_abort ();
  37. if (j != 1024 || s != 12 + 1024 * 17ULL || t != &b[2048])
  38. __builtin_abort ();
  39. }