mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			844 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			844 B
		
	
	
	
		
			C
		
	
	
	
| #define THE_LOOP \
 | |
|   for (i = j + 1; i < n; i += 3) \
 | |
|     a[i] = i
 | |
| 
 | |
| void __attribute__((noinline, noclone))
 | |
| foo (int j, int n, int *a)
 | |
| {
 | |
| #pragma omp parallel
 | |
|   {
 | |
|     #pragma omp single
 | |
|     {
 | |
|       int i;
 | |
| #pragma omp target
 | |
| #pragma omp teams
 | |
| #pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
 | |
|       THE_LOOP;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void __attribute__((noinline, noclone))
 | |
| bar (int j, int n, int *a)
 | |
| {
 | |
|   int i;
 | |
|   THE_LOOP;
 | |
| }
 | |
| 
 | |
| int main (int argc, char **argv)
 | |
| {
 | |
|   int n = 32;
 | |
|   int *a = __builtin_malloc (sizeof (int) * n);
 | |
|   int *ref = __builtin_malloc (sizeof (int) * n);
 | |
|   int i, j = 4;
 | |
| 
 | |
|   __builtin_memset (a, 0, sizeof (int) * n);
 | |
|   __builtin_memset (ref, 0, sizeof (int) * n);
 | |
|   bar (j, n, ref);
 | |
|   foo (j, n, a);
 | |
|   for (i = 0; i < n; i ++)
 | |
|     {
 | |
|       if (a[i] != ref[i])
 | |
| 	__builtin_abort ();
 | |
|     }
 | |
|   return 0;
 | |
| }
 |