(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
bb-slp-26.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define A 3
       7  #define B 4
       8  #define N 256
       9  
      10  char src[N], dst[N];
      11  
      12  void __attribute__((noinline,noclone))
      13  foo (char * __restrict__ dst, char * __restrict__ src, int h, int stride)
      14  {
      15    int i;
      16    h /= 16;
      17    for (i = 0; i < h; i++)
      18      {
      19        dst[0] += A*src[0] + src[stride];
      20        dst[1] += A*src[1] + src[1+stride];
      21        dst[2] += A*src[2] + src[2+stride];
      22        dst[3] += A*src[3] + src[3+stride];
      23        dst[4] += A*src[4] + src[4+stride];
      24        dst[5] += A*src[5] + src[5+stride];
      25        dst[6] += A*src[6] + src[6+stride];
      26        dst[7] += A*src[7] + src[7+stride];
      27        dst += 8;
      28        src += 8;
      29        asm volatile ("" ::: "memory");
      30     }
      31  }
      32  
      33  
      34  int main (void)
      35  {
      36    int i;
      37  
      38    check_vect ();
      39  
      40    for (i = 0; i < N; i++)
      41      {
      42         dst[i] = 0;
      43         src[i] = i/8;
      44      }
      45  
      46    foo (dst, src, N, 8);
      47  
      48    for (i = 0; i < N/2; i++)
      49      {
      50        if (dst[i] != A * src[i] + src[i+8])
      51          abort ();
      52      }
      53  
      54    return 0;
      55  }
      56  
      57  /* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp1" { target { vect64 && vect_hw_misalign } } } } */
      58