(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-reduc-or_2.c
       1  /* Write a reduction loop to be reduced using vector shifts and folded.  */
       2  
       3  #include "tree-vect.h"
       4  
       5  #if VECTOR_BITS > 128
       6  #define N (VECTOR_BITS / 8)
       7  #else
       8  #define N 16
       9  #endif
      10  
      11  extern void abort(void);
      12  
      13  int
      14  main (unsigned char argc, char **argv)
      15  {
      16    unsigned char in[N] __attribute__((aligned(16)));
      17    unsigned char i = 0;
      18    unsigned char sum = 1;
      19    unsigned char expected = 1;
      20  
      21    check_vect ();
      22  
      23    for (i = 0; i < N; i++)
      24      {
      25        in[i] = (i + i + 1) & 0xfd;
      26        asm volatile ("" ::: "memory");
      27      }
      28  
      29    for (i = 0; i < N; i++)
      30      {
      31        expected |= in[i];
      32        asm volatile ("" ::: "memory");
      33      }
      34  
      35    for (i = 0; i < N; i++)
      36      sum |= in[i];
      37  
      38    if (sum != expected)
      39      {
      40        __builtin_printf("Failed %d\n", sum);
      41        abort();
      42      }
      43  
      44    return 0;
      45  }
      46  
      47  /* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" { target { whole_vector_shift && { ! vect_logical_reduc } } } } } */
      48  /* { dg-final { scan-tree-dump "Reduce using direct vector reduction" "vect" { target vect_logical_reduc } } } */