PR tree-optimization/81303
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / loop-interchange-6.c
blob2802836f31c3d3f623e5c85108dbb6545ce35b75
1 /* { dg-do run } */
2 /* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
4 #define M 256
5 int a[M][M], b[M][M], c[M][M], d[M][M];
6 void __attribute__((noinline))
7 matrix_mul_1 (int n)
9 for (int j = 0; j < n; j++)
10 for (int k = 0; k < n; k++)
11 for (int i = 0; i < n; i++)
12 c[i][j] = c[i][j] + a[i][k]*b[k][j];
15 void __attribute__((noinline))
16 matrix_mul_2 (int n)
18 for (int i = 0; i < n; i++)
20 for (int j = 0; j < n; j++)
22 for (int k = 0; k < n; k++)
23 d[i][j] = d[i][j] + a[i][k]*b[k][j];
25 asm volatile ("" ::: "memory");
27 asm volatile ("" ::: "memory");
31 extern void abort ();
33 static void __attribute__((noinline))
34 init (int i)
36 for (int j = 0; j < M; j++)
38 a[i][j] = i;
39 b[i][j] = j;
40 c[i][j] = 0;
41 d[i][j] = 0;
45 static int __attribute__((noinline))
46 check (int i)
48 for (int j = 0; j < M; j++)
49 if (c[i][j] != d[i][j])
50 return 0;
52 return 1;
55 int main (void)
57 for (int i = 0; i < M; ++i)
58 init (i);
60 matrix_mul_1 (M);
61 matrix_mul_2 (M);
63 for (int i = 0; i < M; ++i)
64 if (!check (i))
65 abort ();
67 return 0;
70 /* { dg-final { scan-tree-dump-times "Loop_pair<outer:., inner:.> is interchanged" 2 "linterchange" } } */