1 /* { dg-do run } */
2 /* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
3 /* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
4 
5 #define M 256
6 int a[M][M], b[M][M];
7 int __attribute__((noinline))
double_reduc(int n)8 double_reduc (int n)
9 {
10   int sum = 0;
11   for (int j = 0; j < n; j++)
12     {
13       for (int i = 0; i < n; i++)
14 	sum = sum + a[i][j]*b[i][j];
15     }
16   return sum;
17 }
18 
19 extern void abort ();
20 
21 static void __attribute__((noinline))
init(int i)22 init (int i)
23 {
24   for (int j = 0; j < M; j++)
25     {
26       a[i][j] = i;
27       b[i][j] = j;
28     }
29 }
30 
main(void)31 int main (void)
32 {
33   for (int i = 0; i < M; ++i)
34     init (i);
35 
36   int sum = double_reduc (M);
37 
38   if (sum != 1065369600)
39     abort ();
40 
41   return 0;
42 }
43 
44 /* { dg-final { scan-tree-dump-times "Loop_pair<outer:., inner:.> is interchanged" 1 "linterchange" } } */
45