00001
00002
00003
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 }