loop-25.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. /* { dg-do run } */
  2. /* { dg-additional-options "-O2 -fopenmp -fdump-tree-vect-details" } */
  3. /* { dg-additional-options "-mavx" { target avx_runtime } } */
  4. int x, i, j;
  5. volatile int a, b, c, d, e, f, g, h;
  6. int k[11][101];
  7. extern void abort (void);
  8. int
  9. main ()
  10. {
  11. int niters, err = 0;
  12. for (i = 1; i <= 10; i++)
  13. for (j = 1; j <= 10 * i; j++)
  14. {
  15. k[i][j] = 1;
  16. asm volatile ("" : : : "memory");
  17. }
  18. a = 1; b = 11; c = 1; d = 0; e = 1; f = 10; g = 1; h = 1;
  19. niters = 0; i = -100; j = -100; x = -100;
  20. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  21. for (i = 1; i <= 10; i++)
  22. for (j = 1; j <= 10 * i; j++)
  23. {
  24. err |= (i < 1);
  25. err |= (i > 10);
  26. err |= (j < 1);
  27. err |= (j > 10 * i);
  28. err |= (k[i][j] != 1);
  29. k[i][j]++;
  30. x = i * 1024 + (j & 1023);
  31. niters++;
  32. }
  33. if (i != 11 || j != 101 || x != 10340 || niters != 550 || err)
  34. abort ();
  35. niters = 0; i = -100; j = -100; x = -100;
  36. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  37. for (i = a; i < b; i += c)
  38. for (j = d * i + e; j < g + i * f; j += h)
  39. {
  40. err |= (i < 1);
  41. err |= (i > 10);
  42. err |= (j < 1);
  43. err |= (j > 10 * i);
  44. err |= (k[i][j] != 2);
  45. k[i][j]++;
  46. x = i * 1024 + (j & 1023);
  47. niters++;
  48. }
  49. if (i != 11 || j != 101 || x != 10340 || niters != 550 || err)
  50. abort ();
  51. for (i = 1; i <= 10; i++)
  52. for (j = 1; j <= 10 * i; j++)
  53. if (k[i][j] == 3)
  54. k[i][j] = 0;
  55. else
  56. abort ();
  57. for (i = 0; i < 11; i++)
  58. for (j = 0; j < 101; j++)
  59. if (k[i][j] != 0)
  60. abort ();
  61. for (i = 0; i < 10; i++)
  62. for (j = 0; j < 10 * i; j++)
  63. {
  64. k[i][j] = 1;
  65. asm volatile ("" : : : "memory");
  66. }
  67. a = 0; b = 10; c = 1; d = 0; e = 0; f = 10; g = 0; h = 1;
  68. niters = 0; i = -100; j = -100; x = -100;
  69. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  70. for (i = 0; i < 10; i++)
  71. for (j = 0; j < 10 * i; j++)
  72. {
  73. err |= (i < 0);
  74. err |= (i >= 10);
  75. err |= (j < 0);
  76. err |= (j >= 10 * i);
  77. err |= (k[i][j] != 1);
  78. k[i][j]++;
  79. x = i * 1024 + (j & 1023);
  80. niters++;
  81. }
  82. if (i != 10 || j != 90 || x != 9305 || niters != 450 || err)
  83. abort ();
  84. niters = 0; i = -100; j = -100; x = -100;
  85. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  86. for (i = a; i < b; i += c)
  87. for (j = d * i + e; j < g + i * f; j += h)
  88. {
  89. err |= (i < 0);
  90. err |= (i >= 10);
  91. err |= (j < 0);
  92. err |= (j >= 10 * i);
  93. err |= (k[i][j] != 2);
  94. k[i][j]++;
  95. x = i * 1024 + (j & 1023);
  96. niters++;
  97. }
  98. if (i != 10 || j != 90 || x != 9305 || niters != 450 || err)
  99. abort ();
  100. for (i = 0; i < 10; i++)
  101. for (j = 0; j < 10 * i; j++)
  102. if (k[i][j] == 3)
  103. k[i][j] = 0;
  104. else
  105. abort ();
  106. for (i = 0; i < 11; i++)
  107. for (j = 0; j < 101; j++)
  108. if (k[i][j] != 0)
  109. abort ();
  110. for (i = 4; i < 10; i++)
  111. for (j = -9 + 2 * i; j < i; j++)
  112. {
  113. k[i][j + 1] = 1;
  114. asm volatile ("" : : : "memory");
  115. }
  116. a = 4; b = 10; c = 1; d = 2; e = -9; f = 1; g = 0; h = 1;
  117. niters = 0; i = -100; j = -100; x = -100;
  118. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  119. for (i = 4; i < 10; i++)
  120. for (j = -9 + 2 * i; j < i; j++)
  121. {
  122. err |= (i < 4);
  123. err |= (i >= 10);
  124. err |= (j < -9 + 2 * i);
  125. err |= (j >= i);
  126. err |= (k[i][j + 1] != 1);
  127. k[i][j + 1]++;
  128. x = i * 1024 + (j & 1023);
  129. niters++;
  130. }
  131. if (/*i != 10 || j != 9 || */x != 8199 || niters != 15 || err)
  132. abort ();
  133. niters = 0; i = -100; j = -100; x = -100;
  134. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  135. for (i = a; i < b; i += c)
  136. for (j = d * i + e; j < g + i * f; j += h)
  137. {
  138. err |= (i < 4);
  139. err |= (i >= 10);
  140. err |= (j < -9 + 2 * i);
  141. err |= (j >= i);
  142. err |= (k[i][j + 1] != 2);
  143. k[i][j + 1]++;
  144. x = i * 1024 + (j & 1023);
  145. niters++;
  146. }
  147. if (/*i != 10 || j != 9 || */x != 8199 || niters != 15 || err)
  148. abort ();
  149. for (i = 4; i < 10; i++)
  150. for (j = -9 + 2 * i; j < i; j++)
  151. if (k[i][j + 1] == 3)
  152. k[i][j + 1] = 0;
  153. else
  154. abort ();
  155. for (i = 0; i < 11; i++)
  156. for (j = 0; j < 101; j++)
  157. if (k[i][j] != 0)
  158. abort ();
  159. for (i = 1; i < 10; i += 2)
  160. for (j = 1; j < i + 1; j++)
  161. {
  162. k[i][j] = 1;
  163. asm volatile ("" : : : "memory");
  164. }
  165. a = 1; b = 10; c = 2; d = 0; e = 1; f = 1; g = 1; h = 1;
  166. niters = 0; i = -100; j = -100; x = -100;
  167. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  168. for (i = 1; i < 10; i += 2)
  169. for (j = 1; j < i + 1; j++)
  170. {
  171. err |= (i < 1);
  172. err |= (i >= 10);
  173. err |= (j < 1);
  174. err |= (j >= i + 1);
  175. err |= (k[i][j] != 1);
  176. k[i][j]++;
  177. x = i * 1024 + (j & 1023);
  178. niters++;
  179. }
  180. if (i != 11 || j != 10 || x != 9225 || niters != 25 || err)
  181. abort ();
  182. niters = 0; i = -100; j = -100; x = -100;
  183. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  184. for (i = a; i < b; i += c)
  185. for (j = d * i + e; j < g + i * f; j += h)
  186. {
  187. err |= (i < 1);
  188. err |= (i >= 10);
  189. err |= (j < 1);
  190. err |= (j >= i + 1);
  191. err |= (k[i][j] != 2);
  192. k[i][j]++;
  193. x = i * 1024 + (j & 1023);
  194. niters++;
  195. }
  196. if (i != 11 || j != 10 || x != 9225 || niters != 25 || err)
  197. abort ();
  198. for (i = 1; i < 10; i += 2)
  199. for (j = 1; j < i + 1; j++)
  200. if (k[i][j] == 3)
  201. k[i][j] = 0;
  202. else
  203. abort ();
  204. for (i = 0; i < 11; i++)
  205. for (j = 0; j < 101; j++)
  206. if (k[i][j] != 0)
  207. abort ();
  208. for (j = -11; j >= -41; j -= 15)
  209. {
  210. k[0][-j] = 1;
  211. asm volatile ("" : : : "memory");
  212. }
  213. a = 4; b = 8; c = 12; d = -8; e = -9; f = -3; g = 6; h = 15;
  214. niters = 0; i = -100; j = -100; x = -100;
  215. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  216. for (i = 4; i < 8; i += 12)
  217. for (j = -8 * i - 9; j < i * -3 + 6; j += 15)
  218. {
  219. err |= (i != 4);
  220. err |= (j < -41);
  221. err |= (j > -11);
  222. err |= (k[0][-j] != 1);
  223. k[0][-j]++;
  224. x = i * 1024 + (j & 1023);
  225. niters++;
  226. }
  227. if (i != 16 || j != 4 || x != 5109 || niters != 3 || err)
  228. abort ();
  229. niters = 0; i = -100; j = -100; x = -100;
  230. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  231. for (i = a; i < b; i += c)
  232. for (j = d * i + e; j < g + i * f; j += h)
  233. {
  234. err |= (i != 4);
  235. err |= (j < -41);
  236. err |= (j > -11);
  237. err |= (k[0][-j] != 2);
  238. k[0][-j]++;
  239. x = i * 1024 + (j & 1023);
  240. niters++;
  241. }
  242. if (i != 16 || j != 4 || x != 5109 || niters != 3 || err)
  243. abort ();
  244. for (j = -11; j >= -41; j -= 15)
  245. if (k[0][-j] == 3)
  246. k[0][-j] = 0;
  247. else
  248. abort ();
  249. for (j = -11; j >= -41; j--)
  250. if (k[0][-j] != 0)
  251. abort ();
  252. for (j = -34; j <= -7; j++)
  253. {
  254. k[0][-j] = 1;
  255. asm volatile ("" : : : "memory");
  256. }
  257. a = -13; b = 7; c = 12; d = 3; e = 5; f = 0; g = -6; h = 1;
  258. niters = 0; i = -100; j = -100; x = -100;
  259. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  260. for (i = -13; i < 7; i += 12)
  261. for (j = 3 * i + 5; j < -6; j++)
  262. {
  263. err |= (i != -13);
  264. err |= (j < -34);
  265. err |= (j > -7);
  266. err |= (k[0][-j] != 1);
  267. k[0][-j]++;
  268. x = i * 1024 + (j & 1023);
  269. niters++;
  270. }
  271. if (/*i != 11 || j != 2 || */x != -12295 || niters != 28 || err)
  272. abort ();
  273. niters = 0; i = -100; j = -100; x = -100;
  274. #pragma omp parallel for simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
  275. for (i = a; i < b; i += c)
  276. for (j = d * i + e; j < g + i * f; j += h)
  277. {
  278. err |= (i != -13);
  279. err |= (j < -34);
  280. err |= (j > -7);
  281. err |= (k[0][-j] != 2);
  282. k[0][-j]++;
  283. x = i * 1024 + (j & 1023);
  284. niters++;
  285. }
  286. if (/*i != 11 || j != 2 || */x != -12295 || niters != 28 || err)
  287. abort ();
  288. for (j = -34; j <= -7; j++)
  289. if (k[0][-j] == 3)
  290. k[0][-j] = 0;
  291. else
  292. abort ();
  293. return 0;
  294. }