taskloop-1.c 775 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /* { dg-do run } */
  2. /* { dg-options "-O2" } */
  3. /* { dg-additional-options "-std=c99" { target c } } */
  4. int q, r, e;
  5. __attribute__((noinline, noclone)) void
  6. foo (long a, long b)
  7. {
  8. #pragma omp taskloop lastprivate (q) nogroup
  9. for (long d = a; d < b; d += 2)
  10. {
  11. q = d;
  12. if (d < 2 || d > 6 || (d & 1))
  13. #pragma omp atomic
  14. e |= 1;
  15. }
  16. }
  17. __attribute__((noinline, noclone)) int
  18. bar (int a, int b)
  19. {
  20. int q = 7;
  21. #pragma omp taskloop lastprivate (q)
  22. for (int d = a; d < b; d++)
  23. {
  24. if (d < 12 || d > 17)
  25. #pragma omp atomic
  26. e |= 1;
  27. q = d;
  28. }
  29. return q;
  30. }
  31. int
  32. main ()
  33. {
  34. #pragma omp parallel
  35. #pragma omp single
  36. {
  37. foo (2, 7);
  38. r = bar (12, 18);
  39. }
  40. if (q != 6 || r != 17 || e)
  41. __builtin_abort ();
  42. return 0;
  43. }