1  /* { dg-require-effective-target vect_int_mult } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define K 4 
       7  
       8  int in[2*K][K] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
       9  int out[K];
      10  int check_result[K] = {0,16,256,4096};
      11  
      12  __attribute__ ((noinline)) void 
      13  foo ()
      14  {
      15    int sum;
      16    int i, j, k;
      17  
      18    for (k = 0; k < K; k++)
      19      {
      20        sum = 1;
      21        for (j = 0; j < K; j++) 
      22  #pragma GCC unroll 0
      23          for (i = 0; i < K; i++)
      24            sum *= in[i+k][j];
      25        out[k] = sum;
      26      }
      27  }
      28  
      29  int main ()
      30  {
      31    int i, j, k;
      32  
      33    check_vect ();
      34  
      35    for (i = 0; i < 2*K; i++)
      36      for (j = 0; j < K; j++)
      37        in[i][j] = (i+2)/3;
      38  
      39    foo();
      40  
      41    for (k = 0; k < K; k++)
      42      if (out[k] != check_result[k])
      43        abort ();
      44  
      45    return 0;
      46  }
      47          
      48  /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" } } */
      49