loop-20.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /* { dg-do run } */
  2. extern void abort (void);
  3. unsigned long long int x, i, j;
  4. volatile unsigned long long int a, b, c, d, e, f, g, h;
  5. int k[4][206];
  6. int
  7. main ()
  8. {
  9. long long int niters;
  10. for (j = ~0ULL / 2 - 32; j < ((~0ULL / 2) + 6); j++)
  11. k[0][j - ~0ULL / 2 + 64] = 1;
  12. a = 1; b = 2; c = 1; d = 0; e = ~0ULL / 2 - 32; f = ((~0ULL / 2) + 6); g = 0; h = 1;
  13. niters = 0; i = -100; j = -100; x = -100;
  14. #pragma omp parallel for collapse(2) lastprivate (i, j, x) reduction(+:niters)
  15. for (i = 1; i < 2; i++)
  16. for (j = ~0ULL / 2 - 32; j < i * ((~0ULL / 2) + 6); j++)
  17. {
  18. if (i != 1 || j < ~0ULL / 2 - 32 || j >= ((~0ULL / 2) + 6) || k[0][j - ~0ULL / 2 + 64] != 1)
  19. abort ();
  20. k[0][j - ~0ULL / 2 + 64]++;
  21. x = i * 1024 + (j & 1023);
  22. niters++;
  23. }
  24. if (i != 2 || j != ((~0ULL / 2) + 6) || x != 1028 || niters != 38)
  25. abort ();
  26. niters = 0; i = -100; j = -100; x = -100;
  27. #pragma omp parallel for collapse(2) lastprivate (i, j, x) reduction(+:niters)
  28. for (i = a; i < b; i += c)
  29. for (j = d * i + e; j < g + i * f; j += h)
  30. {
  31. if (i != 1 || j < ~0ULL / 2 - 32 || j >= ((~0ULL / 2) + 6) || k[0][j - ~0ULL / 2 + 64] != 2)
  32. abort ();
  33. k[0][j - ~0ULL / 2 + 64]++;
  34. x = i * 1024 + (j & 1023);
  35. niters++;
  36. }
  37. if (i != 2 || j != ((~0ULL / 2) + 6) || x != 1028 || niters != 38)
  38. abort ();
  39. for (j = ~0ULL / 2 - 32; j < ((~0ULL / 2) + 6); j++)
  40. if (k[0][j - ~0ULL / 2 + 64] == 3)
  41. k[0][j - ~0ULL / 2 + 64] = 0;
  42. else
  43. abort ();
  44. for (i = 1; i < 4; i++)
  45. for (j = 64ULL * i; j < i * 32ULL + 110; j++)
  46. k[i][j] = 1;
  47. a = 1; b = 4; c = 1; d = 64ULL; e = 0; f = 32ULL; g = 110ULL; h = 1;
  48. niters = 0; i = -100; j = -100; x = -100;
  49. #pragma omp parallel for collapse(2) lastprivate (i, j, x) reduction(+:niters)
  50. for (i = 1; i < 4; i++)
  51. for (j = 64ULL * i; j < i * 32ULL + 110; j++)
  52. {
  53. if (i < 1 || i >= 4 || j < 64ULL * i || j >= i * 32ULL + 110 || k[i][j] != 1)
  54. abort ();
  55. k[i][j]++;
  56. x = i * 1024 + (j & 1023);
  57. niters++;
  58. }
  59. if (i != 4 || j != 206 || x != 3277 || niters != 138)
  60. abort ();
  61. niters = 0; i = -100; j = -100; x = -100;
  62. #pragma omp parallel for collapse(2) lastprivate (i, j, x) reduction(+:niters)
  63. for (i = a; i < b; i += c)
  64. for (j = d * i + e; j < g + i * f; j += h)
  65. {
  66. if (i < 1 || i >= 4 || j < 64ULL * i || j >= i * 32ULL + 110 || k[i][j] != 2)
  67. abort ();
  68. k[i][j]++;
  69. x = i * 1024 + (j & 1023);
  70. niters++;
  71. }
  72. if (i != 4 || j != 206 || x != 3277 || niters != 138)
  73. abort ();
  74. for (i = 1; i < 4; i++)
  75. for (j = 64ULL * i; j < i * 32ULL + 110; j++)
  76. if (k[i][j] == 3)
  77. k[i][j] = 0;
  78. else
  79. abort ();
  80. return 0;
  81. }