pr66199-8.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* PR middle-end/66199 */
  2. /* { dg-do run } */
  3. #pragma omp declare target
  4. int u[1024], v[1024], w[1024];
  5. #pragma omp end declare target
  6. __attribute__((noinline, noclone)) long
  7. f1 (long a, long b)
  8. {
  9. long d;
  10. #pragma omp target map(from: d)
  11. #pragma omp teams default(none) shared(a, b, d, u, v, w)
  12. #pragma omp distribute simd firstprivate (a, b)
  13. for (d = a; d < b; d++)
  14. u[d] = v[d] + w[d];
  15. return d;
  16. }
  17. __attribute__((noinline, noclone)) long
  18. f2 (long a, long b, long c)
  19. {
  20. long d, e;
  21. #pragma omp target map(from: d, e)
  22. #pragma omp teams default(none) firstprivate (a, b, c) shared(d, e, u, v, w)
  23. #pragma omp distribute simd linear(d) lastprivate(e)
  24. for (d = a; d < b; d++)
  25. {
  26. u[d] = v[d] + w[d];
  27. e = c + d * 5;
  28. }
  29. return d + e;
  30. }
  31. __attribute__((noinline, noclone)) long
  32. f3 (long a1, long b1, long a2, long b2)
  33. {
  34. long d1, d2;
  35. #pragma omp target map(from: d1, d2)
  36. #pragma omp teams default(none) shared(a1, b1, a2, b2, d1, d2, u, v, w)
  37. #pragma omp distribute simd firstprivate (a1, b1, a2, b2) lastprivate(d1, d2) collapse(2)
  38. for (d1 = a1; d1 < b1; d1++)
  39. for (d2 = a2; d2 < b2; d2++)
  40. u[d1 * 32 + d2] = v[d1 * 32 + d2] + w[d1 * 32 + d2];
  41. return d1 + d2;
  42. }
  43. __attribute__((noinline, noclone)) long
  44. f4 (long a1, long b1, long a2, long b2)
  45. {
  46. long d1, d2;
  47. #pragma omp target map(from: d1, d2)
  48. #pragma omp teams default(none) firstprivate (a1, b1, a2, b2) shared(d1, d2, u, v, w)
  49. #pragma omp distribute simd collapse(2)
  50. for (d1 = a1; d1 < b1; d1++)
  51. for (d2 = a2; d2 < b2; d2++)
  52. u[d1 * 32 + d2] = v[d1 * 32 + d2] + w[d1 * 32 + d2];
  53. return d1 + d2;
  54. }
  55. int
  56. main ()
  57. {
  58. if (f1 (0, 1024) != 1024
  59. || f2 (0, 1024, 17) != 1024 + (17 + 5 * 1023)
  60. || f3 (0, 32, 0, 32) != 64
  61. || f4 (0, 32, 0, 32) != 64)
  62. __builtin_abort ();
  63. return 0;
  64. }