/* { dg-do run } */ | |
/* { dg-options "-O1 -ftree-loop-linear" } */ | |
extern void abort (void); | |
#define K 32 | |
int cond_array[2*K][K]; | |
int a[K][K]; | |
int out[K]; | |
int check_result[K] = {2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; | |
__attribute__ ((noinline)) void | |
foo (int c) | |
{ | |
int res, i, j, k, next; | |
for (k = 0; k < K; k++) | |
{ | |
res = 0; | |
for (j = 0; j < K; j++) | |
for (i = 0; i < K; i++) | |
{ | |
next = a[i][j]; | |
res = c > cond_array[i+k][j] ? next : res; | |
} | |
out[k] = res; | |
} | |
} | |
int main () | |
{ | |
int i, j, k; | |
for (j = 0; j < K; j++) | |
{ | |
for (i = 0; i < 2*K; i++) | |
cond_array[i][j] = i+j; | |
for (i = 0; i < K; i++) | |
a[i][j] = i+2; | |
} | |
foo(5); | |
for (k = 0; k < K; k++) | |
if (out[k] != check_result[k]) | |
abort (); | |
return 0; | |
} |