1  /* Disabling epilogues until we find a better way to deal with scans.  */
       2  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
       3  /* { dg-require-effective-target vect_int } */
       4  
       5  #include <stdarg.h>
       6  #include "tree-vect.h"
       7  
       8  #define N 32
       9  
      10  int ia[8][5][N+2];
      11  int ic[16][16][5][N+2];
      12  
      13  __attribute__ ((noinline))
      14  int main1 ()
      15  {
      16    int i, j;
      17  
      18    /* Multidimensional array. Aligned. */
      19    for (i = 0; i < 16; i++)
      20      {
      21        for (j = 0; j < N; j++)
      22          {
      23             ia[2][6][j] = 5;
      24          }
      25      }
      26  
      27    /* check results: */  
      28    for (i = 0; i < 16; i++)
      29      {
      30        for (j = 0; j < N; j++)
      31          {
      32             if (ia[2][6][j] != 5)
      33                  abort();
      34          }
      35      }
      36    /* Multidimensional array. Aligned. */
      37    for (i = 0; i < 16; i++)
      38      {
      39        for (j = 0; j < N; j++)
      40             ia[3][6][j+2] = 5;
      41      }
      42  
      43    /* check results: */  
      44    for (i = 0; i < 16; i++)
      45      {
      46        for (j = 2; j < N+2; j++)
      47          {
      48             if (ia[3][6][j] != 5)
      49                  abort();
      50          }
      51      }
      52  
      53    /* Multidimensional array. Not aligned. */
      54    for (i = 0; i < 16; i++)
      55      {
      56        for (j = 0; j < N; j++)
      57          {
      58             ic[2][1][6][j+1] = 5;
      59          }
      60      }
      61  
      62    /* check results: */  
      63    for (i = 0; i < 16; i++)
      64      {
      65        for (j = 0; j < N; j++)
      66          {
      67             if (ic[2][1][6][j+1] != 5)
      68                  abort();
      69          }
      70      }
      71  
      72    return 0;
      73  }
      74  
      75  int main (void)
      76  { 
      77    check_vect ();
      78  
      79    return main1 ();
      80  }
      81  
      82  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
      83  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
      84  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { {! vect_aligned_arrays} && {vect_sizes_32B_16B} } } } } */
      85  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {vect_aligned_arrays} && {! vect_sizes_32B_16B} } } } } */