1 /* { dg-do run } */
2 /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all -fno-vect-cost-model" } */
3 /* Write a reduction loop to be reduced using whole vector right shift.  */
4 
5 #pragma GCC target "+nosve"
6 
7 extern void abort (void);
8 
9 unsigned char in[8] __attribute__((__aligned__(16)));
10 
11 int
main(unsigned char argc,char ** argv)12 main (unsigned char argc, char **argv)
13 {
14   unsigned char i = 0;
15   unsigned char sum = 1;
16 
17   for (i = 0; i < 8; i++)
18     in[i] = (i + i + 1) & 0xfd;
19 
20   /* Prevent constant propagation of the entire loop below.  */
21   asm volatile ("" : : : "memory");
22 
23   for (i = 0; i < 8; i++)
24     sum |= in[i];
25 
26   if (sum != 13)
27     {
28       __builtin_printf ("Failed %d\n", sum);
29       abort ();
30     }
31 
32   return 0;
33 }
34 
35 /* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" } } */
36