testsuite/libgomp.c/pr29947-2.c

Go to the documentation of this file.
00001 /* PR libgomp/29947 */
00002 
00003 /* { dg-do run } */
00004 
00005 extern void abort (void);
00006 
00007 int cnt;
00008 
00009 void
00010 test1 (long j1, long k1, long j2, long k2)
00011 {
00012   long i, e = 0, c = 0;
00013 #pragma omp parallel reduction (+:e,c)
00014   {
00015 #pragma omp for schedule (static)
00016     for (i = j1; i <= k1; ++i)
00017       {
00018     if (i < j2 || i > k2)
00019       ++e;
00020     ++c;
00021       }
00022 #pragma omp atomic
00023     ++cnt;
00024   }
00025   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00026     abort ();
00027 }
00028 
00029 void
00030 test2 (long j1, long k1, long j2, long k2)
00031 {
00032   long i, e = 0, c = 0;
00033 #pragma omp parallel reduction (+:e,c)
00034   {
00035 #pragma omp for schedule (static)
00036     for (i = k1; i >= j1; --i)
00037       {
00038     if (i < j2 || i > k2)
00039       ++e;
00040     ++c;
00041       }
00042 #pragma omp atomic
00043     ++cnt;
00044   }
00045   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00046     abort ();
00047 }
00048 
00049 void
00050 test3 (long j1, long k1, long j2, long k2)
00051 {
00052   long i, e = 0, c = 0;
00053 #pragma omp parallel reduction (+:e,c)
00054   {
00055 #pragma omp for schedule (static, 1)
00056     for (i = j1; i <= k1; ++i)
00057       {
00058     if (i < j2 || i > k2)
00059       ++e;
00060     ++c;
00061       }
00062 #pragma omp atomic
00063     ++cnt;
00064   }
00065   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00066     abort ();
00067 }
00068 
00069 void
00070 test4 (long j1, long k1, long j2, long k2)
00071 {
00072   long i, e = 0, c = 0;
00073 #pragma omp parallel reduction (+:e,c)
00074   {
00075 #pragma omp for schedule (static, 1)
00076     for (i = k1; i >= j1; --i)
00077       {
00078     if (i < j2 || i > k2)
00079       ++e;
00080     ++c;
00081       }
00082 #pragma omp atomic
00083     ++cnt;
00084   }
00085   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00086     abort ();
00087 }
00088 
00089 void
00090 test5 (long j1, long k1, long j2, long k2)
00091 {
00092   long i, e = 0, c = 0;
00093 #pragma omp parallel reduction (+:e,c)
00094   {
00095 #pragma omp for schedule (static) ordered
00096     for (i = j1; i <= k1; ++i)
00097       {
00098     if (i < j2 || i > k2)
00099       ++e;
00100 #pragma omp ordered
00101     ++c;
00102       }
00103 #pragma omp atomic
00104     ++cnt;
00105   }
00106   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00107     abort ();
00108 }
00109 
00110 void
00111 test6 (long j1, long k1, long j2, long k2)
00112 {
00113   long i, e = 0, c = 0;
00114 #pragma omp parallel reduction (+:e,c)
00115   {
00116 #pragma omp for schedule (static) ordered
00117     for (i = k1; i >= j1; --i)
00118       {
00119     if (i < j2 || i > k2)
00120       ++e;
00121 #pragma omp ordered
00122     ++c;
00123       }
00124 #pragma omp atomic
00125     ++cnt;
00126   }
00127   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00128     abort ();
00129 }
00130 
00131 void
00132 test7 (long j1, long k1, long j2, long k2)
00133 {
00134   long i, e = 0, c = 0;
00135 #pragma omp parallel reduction (+:e,c)
00136   {
00137 #pragma omp for schedule (static, 1) ordered
00138     for (i = j1; i <= k1; ++i)
00139       {
00140     if (i < j2 || i > k2)
00141       ++e;
00142 #pragma omp ordered
00143     ++c;
00144       }
00145 #pragma omp atomic
00146     ++cnt;
00147   }
00148   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00149     abort ();
00150 }
00151 
00152 void
00153 test8 (long j1, long k1, long j2, long k2)
00154 {
00155   long i, e = 0, c = 0;
00156 #pragma omp parallel reduction (+:e,c)
00157   {
00158 #pragma omp for schedule (static, 1) ordered
00159     for (i = k1; i >= j1; --i)
00160       {
00161     if (i < j2 || i > k2)
00162       ++e;
00163 #pragma omp ordered
00164     ++c;
00165       }
00166 #pragma omp atomic
00167     ++cnt;
00168   }
00169   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00170     abort ();
00171 }
00172 
00173 void
00174 test9 (long j1, long k1, long j2, long k2)
00175 {
00176   long i, e = 0, c = 0;
00177 #pragma omp parallel for reduction (+:e,c) schedule (static)
00178   for (i = j1; i <= k1; ++i)
00179     {
00180       if (i < j2 || i > k2)
00181     ++e;
00182       ++c;
00183     }
00184   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00185     abort ();
00186 }
00187 
00188 void
00189 test10 (long j1, long k1, long j2, long k2)
00190 {
00191   long i, e = 0, c = 0;
00192 #pragma omp parallel for reduction (+:e,c) schedule (static)
00193   for (i = k1; i >= j1; --i)
00194     {
00195       if (i < j2 || i > k2)
00196     ++e;
00197       ++c;
00198     }
00199   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00200     abort ();
00201 }
00202 
00203 void
00204 test11 (long j1, long k1, long j2, long k2)
00205 {
00206   long i, e = 0, c = 0;
00207 #pragma omp parallel for reduction (+:e,c) schedule (static, 1)
00208   for (i = j1; i <= k1; ++i)
00209     {
00210       if (i < j2 || i > k2)
00211     ++e;
00212       ++c;
00213     }
00214   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00215     abort ();
00216 }
00217 
00218 void
00219 test12 (long j1, long k1, long j2, long k2)
00220 {
00221   long i, e = 0, c = 0;
00222 #pragma omp parallel for reduction (+:e,c) schedule (static, 1)
00223   for (i = k1; i >= j1; --i)
00224     {
00225       if (i < j2 || i > k2)
00226     ++e;
00227       ++c;
00228     }
00229   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00230     abort ();
00231 }
00232 
00233 void
00234 test13 (long j1, long k1, long j2, long k2)
00235 {
00236   long i, e = 0, c = 0;
00237 #pragma omp parallel for reduction (+:e,c) schedule (static) ordered
00238   for (i = j1; i <= k1; ++i)
00239     {
00240       if (i < j2 || i > k2)
00241     ++e;
00242 #pragma omp ordered
00243       ++c;
00244     }
00245   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00246     abort ();
00247 }
00248 
00249 void
00250 test14 (long j1, long k1, long j2, long k2)
00251 {
00252   long i, e = 0, c = 0;
00253 #pragma omp parallel for reduction (+:e,c) schedule (static) ordered
00254   for (i = k1; i >= j1; --i)
00255     {
00256       if (i < j2 || i > k2)
00257     ++e;
00258 #pragma omp ordered
00259       ++c;
00260     }
00261   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00262     abort ();
00263 }
00264 
00265 void
00266 test15 (long j1, long k1, long j2, long k2)
00267 {
00268   long i, e = 0, c = 0;
00269 #pragma omp parallel for reduction (+:e,c) schedule (static, 1) ordered
00270   for (i = j1; i <= k1; ++i)
00271     {
00272       if (i < j2 || i > k2)
00273     ++e;
00274 #pragma omp ordered
00275       ++c;
00276     }
00277   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00278     abort ();
00279 }
00280 
00281 void
00282 test16 (long j1, long k1, long j2, long k2)
00283 {
00284   long i, e = 0, c = 0;
00285 #pragma omp parallel for reduction (+:e,c) schedule (static, 1) ordered
00286   for (i = k1; i >= j1; --i)
00287     {
00288       if (i < j2 || i > k2)
00289     ++e;
00290 #pragma omp ordered
00291       ++c;
00292     }
00293   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
00294     abort ();
00295 }
00296 
00297 int
00298 __attribute__((noinline))
00299 test (long j1, long k1, long j2, long k2)
00300 {
00301   test1 (j1, k1, j2, k2);
00302   test2 (j1, k1, j2, k2);
00303   test3 (j1, k1, j2, k2);
00304   test4 (j1, k1, j2, k2);
00305   test5 (j1, k1, j2, k2);
00306   test6 (j1, k1, j2, k2);
00307   test7 (j1, k1, j2, k2);
00308   test8 (j1, k1, j2, k2);
00309   test9 (j1, k1, j2, k2);
00310   test10 (j1, k1, j2, k2);
00311   test11 (j1, k1, j2, k2);
00312   test12 (j1, k1, j2, k2);
00313   test13 (j1, k1, j2, k2);
00314   test14 (j1, k1, j2, k2);
00315   test15 (j1, k1, j2, k2);
00316   test16 (j1, k1, j2, k2);
00317   return cnt;
00318 }
00319 
00320 int
00321 main (void)
00322 {
00323   test (1, 5, 1, 5);
00324   test (5, 5, 5, 5);
00325   test (5, 4, 5, 4);
00326   test (5, 1, 5, 1);
00327   return 0;
00328 }

Generated on Fri Apr 5 05:38:10 2013 for Libgomp by  doxygen 1.4.7