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