pr79940.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /* PR c/79940 */
  2. int
  3. main ()
  4. {
  5. int i, j, l, m;
  6. int a[10000], b[10000], c[10000];
  7. for (i = 0; i < 10000; i++)
  8. {
  9. a[i] = i;
  10. b[i] = i & 31;
  11. }
  12. #pragma omp parallel shared(a, b, c)
  13. #pragma omp single
  14. #pragma omp taskloop shared(a, b, c)
  15. for (i = 0; i < 10000; i++)
  16. c[i] = a[i] + b[i];
  17. #pragma omp parallel
  18. #pragma omp single
  19. {
  20. #pragma omp taskloop shared(a, b, c) lastprivate (i)
  21. for (i = 0; i < 10000; i++)
  22. c[i] += a[i] + b[i];
  23. l = i;
  24. }
  25. #pragma omp parallel
  26. #pragma omp single
  27. #pragma omp taskloop shared(a, b, c) collapse(2)
  28. for (i = 0; i < 100; i++)
  29. for (j = 0; j < 100; j++)
  30. c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j];
  31. #pragma omp parallel
  32. #pragma omp single
  33. {
  34. #pragma omp taskloop shared(a, b, c) lastprivate (i, j)
  35. for (i = 0; i < 100; i++)
  36. for (j = 0; j < 100; j++)
  37. c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j];
  38. m = i * 100 + j;
  39. }
  40. for (i = 0; i < 10000; i++)
  41. if (a[i] != i || b[i] != (i & 31) || c[i] != 4 * i + 4 * (i & 31))
  42. __builtin_abort ();
  43. if (l != 10000 || m != 10100)
  44. __builtin_abort ();
  45. return 0;
  46. }