]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-7.c
Fix profile update in tree_transform_and_unroll_loop
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / loop-interchange-7.c
CommitLineData
fbdec14e
BC
1/* { dg-do run } */
2/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
f4a14e09
JL
3/* { dg-require-effective-target size20plus } */
4/* { dg-skip-if "too big data segment" { visium-*-* } } */
fbdec14e
BC
5
6#define M 256
7int a[M][M], b[M][M], c[M][M], d[M][M];
8void __attribute__((noinline))
9matrix_mul_1 (int n)
10{
11 for (int k = 0; k < n; k++)
12 for (int j = 0; j < n; j++)
13 for (int i = 0; i < n; i++)
14 c[i][j] = c[i][j] + a[i][k]*b[k][j];
15}
16
17void __attribute__((noinline))
18matrix_mul_2 (int n)
19{
20 for (int i = 0; i < n; i++)
21 {
22 for (int j = 0; j < n; j++)
23 {
24 for (int k = 0; k < n; k++)
25 d[i][j] = d[i][j] + a[i][k]*b[k][j];
26
27 asm volatile ("" ::: "memory");
28 }
29 asm volatile ("" ::: "memory");
30 }
31}
32
33extern void abort ();
34
35static void __attribute__((noinline))
36init (int i)
37{
38 for (int j = 0; j < M; j++)
39 {
40 a[i][j] = i;
41 b[i][j] = j;
42 c[i][j] = 0;
43 d[i][j] = 0;
44 }
45}
46
47static int __attribute__((noinline))
48check (int i)
49{
50 for (int j = 0; j < M; j++)
51 if (c[i][j] != d[i][j])
52 return 0;
53
54 return 1;
55}
56
57int main (void)
58{
59 for (int i = 0; i < M; ++i)
60 init (i);
61
62 matrix_mul_1 (M);
63 matrix_mul_2 (M);
64
65 for (int i = 0; i < M; ++i)
66 if (!check (i))
67 abort ();
68
69 return 0;
70}
71
72/* { dg-final { scan-tree-dump-times "Loop_pair<outer:., inner:.> is interchanged" 2 "linterchange" } } */