mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-11 03:52:59 +00:00
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;
|
|
}
|