Hi,
this testcase tests that we are about to bound number of iterations of
for (k = 3; k < NA_1; k++)
for (i = 3; i < MA_1; i++)
for (j = 3; j < MB_1; j++)
{
t = T[i][j];
T[i][j] = t+2+A[i][k]*B[j][k];
}
based on
#define MB 100
#define NA 450
#define MA 400
int T[MA][MB],A[MA][NA],B[MB][NA];
Well, we used to be able to, but by bug. The problem is that we are not able
to hoist
the loop headers prior the loop and thus we do not have perfect nest and we do
not know
if the body is always executed on an iteration of the outer loops.
This patch fixes the testcase by hoisting by hand.
I would bet I saw loop-ch.c patch doing this, but I do not see it in mainline?
Comitted.
Honza
*** pr499602.c 2012-11-05 12:18:21.771215185 +0100
--- pr49960.c 2012-11-05 12:17:43.696420662 +0100
***************
*** 11,16 ****
--- 11,21 ----
{
int i,j, t,k;
+ /* At the moment we are not able to hoist the loop headers out of the loop
+ nest. */
+ if (MA_1 < 4 || NA_1 < 4 || MB_1 < 4)
+ return;
+
/* The outer most loop is not parallel because for different k's there
is write-write dependency for T[i][j]. */