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-*-* } } */
7 int a
[M
][M
], b
[M
][M
], c
[M
][M
], d
[M
][M
];
8 void __attribute__((noinline
))
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
))
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");
35 static void __attribute__((noinline
))
38 for (int j
= 0; j
< M
; j
++)
47 static int __attribute__((noinline
))
50 for (int j
= 0; j
< M
; j
++)
51 if (c
[i
][j
] != d
[i
][j
])
59 for (int i
= 0; i
< M
; ++i
)
65 for (int i
= 0; i
< M
; ++i
)
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" } } */