loop-19.c 2.4 KB

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