1 /* { dg-require-effective-target size32plus } */ 2 /* { dg-require-effective-target run_expensive_tests } PR testsuite/48283 */ 3 4 #define DEBUG 0 5 #if DEBUG 6 #include <stdio.h> 7 #endif 8 9 #define N 200 10 11 int A[N][N], B[N][N], C[N][N]; 12 13 static void __attribute__((noinline)) matmult(void)14matmult (void) 15 { 16 int i, j, k; 17 18 for (i = 0; i < N; i++) 19 for (j = 0; j < N; j++) 20 A[i][j] = 0; 21 22 /* This should be blocked. */ 23 for (i = 0; i < N; i++) 24 for (j = 0; j < N; j++) 25 for (k = 0; k < N; k++) 26 A[i][j] += B[i][k] * C[k][j]; 27 } 28 29 extern void abort (); 30 31 int main(void)32main (void) 33 { 34 int i, j, res = 0; 35 36 for (i = 0; i < N; i++) 37 for (j = 0; j < N; j++) 38 { 39 B[i][j] = j; 40 C[i][j] = i; 41 } 42 43 matmult (); 44 45 for (i = 0; i < N; i++) 46 res += A[i][i]; 47 48 #if DEBUG 49 fprintf (stderr, "res = %d \n", res); 50 #endif 51 52 if (res != 529340000) 53 abort (); 54 55 return 0; 56 } 57 58 /* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" } } */ 59 /* { dg-final { cleanup-tree-dump "graphite" } } */ 60