lastprivate-conditional-9.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* { dg-do run } */
  2. int v, x;
  3. __attribute__((noipa)) void
  4. foo (int *a)
  5. {
  6. #pragma omp for simd lastprivate (conditional: x) schedule(simd: static) if (simd: 0)
  7. for (int i = 0; i < 128; i++)
  8. if (a[i])
  9. x = a[i];
  10. }
  11. __attribute__((noipa)) void
  12. bar (int *a, int *b)
  13. {
  14. #pragma omp for simd lastprivate (conditional: x, v) schedule(static, 16) simdlen(1)
  15. for (int i = 16; i < 128; ++i)
  16. {
  17. if (a[i])
  18. x = a[i];
  19. if (b[i])
  20. v = b[i] + 10;
  21. }
  22. }
  23. __attribute__((noipa)) void
  24. baz (int *a)
  25. {
  26. #pragma omp for simd lastprivate (conditional: x) schedule(simd: dynamic, 16) if (0)
  27. for (int i = 0; i < 128; i++)
  28. if (a[i])
  29. x = a[i] + 5;
  30. }
  31. int
  32. main ()
  33. {
  34. int a[128], b[128], i;
  35. for (i = 0; i < 128; i++)
  36. {
  37. a[i] = ((i % 11) == 2) ? i + 10 : 0;
  38. asm volatile ("" : "+g" (i));
  39. b[i] = ((i % 13) == 5) ? i * 2 : 0;
  40. }
  41. #pragma omp parallel
  42. foo (a);
  43. if (x != 133)
  44. __builtin_abort ();
  45. x = -3;
  46. #pragma omp parallel
  47. bar (b, a);
  48. if (x != 244 || v != 143)
  49. __builtin_abort ();
  50. #pragma omp parallel
  51. baz (b);
  52. if (x != 249)
  53. __builtin_abort ();
  54. return 0;
  55. }