1/* { dg-do run } */
2/* { dg-options "-O3 -mavx" } */
3/* { dg-require-effective-target avx_runtime } */
4
5extern void abort (void);
6double ad[1024];
7float af[1024];
8short as[1024];
9int ai[1024];
10long long all[1024];
11unsigned short aus[1024];
12unsigned int au[1024];
13unsigned long long aull[1024];
14
15#define F(var) \
16__attribute__((noinline, noclone)) __typeof (var[0]) \
17f##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; \
24}
25
26#define TESTS \
27F (ad) F (af) F (as) F (ai) F (all) F (aus) F (au) F (aull)
28
29TESTS
30
31int
32main ()
33{
34  int i;
35  for (i = 0; i < 1024; i++)
36    {
37#undef F
38#define F(var) var[i] = i;
39      TESTS
40    }
41  for (i = 1023; i < 32 * 1024; i += 1024 + 271)
42    {
43#undef F
44#define F(var) var[i & 1023] = i; if (f##var () != i) abort ();
45      TESTS
46    }
47  return 0;
48}
49