2015-12-10 Vladimir Makarov <vmakarov@redhat.com>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx-reduc-1.c
blob1df1ee032cd3be9ad8020b16da48b7f75210b6a4
1 /* { dg-do run } */
2 /* { dg-options "-O3 -mavx" } */
3 /* { dg-require-effective-target avx_runtime } */
5 extern void abort (void);
6 double ad[1024];
7 float af[1024];
8 short as[1024];
9 int ai[1024];
10 long long all[1024];
11 unsigned short aus[1024];
12 unsigned int au[1024];
13 unsigned long long aull[1024];
15 #define F(var) \
16 __attribute__((noinline, noclone)) __typeof (var[0]) \
17 f##var (void) \
18 { \
19 int i; \
20 __typeof (var[0]) r = 0; \
21 for (i = 0; i < 1024; i++) \
22 r = r > var[i] ? r : var[i]; \
23 return r; \
26 #define TESTS \
27 F (ad) F (af) F (as) F (ai) F (all) F (aus) F (au) F (aull)
29 TESTS
31 int
32 main ()
34 int i;
35 for (i = 0; i < 1024; i++)
37 #undef F
38 #define F(var) var[i] = i;
39 TESTS
41 for (i = 1023; i < 32 * 1024; i += 1024 + 271)
43 #undef F
44 #define F(var) var[i & 1023] = i; if (f##var () != i) abort ();
45 TESTS
47 return 0;