mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			329 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			329 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
| /* PR libgomp/29947 */
 | |
| 
 | |
| /* { dg-do run } */
 | |
| 
 | |
| extern void abort (void);
 | |
| 
 | |
| int cnt;
 | |
| 
 | |
| void
 | |
| test1 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (dynamic)
 | |
|     for (i = j1; i <= k1; ++i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test2 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (dynamic)
 | |
|     for (i = k1; i >= j1; --i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test3 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (guided)
 | |
|     for (i = j1; i <= k1; ++i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test4 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (guided)
 | |
|     for (i = k1; i >= j1; --i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test5 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (dynamic) ordered
 | |
|     for (i = j1; i <= k1; ++i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| #pragma omp ordered
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test6 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (dynamic) ordered
 | |
|     for (i = k1; i >= j1; --i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| #pragma omp ordered
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test7 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (guided) ordered
 | |
|     for (i = j1; i <= k1; ++i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| #pragma omp ordered
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test8 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel reduction (+:e,c)
 | |
|   {
 | |
| #pragma omp for schedule (guided) ordered
 | |
|     for (i = k1; i >= j1; --i)
 | |
|       {
 | |
| 	if (i < j2 || i > k2)
 | |
| 	  ++e;
 | |
| #pragma omp ordered
 | |
| 	++c;
 | |
|       }
 | |
| #pragma omp atomic
 | |
|     ++cnt;
 | |
|   }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test9 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic)
 | |
|   for (i = j1; i <= k1; ++i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test10 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic)
 | |
|   for (i = k1; i >= j1; --i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test11 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (guided)
 | |
|   for (i = j1; i <= k1; ++i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test12 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (guided)
 | |
|   for (i = k1; i >= j1; --i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test13 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
 | |
|   for (i = j1; i <= k1; ++i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
| #pragma omp ordered
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test14 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
 | |
|   for (i = k1; i >= j1; --i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
| #pragma omp ordered
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test15 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
 | |
|   for (i = j1; i <= k1; ++i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
| #pragma omp ordered
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| void
 | |
| test16 (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   long i, e = 0, c = 0;
 | |
| #pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
 | |
|   for (i = k1; i >= j1; --i)
 | |
|     {
 | |
|       if (i < j2 || i > k2)
 | |
| 	++e;
 | |
| #pragma omp ordered
 | |
|       ++c;
 | |
|     }
 | |
|   if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
 | |
|     abort ();
 | |
| }
 | |
| 
 | |
| int
 | |
| __attribute__((noinline))
 | |
| test (long j1, long k1, long j2, long k2)
 | |
| {
 | |
|   test1 (j1, k1, j2, k2);
 | |
|   test2 (j1, k1, j2, k2);
 | |
|   test3 (j1, k1, j2, k2);
 | |
|   test4 (j1, k1, j2, k2);
 | |
|   test5 (j1, k1, j2, k2);
 | |
|   test6 (j1, k1, j2, k2);
 | |
|   test7 (j1, k1, j2, k2);
 | |
|   test8 (j1, k1, j2, k2);
 | |
|   test9 (j1, k1, j2, k2);
 | |
|   test10 (j1, k1, j2, k2);
 | |
|   test11 (j1, k1, j2, k2);
 | |
|   test12 (j1, k1, j2, k2);
 | |
|   test13 (j1, k1, j2, k2);
 | |
|   test14 (j1, k1, j2, k2);
 | |
|   test15 (j1, k1, j2, k2);
 | |
|   test16 (j1, k1, j2, k2);
 | |
|   return cnt;
 | |
| }
 | |
| 
 | |
| int
 | |
| main (void)
 | |
| {
 | |
|   test (1, 5, 1, 5);
 | |
|   test (5, 5, 5, 5);
 | |
|   test (5, 4, 5, 4);
 | |
|   test (5, 1, 5, 1);
 | |
|   return 0;
 | |
| }
 |