pr29947-1.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. /* PR libgomp/29947 */
  2. /* { dg-do run } */
  3. extern void abort (void);
  4. int cnt;
  5. void
  6. test1 (long j1, long k1, long j2, long k2)
  7. {
  8. long i, e = 0, c = 0;
  9. #pragma omp parallel reduction (+:e,c)
  10. {
  11. #pragma omp for schedule (dynamic)
  12. for (i = j1; i <= k1; ++i)
  13. {
  14. if (i < j2 || i > k2)
  15. ++e;
  16. ++c;
  17. }
  18. #pragma omp atomic
  19. ++cnt;
  20. }
  21. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  22. abort ();
  23. }
  24. void
  25. test2 (long j1, long k1, long j2, long k2)
  26. {
  27. long i, e = 0, c = 0;
  28. #pragma omp parallel reduction (+:e,c)
  29. {
  30. #pragma omp for schedule (dynamic)
  31. for (i = k1; i >= j1; --i)
  32. {
  33. if (i < j2 || i > k2)
  34. ++e;
  35. ++c;
  36. }
  37. #pragma omp atomic
  38. ++cnt;
  39. }
  40. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  41. abort ();
  42. }
  43. void
  44. test3 (long j1, long k1, long j2, long k2)
  45. {
  46. long i, e = 0, c = 0;
  47. #pragma omp parallel reduction (+:e,c)
  48. {
  49. #pragma omp for schedule (guided)
  50. for (i = j1; i <= k1; ++i)
  51. {
  52. if (i < j2 || i > k2)
  53. ++e;
  54. ++c;
  55. }
  56. #pragma omp atomic
  57. ++cnt;
  58. }
  59. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  60. abort ();
  61. }
  62. void
  63. test4 (long j1, long k1, long j2, long k2)
  64. {
  65. long i, e = 0, c = 0;
  66. #pragma omp parallel reduction (+:e,c)
  67. {
  68. #pragma omp for schedule (guided)
  69. for (i = k1; i >= j1; --i)
  70. {
  71. if (i < j2 || i > k2)
  72. ++e;
  73. ++c;
  74. }
  75. #pragma omp atomic
  76. ++cnt;
  77. }
  78. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  79. abort ();
  80. }
  81. void
  82. test5 (long j1, long k1, long j2, long k2)
  83. {
  84. long i, e = 0, c = 0;
  85. #pragma omp parallel reduction (+:e,c)
  86. {
  87. #pragma omp for schedule (dynamic) ordered
  88. for (i = j1; i <= k1; ++i)
  89. {
  90. if (i < j2 || i > k2)
  91. ++e;
  92. #pragma omp ordered
  93. ++c;
  94. }
  95. #pragma omp atomic
  96. ++cnt;
  97. }
  98. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  99. abort ();
  100. }
  101. void
  102. test6 (long j1, long k1, long j2, long k2)
  103. {
  104. long i, e = 0, c = 0;
  105. #pragma omp parallel reduction (+:e,c)
  106. {
  107. #pragma omp for schedule (dynamic) ordered
  108. for (i = k1; i >= j1; --i)
  109. {
  110. if (i < j2 || i > k2)
  111. ++e;
  112. #pragma omp ordered
  113. ++c;
  114. }
  115. #pragma omp atomic
  116. ++cnt;
  117. }
  118. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  119. abort ();
  120. }
  121. void
  122. test7 (long j1, long k1, long j2, long k2)
  123. {
  124. long i, e = 0, c = 0;
  125. #pragma omp parallel reduction (+:e,c)
  126. {
  127. #pragma omp for schedule (guided) ordered
  128. for (i = j1; i <= k1; ++i)
  129. {
  130. if (i < j2 || i > k2)
  131. ++e;
  132. #pragma omp ordered
  133. ++c;
  134. }
  135. #pragma omp atomic
  136. ++cnt;
  137. }
  138. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  139. abort ();
  140. }
  141. void
  142. test8 (long j1, long k1, long j2, long k2)
  143. {
  144. long i, e = 0, c = 0;
  145. #pragma omp parallel reduction (+:e,c)
  146. {
  147. #pragma omp for schedule (guided) ordered
  148. for (i = k1; i >= j1; --i)
  149. {
  150. if (i < j2 || i > k2)
  151. ++e;
  152. #pragma omp ordered
  153. ++c;
  154. }
  155. #pragma omp atomic
  156. ++cnt;
  157. }
  158. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  159. abort ();
  160. }
  161. void
  162. test9 (long j1, long k1, long j2, long k2)
  163. {
  164. long i, e = 0, c = 0;
  165. #pragma omp parallel for reduction (+:e,c) schedule (dynamic)
  166. for (i = j1; i <= k1; ++i)
  167. {
  168. if (i < j2 || i > k2)
  169. ++e;
  170. ++c;
  171. }
  172. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  173. abort ();
  174. }
  175. void
  176. test10 (long j1, long k1, long j2, long k2)
  177. {
  178. long i, e = 0, c = 0;
  179. #pragma omp parallel for reduction (+:e,c) schedule (dynamic)
  180. for (i = k1; i >= j1; --i)
  181. {
  182. if (i < j2 || i > k2)
  183. ++e;
  184. ++c;
  185. }
  186. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  187. abort ();
  188. }
  189. void
  190. test11 (long j1, long k1, long j2, long k2)
  191. {
  192. long i, e = 0, c = 0;
  193. #pragma omp parallel for reduction (+:e,c) schedule (guided)
  194. for (i = j1; i <= k1; ++i)
  195. {
  196. if (i < j2 || i > k2)
  197. ++e;
  198. ++c;
  199. }
  200. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  201. abort ();
  202. }
  203. void
  204. test12 (long j1, long k1, long j2, long k2)
  205. {
  206. long i, e = 0, c = 0;
  207. #pragma omp parallel for reduction (+:e,c) schedule (guided)
  208. for (i = k1; i >= j1; --i)
  209. {
  210. if (i < j2 || i > k2)
  211. ++e;
  212. ++c;
  213. }
  214. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  215. abort ();
  216. }
  217. void
  218. test13 (long j1, long k1, long j2, long k2)
  219. {
  220. long i, e = 0, c = 0;
  221. #pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
  222. for (i = j1; i <= k1; ++i)
  223. {
  224. if (i < j2 || i > k2)
  225. ++e;
  226. #pragma omp ordered
  227. ++c;
  228. }
  229. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  230. abort ();
  231. }
  232. void
  233. test14 (long j1, long k1, long j2, long k2)
  234. {
  235. long i, e = 0, c = 0;
  236. #pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
  237. for (i = k1; i >= j1; --i)
  238. {
  239. if (i < j2 || i > k2)
  240. ++e;
  241. #pragma omp ordered
  242. ++c;
  243. }
  244. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  245. abort ();
  246. }
  247. void
  248. test15 (long j1, long k1, long j2, long k2)
  249. {
  250. long i, e = 0, c = 0;
  251. #pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
  252. for (i = j1; i <= k1; ++i)
  253. {
  254. if (i < j2 || i > k2)
  255. ++e;
  256. #pragma omp ordered
  257. ++c;
  258. }
  259. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  260. abort ();
  261. }
  262. void
  263. test16 (long j1, long k1, long j2, long k2)
  264. {
  265. long i, e = 0, c = 0;
  266. #pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
  267. for (i = k1; i >= j1; --i)
  268. {
  269. if (i < j2 || i > k2)
  270. ++e;
  271. #pragma omp ordered
  272. ++c;
  273. }
  274. if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
  275. abort ();
  276. }
  277. int
  278. __attribute__((noinline))
  279. test (long j1, long k1, long j2, long k2)
  280. {
  281. test1 (j1, k1, j2, k2);
  282. test2 (j1, k1, j2, k2);
  283. test3 (j1, k1, j2, k2);
  284. test4 (j1, k1, j2, k2);
  285. test5 (j1, k1, j2, k2);
  286. test6 (j1, k1, j2, k2);
  287. test7 (j1, k1, j2, k2);
  288. test8 (j1, k1, j2, k2);
  289. test9 (j1, k1, j2, k2);
  290. test10 (j1, k1, j2, k2);
  291. test11 (j1, k1, j2, k2);
  292. test12 (j1, k1, j2, k2);
  293. test13 (j1, k1, j2, k2);
  294. test14 (j1, k1, j2, k2);
  295. test15 (j1, k1, j2, k2);
  296. test16 (j1, k1, j2, k2);
  297. return cnt;
  298. }
  299. int
  300. main (void)
  301. {
  302. test (1, 5, 1, 5);
  303. test (5, 5, 5, 5);
  304. test (5, 4, 5, 4);
  305. test (5, 1, 5, 1);
  306. return 0;
  307. }