(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-reduc-8.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include "tree-vect.h"
       4  
       5  static int a[512], b[512];
       6  
       7  void __attribute__((noinline,noclone))
       8  foo (int *sum1p, int *sum2p, int *sum3p)
       9  {
      10    int sum1 = 0;
      11    int sum2 = 0;
      12    int sum3 = 0;
      13    /* Check that we vectorize a reduction chain and a SLP reduction
      14       at the same time.  */
      15    for (int i = 0; i < 256; ++i)
      16      {
      17        sum1 += a[2*i];
      18        sum1 += a[2*i + 1];
      19        sum2 += b[2*i];
      20        sum3 += b[2*i + 1];
      21      }
      22    *sum1p = sum1;
      23    *sum2p = sum2;
      24    *sum3p = sum3;
      25  }
      26  
      27  int main()
      28  {
      29    check_vect ();
      30  
      31    for (int i = 0; i < 256; ++i)
      32      {
      33        a[2*i] = i;
      34        a[2*i + 1] = i/2;
      35        b[2*i] = i + 1;
      36        b[2*i + 1] = i/2 + 1;
      37        __asm__ volatile ("" : : : "memory");
      38      }
      39    int sum1, sum2, sum3;
      40    foo (&sum1, &sum2, &sum3);
      41    if (sum1 != 48896 || sum2 != 32896 || sum3 != 16512)
      42      abort ();
      43  
      44    return 0;
      45  }
      46  
      47  /* { dg-final { scan-tree-dump "Loop contains only SLP stmts" "vect" } } */
      48  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */