http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54967



--- Comment #7 from Jan Hubicka <hubicka at gcc dot gnu.org> 2012-10-19 
12:50:57 UTC ---

OK,

the problem is that unloop is shuffling a basic block out of the outer loop:

   DO m=1,6

after unrolling the inner loop:

       DO j=1,2

12 times.



So here are several problems

1) I need to work out what to do when unloop moves basic blocks out of the loop

and why it happens in this case

2) array bound is based on array access

  n_29 = n_5 + 1;

  _45 = (integer(kind=8)) n_29;

  _58 = _45 + -1;

  c_map_mat[_58] = m_1;

and it is 12 instead of 2 because we lose track of the fact that the array is 2

dimensional with known bounds.

Somehow we should keep track of this.

3) tree-ssa-loop-niter ought to take into account known bounds on IV variables

of the outer loop when computing the inner loop.



Honza

Reply via email to