1 /* { dg-do run } */ 2 /* { dg-options "-O3 -mavx" } */ 3 /* { dg-require-effective-target avx_runtime } */ 4 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]; 14 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; \ 24 } 25 26 #define TESTS \ 27 F (ad) F (af) F (as) F (ai) F (all) F (aus) F (au) F (aull) 28 29 TESTS 30 31 int main()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