lastprivate-conditional-10.c 1.1 KB

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