2018-01-16 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-reduc-or_2.c
blobcd1af6dc9ae84742c565b8454d375aa9bf75f83f
1 /* { dg-do run { target { whole_vector_shift || vect_logical_reduc } } } */
3 /* Write a reduction loop to be reduced using vector shifts and folded. */
5 #include "tree-vect.h"
7 #if VECTOR_BITS > 128
8 #define N (VECTOR_BITS / 8)
9 #else
10 #define N 16
11 #endif
13 extern void abort(void);
15 int
16 main (unsigned char argc, char **argv)
18 unsigned char in[N] __attribute__((aligned(16)));
19 unsigned char i = 0;
20 unsigned char sum = 1;
21 unsigned char expected = 1;
23 check_vect ();
25 for (i = 0; i < N; i++)
27 in[i] = (i + i + 1) & 0xfd;
28 asm volatile ("" ::: "memory");
31 for (i = 0; i < N; i++)
33 expected |= in[i];
34 asm volatile ("" ::: "memory");
37 for (i = 0; i < N; i++)
38 sum |= in[i];
40 if (sum != expected)
42 __builtin_printf("Failed %d\n", sum);
43 abort();
46 return 0;
49 /* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" { target { ! vect_logical_reduc } } } } */
50 /* { dg-final { scan-tree-dump "Reduce using direct vector reduction" "vect" { target vect_logical_reduc } } } */