mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
| extern void abort (void);
 | |
| int a[16], b[16], c[16], d[5][2];
 | |
| 
 | |
| __attribute__((noinline, noclone)) void
 | |
| foo (int x, int y)
 | |
| {
 | |
|   int i;
 | |
|   #pragma omp for schedule (static, 1) reduction (+:a[:3])
 | |
|   for (i = 0; i < 64; i++)
 | |
|     {
 | |
|       a[0] += i;
 | |
|       a[1] += 2 * i;
 | |
|       a[2] += 3 * i;
 | |
|     }
 | |
|   #pragma omp for schedule (guided) reduction (+:b[4:3])
 | |
|   for (i = 0; i < 64; i++)
 | |
|     {
 | |
|       b[4] += i;
 | |
|       b[5] += 2 * i;
 | |
|       b[6] += 3 * i;
 | |
|     }
 | |
|   #pragma omp for schedule (static) reduction (+:c[x:4])
 | |
|   for (i = 0; i < 64; i++)
 | |
|     {
 | |
|       c[9] += i;
 | |
|       c[10] += 2 * i;
 | |
|       c[11] += 3 * i;
 | |
|       c[12] += 4 * i;
 | |
|     }
 | |
|   #pragma omp for reduction (+:d[x - 8:2][y:])
 | |
|   for (i = 0; i < 64; i++)
 | |
|     {
 | |
|       d[1][0] += i;
 | |
|       d[1][1] += 2 * i;
 | |
|       d[2][0] += 3 * i;
 | |
|       d[2][1] += 4 * i;
 | |
|     }
 | |
| }
 | |
| 
 | |
| int
 | |
| main ()
 | |
| {
 | |
|   int i;
 | |
|   #pragma omp parallel
 | |
|   foo (9, 0);
 | |
|   for (i = 0; i < 16; i++)
 | |
|     if (a[i] != (i < 3 ? 64 * 63 / 2 * (i + 1) : 0)
 | |
| 	|| b[i] != ((i >= 4 && i < 7) ? 64 * 63 / 2 * (i - 3) : 0)
 | |
| 	|| c[i] != ((i >= 9 && i < 13) ? 64 * 63 / 2 * (i - 8) : 0))
 | |
|       abort ();
 | |
|   for (i = 0; i < 5; i++)
 | |
|     if (d[i][0] != ((i && i <= 2) ? 64 * 63 / 2 * (2 * i - 1) : 0)
 | |
| 	|| d[i][1] != ((i && i <= 2) ? 64 * 63 / 2 * (2 * i) : 0))
 | |
|       abort ();
 | |
|   return 0;
 | |
| }
 |