1  /* Disabling epilogues until we find a better way to deal with scans.  */
       2  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
       3  /* { dg-require-effective-target vect_int } */
       4  
       5  #include <stdarg.h>
       6  #include "tree-vect.h"
       7  
       8  #define N 128
       9  signed char data_ch[N];
      10  
      11  __attribute__ ((noinline)) int
      12  foo ()
      13  {
      14    int i;
      15    signed int intsum = 0;
      16    signed int check_intsum = 0;
      17  
      18    for (i = 0; i < N; i++)
      19      {
      20        data_ch[i] = i*2;
      21        check_intsum += data_ch[i];
      22        asm volatile ("" ::: "memory");
      23      }
      24  
      25    /* widenning sum: sum chars into int.  */
      26    for (i = 0; i < N; i++)
      27      {
      28        intsum += data_ch[i];
      29      }
      30  
      31    /* check results:  */
      32    if (intsum != check_intsum)
      33      abort ();
      34  
      35    return 0;
      36  }
      37  
      38  int
      39  main (void)
      40  {
      41    check_vect ();
      42    return foo ();
      43  }
      44  
      45  /* { dg-final { scan-tree-dump-times "vect_recog_widen_sum_pattern: detected" 1 "vect" } } */
      46  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_widen_sum_qi_to_si && vect_unpack } } } } */
      47  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { { ! vect_widen_sum_qi_to_si } && { ! vect_unpack } } } } } */