(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-double-reduc-6-big-array.c
       1  /* { dg-require-effective-target vect_int_mult } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define K 16
       7  
       8  int in[2*K][K] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
       9  int out[K];
      10  int check_result[K];
      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          for (i = 0; i < K; i++)
      23  	{
      24            sum *= in[i+k][j];
      25  	  asm volatile ("" ::: "memory");
      26  	}
      27        check_result[k] = sum;
      28      }
      29  
      30    for (k = 0; k < K; k++)
      31      {
      32        sum = 1;
      33        for (j = 0; j < K; j++)
      34          for (i = 0; i < K; i++)
      35            sum *= in[i+k][j];
      36        out[k] = sum;
      37      }
      38  }
      39  
      40  int main ()
      41  {
      42    int i, j, k;
      43  
      44    check_vect ();
      45  
      46    for (i = 0; i < 2*K; i++)
      47      for (j = 0; j < K; j++)
      48        in[i][j] = (i+2)/3;
      49  
      50    foo ();
      51  
      52    for (k = 0; k < K; k++)
      53      if (out[k] != check_result[k])
      54        abort ();
      55  
      56    return 0;
      57  }
      58  
      59  /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" } } */
      60