(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-reduc-sad.c
       1  /* { dg-require-effective-target vect_usad_char } */
       2  
       3  #include "tree-vect.h"
       4  
       5  typedef unsigned short uint16_t;
       6  typedef unsigned char uint8_t;
       7  
       8  extern int abs (int);
       9  extern void abort (void);
      10  
      11  int __attribute__((noinline,noclone))
      12  foo (uint8_t *pix1, uint8_t *pix2, int i_stride_pix2)
      13  {
      14    int i_sum = 5;
      15    for( int y = 0; y < 16; y++ )
      16      {
      17        i_sum += abs ( pix1[0] - pix2[0] );
      18        i_sum += abs ( pix1[1] - pix2[1] );
      19        i_sum += abs ( pix1[2] - pix2[2] );
      20        i_sum += abs ( pix1[3] - pix2[3] );
      21        i_sum += abs ( pix1[4] - pix2[4] );
      22        i_sum += abs ( pix1[5] - pix2[5] );
      23        i_sum += abs ( pix1[6] - pix2[6] );
      24        i_sum += abs ( pix1[7] - pix2[7] );
      25        i_sum += abs ( pix1[8] - pix2[8] );
      26        i_sum += abs ( pix1[9] - pix2[9] );
      27        i_sum += abs ( pix1[10] - pix2[10] );
      28        i_sum += abs ( pix1[11] - pix2[11] );
      29        i_sum += abs ( pix1[12] - pix2[12] );
      30        i_sum += abs ( pix1[13] - pix2[13] );
      31        i_sum += abs ( pix1[14] - pix2[14] );
      32        i_sum += abs ( pix1[15] - pix2[15] );
      33        pix1 += 16;
      34        pix2 += i_stride_pix2;
      35      }
      36    return i_sum; 
      37  }
      38  
      39  int
      40  main ()
      41  {
      42    check_vect ();
      43  
      44    uint8_t X[16*16];
      45    uint8_t Y[16*16];
      46  
      47    for (int i = 0; i < 16*16; ++i)
      48      {
      49        X[i] = i;
      50        Y[i] = 16*16 - i;
      51        __asm__ volatile ("");
      52      }
      53  
      54    if (foo (X, Y, 16) != 32512 + 5)
      55      abort ();
      56  
      57    return 0;
      58  }
      59  
      60  /* { dg-final { scan-tree-dump "sad pattern recognized" "vect" } } */
      61  /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" } } */
      62  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */