/* { dg-require-effective-target vect_int } */
/* { dg-add-options bind_pic_locally } */

#include <stdarg.h>
#include "tree-vect.h"

#define N 16
#define M 4

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}}};
int ia[M][M][N];
int ic[N];

__attribute__ ((noinline))
int main1 ()
{
  int i, j;

  /* Multidimensional array. Aligned. The "inner" dimensions
     are invariant in the inner loop. Load and store. */
  for (i = 0; i < M; i++)
    {
      for (j = 0; j < N; j++)
        {
           ia[i][1][j] = ib[2][i][j];
        }
    }

  /* check results: */  
  for (i = 0; i < M; i++)
    {
      for (j = 0; j < N; j++)
        {
           if (ia[i][1][j] != ib[2][i][j])
              abort();
        }
    }

  /* Multidimensional array. Aligned. The "inner" dimensions
     are invariant in the inner loop. Load. */
  for (i = 0; i < M; i++)
    {
      for (j = 0; j < N; j++)
        {
           ic[j] = ib[2][i][j];
        }
    }

  /* check results: */
  for (i = 0; i < M; i++)
    {
      for (j = 0; j < N; j++)
        {
           if (ic[j] != ib[2][i][j])
              abort();
        }
    }

  return 0;
}

int main (void)
{ 
  check_vect ();

  return main1 ();
}

/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
