(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
pr20122.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  short Kernshort[24] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
       7  static void VecBug(short Kernel[8][24]) __attribute__((noinline));
       8  static void VecBug2(short Kernel[8][24]) __attribute__((noinline));
       9  
      10  /* Kernel may alias Kernshort - a global array.
      11     Use versioning for aliasing.  */
      12  static void VecBug(short Kernel[8][24])
      13  {
      14    int k,i;
      15      for (k = 0; k<8; k++)
      16          for (i = 0; i<24; i++)
      17              Kernshort[i] = Kernel[k][i];
      18  }
      19  
      20  /* Vectorizable: Kernshort2 is local.  */
      21  static void VecBug2(short Kernel[8][24])
      22  {
      23    int k,i;
      24    short Kernshort2[24] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
      25      for (k = 0; k<8; k++)
      26          for (i = 0; i<24; i++)
      27              Kernshort2[i] = Kernel[k][i];
      28  
      29      for (k = 0; k<8; k++)
      30          for (i = 0; i<24; i++)
      31              if (Kernshort2[i] != Kernel[k][i])
      32                  abort ();
      33  }
      34  
      35  int main (int argc, char **argv)
      36  {
      37      check_vect ();
      38  
      39      short Kernel[8][24];
      40      int k,i;
      41  
      42      for (k = 0; k<8; k++)
      43        for (i = 0; i<24; i++)
      44  	{
      45  	  Kernel[k][i] = 0;
      46  	  /* Don't get into the game of versioning vs. peeling.  */
      47  	  __asm__ volatile ("" : : : "memory");
      48  	}
      49  
      50      VecBug(Kernel);
      51      VecBug2(Kernel);
      52  
      53      return 0;
      54  }
      55  
      56  /* The loops in VecBug and VecBug2 require versioning for alignment.  */
      57  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
      58  /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */