taskloop-3.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* { dg-do run } */
  2. /* { dg-options "-O2" } */
  3. /* { dg-additional-options "-std=c99" { target c } } */
  4. int g;
  5. int a[1024];
  6. __attribute__((noinline, noclone)) int
  7. f1 (int x)
  8. {
  9. #pragma omp taskloop firstprivate (x) lastprivate (x)
  10. for (int i = 0; i < 64; i++)
  11. {
  12. if (x != 74)
  13. __builtin_abort ();
  14. if (i == 63)
  15. x = i + 4;
  16. }
  17. return x;
  18. }
  19. __attribute__((noinline, noclone)) void
  20. f2 (void)
  21. {
  22. #pragma omp taskloop firstprivate (g) lastprivate (g) nogroup
  23. for (int i = 0; i < 64; i++)
  24. {
  25. if (g != 77)
  26. __builtin_abort ();
  27. if (i == 63)
  28. g = i + 9;
  29. }
  30. }
  31. __attribute__((noinline, noclone)) long long
  32. f3 (long long a, long long b, long long c)
  33. {
  34. long long i;
  35. int l;
  36. #pragma omp taskloop default (none) lastprivate (i, l)
  37. for (i = a; i < b; i += c)
  38. l = i;
  39. return l * 7 + i;
  40. }
  41. __attribute__((noinline, noclone)) long long
  42. f4 (long long a, long long b, long long c, long long d,
  43. long long e, long long f, int k)
  44. {
  45. long long i, j;
  46. int l;
  47. #pragma omp taskloop default (none) collapse(2) \
  48. firstprivate (k) lastprivate (i, j, k, l)
  49. for (i = a; i < b; i += e)
  50. for (j = c; j < d; j += f)
  51. {
  52. if (k != 73)
  53. __builtin_abort ();
  54. if (i == 31 && j == 46)
  55. k = i;
  56. l = j;
  57. }
  58. return i + 5 * j + 11 * k + 17 * l;
  59. }
  60. int
  61. main ()
  62. {
  63. #pragma omp parallel
  64. #pragma omp single
  65. {
  66. if (f1 (74) != 63 + 4)
  67. __builtin_abort ();
  68. g = 77;
  69. f2 ();
  70. #pragma omp taskwait
  71. if (g != 63 + 9)
  72. __builtin_abort ();
  73. if (f3 (7, 12, 2) != 11 * 7 + 13)
  74. __builtin_abort ();
  75. if (f4 (0, 32, 16, 48, 1, 2, 73) != 32 + 5 * 48 + 11 * 31 + 17 * 46)
  76. __builtin_abort ();
  77. }
  78. return 0;
  79. }