(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-perm-12.c
       1  /* { dg-require-effective-target vect_int } */
       2  /* { dg-require-effective-target vect_pack_trunc } */
       3  /* { dg-additional-options "-msse4" { target { i?86-*-* x86_64-*-* } } } */
       4  
       5  #include "tree-vect.h"
       6  
       7  extern void abort (void);
       8  
       9  unsigned char a[64];
      10  short b[88];
      11  
      12  void __attribute__((noinline))
      13  test(unsigned char * __restrict__ dst, short * __restrict__ tptr)
      14  {
      15    int i;
      16    for (i = 0; i < 8; i++)
      17      {
      18        dst[0] = (tptr[0] - tptr[0 + 3]);
      19        dst[1] = (tptr[1] - tptr[1 + 3]);
      20        dst[2] = (tptr[2] - tptr[2 + 3]);
      21        dst[3] = (tptr[3] - tptr[3 + 3]);
      22        dst[4] = (tptr[4] - tptr[4 + 3]);
      23        dst[5] = (tptr[5] - tptr[5 + 3]);
      24        dst[6] = (tptr[6] - tptr[6 + 3]);
      25        dst[7] = (tptr[7] - tptr[7 + 3]);
      26        dst += 8;
      27        tptr += 11;
      28      }
      29  }
      30  
      31  int main()
      32  {
      33    int i;
      34  
      35    check_vect ();
      36  
      37    for (i = 0; i < 88; ++i)
      38      {
      39        b[i] = i;
      40        __asm__ volatile ("");
      41      }
      42  
      43    test (a, b);
      44  
      45    for (i = 0; i < 64; ++i)
      46      if (a[i] != 253)
      47        abort ();
      48  
      49    return 0;
      50  }
      51  
      52  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */