/* { dg-require-effective-target vect_int } */
|
/* { dg-require-effective-target vect_int } */
|
|
|
#include <stdarg.h>
|
#include <stdarg.h>
|
#include "tree-vect.h"
|
#include "tree-vect.h"
|
|
|
#define N 16
|
#define N 16
|
#define M 4
|
#define M 4
|
|
|
__attribute__ ((noinline))
|
__attribute__ ((noinline))
|
int main1 ()
|
int main1 ()
|
{
|
{
|
int i, j;
|
int i, j;
|
int ib[M][M][N] = {{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
int ib[M][M][N] = {{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}},
|
{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}},
|
{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}},
|
{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45},
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}}};
|
{0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}}};
|
int ia[M][M][N];
|
int ia[M][M][N];
|
int ic[N];
|
int ic[N];
|
|
|
/* Multidimensional array. Aligned. The "inner" dimensions
|
/* Multidimensional array. Aligned. The "inner" dimensions
|
are invariant in the inner loop. Load and store. */
|
are invariant in the inner loop. Load and store. */
|
for (i = 0; i < M; i++)
|
for (i = 0; i < M; i++)
|
{
|
{
|
for (j = 0; j < N; j++)
|
for (j = 0; j < N; j++)
|
{
|
{
|
ia[i][1][j] = ib[2][i][j];
|
ia[i][1][j] = ib[2][i][j];
|
}
|
}
|
}
|
}
|
|
|
/* check results: */
|
/* check results: */
|
for (i = 0; i < M; i++)
|
for (i = 0; i < M; i++)
|
{
|
{
|
for (j = 0; j < N; j++)
|
for (j = 0; j < N; j++)
|
{
|
{
|
if (ia[i][1][j] != ib[2][i][j])
|
if (ia[i][1][j] != ib[2][i][j])
|
abort();
|
abort();
|
}
|
}
|
}
|
}
|
|
|
/* Multidimensional array. Aligned. The "inner" dimensions
|
/* Multidimensional array. Aligned. The "inner" dimensions
|
are invariant in the inner loop. Load. */
|
are invariant in the inner loop. Load. */
|
for (i = 0; i < M; i++)
|
for (i = 0; i < M; i++)
|
{
|
{
|
for (j = 0; j < N; j++)
|
for (j = 0; j < N; j++)
|
{
|
{
|
ic[j] = ib[2][i][j];
|
ic[j] = ib[2][i][j];
|
}
|
}
|
}
|
}
|
|
|
/* check results: */
|
/* check results: */
|
for (i = 0; i < M; i++)
|
for (i = 0; i < M; i++)
|
{
|
{
|
for (j = 0; j < N; j++)
|
for (j = 0; j < N; j++)
|
{
|
{
|
if (ic[j] != ib[2][i][j])
|
if (ic[j] != ib[2][i][j])
|
abort();
|
abort();
|
}
|
}
|
}
|
}
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
int main (void)
|
int main (void)
|
{
|
{
|
check_vect ();
|
check_vect ();
|
|
|
return main1 ();
|
return main1 ();
|
}
|
}
|
|
|
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
|
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
|
/* { dg-final { cleanup-tree-dump "vect" } } */
|
/* { dg-final { cleanup-tree-dump "vect" } } */
|
|
|