mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			156 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Exercise nested function decomposition, gcc/tree-nested.c.  */
 | |
| 
 | |
| int
 | |
| main (void)
 | |
| {
 | |
|   int p1 = 2, p2 = 6, p3 = 0, p4 = 4, p5 = 13, p6 = 18, p7 = 1, p8 = 1, p9 = 1;
 | |
| 
 | |
|   void test1 ()
 | |
|   {
 | |
|     int i, j, k;
 | |
|     int a[4][4][4];
 | |
| 
 | |
|     __builtin_memset (a, '\0', sizeof (a));
 | |
| 
 | |
| #pragma acc parallel
 | |
| #pragma acc loop collapse(3)
 | |
|     for (i = 1; i <= 3; i++)
 | |
|       for (j = 1; j <= 3; j++)
 | |
| 	for (k = 2; k <= 3; k++)
 | |
| 	  a[i][j][k] = 1;
 | |
| 
 | |
|     for (i = 1; i <= 3; i++)
 | |
|       for (j = 1; j <= 3; j++)
 | |
| 	for (k = 2; k <= 3; k++)
 | |
| 	  if (a[i][j][k] != 1)
 | |
| 	    __builtin_abort();
 | |
|   }
 | |
| 
 | |
|   void test2 (int v1, int v2, int v3, int v4, int v5, int v6)
 | |
|   {
 | |
|     int i, j, k, l = 0, r = 0;
 | |
|     int a[7][5][19];
 | |
|     int b[7][5][19];
 | |
| 
 | |
|     __builtin_memset (a, '\0', sizeof (a));
 | |
|     __builtin_memset (b, '\0', sizeof (b));
 | |
| 
 | |
| #pragma acc parallel reduction (||:l)
 | |
| #pragma acc loop reduction (||:l) collapse(3)
 | |
|     for (i = v1; i <= v2; i++)
 | |
|       for (j = v3; j <= v4; j++)
 | |
| 	for (k = v5; k <= v6; k++)
 | |
| 	  {
 | |
| 	    l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
 | |
| 	    if (!l)
 | |
| 	      a[i][j][k] += 1;
 | |
| 	  }
 | |
| 
 | |
|     for (i = v1; i <= v2; i++)
 | |
|       for (j = v3; j <= v4; j++)
 | |
| 	for (k = v5; k <= v6; k++)
 | |
| 	  {
 | |
| 	    r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
 | |
| 	    if (!r)
 | |
| 	      b[i][j][k] += 1;
 | |
| 	  }
 | |
| 
 | |
|     if (l != r)
 | |
|       __builtin_abort ();
 | |
| 
 | |
|     for (i = v1; i <= v2; i++)
 | |
|       for (j = v3; j <= v4; j++)
 | |
| 	for (k = v5; k <= v6; k++)
 | |
| 	  if (b[i][j][k] != a[i][j][k])
 | |
| 	    __builtin_abort ();
 | |
|   }
 | |
| 
 | |
|   void test3 (int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8,
 | |
|       int v9)
 | |
|   {
 | |
|     int i, j, k, l = 0, r = 0;
 | |
|     int a[7][5][19];
 | |
|     int b[7][5][19];
 | |
| 
 | |
|     __builtin_memset (a, '\0', sizeof (a));
 | |
|     __builtin_memset (b, '\0', sizeof (b));
 | |
| 
 | |
| #pragma acc parallel reduction (||:l)
 | |
| #pragma acc loop reduction (||:l) collapse(3)
 | |
|     for (i = v1; i <= v2; i += v7)
 | |
|       for (j = v3; j <= v4; j += v8)
 | |
| 	for (k = v5; k <= v6; k += v9)
 | |
| 	  {
 | |
| 	    l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
 | |
| 	    if (!l)
 | |
| 	      a[i][j][k] += 1;
 | |
| 	  }
 | |
| 
 | |
|     for (i = v1; i <= v2; i += v7)
 | |
|       for (j = v3; j <= v4; j += v8)
 | |
| 	for (k = v5; k <= v6; k += v9)
 | |
| 	  {
 | |
| 	    r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
 | |
| 	    if (!r)
 | |
| 	      b[i][j][k] += 1;
 | |
| 	  }
 | |
| 
 | |
|     if (l != r)
 | |
|       __builtin_abort ();
 | |
| 
 | |
|     for (i = v1; i <= v2; i++)
 | |
|       for (j = v3; j <= v4; j++)
 | |
| 	for (k = v5; k <= v6; k++)
 | |
| 	  if (b[i][j][k] != a[i][j][k])
 | |
| 	    __builtin_abort ();
 | |
|   }
 | |
| 
 | |
|   void test4 ()
 | |
|   {
 | |
|     int i, j, k, l = 0, r = 0;
 | |
|     int a[7][5][19];
 | |
|     int b[7][5][19];
 | |
|     int v1 = p1, v2 = p2, v3 = p3, v4 = p4, v5 = p5, v6 = p6, v7 = p7, v8 = p8,
 | |
|       v9 = p9;
 | |
| 
 | |
|     __builtin_memset (a, '\0', sizeof (a));
 | |
|     __builtin_memset (b, '\0', sizeof (b));
 | |
| 
 | |
| #pragma acc parallel reduction (||:l)
 | |
| #pragma acc loop reduction (||:l) collapse(3)
 | |
|     for (i = v1; i <= v2; i += v7)
 | |
|       for (j = v3; j <= v4; j += v8)
 | |
| 	for (k = v5; k <= v6; k += v9)
 | |
| 	  {
 | |
| 	    l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
 | |
| 	    if (!l)
 | |
| 	      a[i][j][k] += 1;
 | |
| 	  }
 | |
| 
 | |
|     for (i = v1; i <= v2; i += v7)
 | |
|       for (j = v3; j <= v4; j += v8)
 | |
| 	for (k = v5; k <= v6; k += v9)
 | |
| 	  {
 | |
| 	    r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
 | |
| 	    if (!r)
 | |
| 	      b[i][j][k] += 1;
 | |
| 	  }
 | |
| 
 | |
|     if (l != r)
 | |
|       __builtin_abort ();
 | |
| 
 | |
|     for (i = v1; i <= v2; i++)
 | |
|       for (j = v3; j <= v4; j++)
 | |
| 	for (k = v5; k <= v6; k++)
 | |
| 	  if (b[i][j][k] != a[i][j][k])
 | |
| 	    __builtin_abort ();
 | |
|   }
 | |
| 
 | |
|   test1 ();
 | |
|   test2 (p1, p2, p3, p4, p5, p6);
 | |
|   test3 (p1, p2, p3, p4, p5, p6, p7, p8, p9);
 | |
|   test4 ();
 | |
| 
 | |
|   return 0;
 | |
| }
 |