libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / loop-interchange-5.c
blob81050a8de3301b54b9a4d01099befa0a21aade3e
1 /* { dg-do run } */
2 /* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
3 /* { dg-require-effective-target size20plus } */
4 /* { dg-skip-if "too big data segment" { visium-*-* } } */
6 #define M 256
7 int a[M][M], b[M][M], c[M][M], d[M][M];
8 void __attribute__((noinline))
9 matrix_mul_1 (int n)
11 for (int i = 0; i < n; i++)
12 for (int j = 0; j < n; j++)
13 for (int k = 0; k < n; k++)
14 c[i][j] = c[i][j] + a[i][k]*b[k][j];
17 void __attribute__((noinline))
18 matrix_mul_2 (int n)
20 for (int i = 0; i < n; i++)
22 for (int j = 0; j < n; j++)
24 for (int k = 0; k < n; k++)
25 d[i][j] = d[i][j] + a[i][k]*b[k][j];
27 asm volatile ("" ::: "memory");
29 asm volatile ("" ::: "memory");
33 extern void abort ();
35 static void __attribute__((noinline))
36 init (int i)
38 for (int j = 0; j < M; j++)
40 a[i][j] = i;
41 b[i][j] = j;
42 c[i][j] = 0;
43 d[i][j] = 0;
47 static int __attribute__((noinline))
48 check (int i)
50 for (int j = 0; j < M; j++)
51 if (c[i][j] != d[i][j])
52 return 0;
54 return 1;
57 int main (void)
59 for (int i = 0; i < M; ++i)
60 init (i);
62 matrix_mul_1 (M);
63 matrix_mul_2 (M);
65 for (int i = 0; i < M; ++i)
66 if (!check (i))
67 abort ();
69 return 0;
72 /* { dg-final { scan-tree-dump-times "Loop_pair<outer:., inner:.> is interchanged" 1 "linterchange" } } */
73 /* { dg-final { scan-tree-dump-times "Loop_pair<outer:., inner:.> is not interchanged" 1 "linterchange" } } */