diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b5ae15e141b..125a29cabee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-04-29 Richard Guenther + + PR tree-optimization/36078 + * tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely): + Update virtual SSA form after cleaning up the CFG. + 2008-04-29 Richard Guenther PR middle-end/15255 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dd8b3aee01c..c12d3823cc3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-04-29 Richard Guenther + + PR tree-optimization/36078 + * gfortran.fortran-torture/compile/pr36078.f90: New testcase. + 2008-04-29 Richard Guenther PR middle-end/15255 diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr36078.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr36078.f90 new file mode 100644 index 00000000000..b7f0aa3c3b0 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr36078.f90 @@ -0,0 +1,22 @@ + subroutine foo(func,p,eval) + real(kind=kind(1.0d0)), dimension(3,0:4,0:4,0:4) :: p + logical(kind=kind(.true.)), dimension(5,5,5) :: eval + interface + subroutine func(values,pt) + real(kind=kind(1.0d0)), dimension(:), intent(out) :: values + real(kind=kind(1.0d0)), dimension(:,:), intent(in) :: pt + end subroutine + end interface + real(kind=kind(1.0d0)), dimension(125,3) :: pt + integer(kind=kind(1)) :: n_pt + + n_pt = 1 + pt(1:n_pt,:) = & + reshape( & + pack( & + transpose(reshape(p,(/3,125/))), & + spread(reshape(eval,(/125/)),dim=2,ncopies=3)), & + (/n_pt,3/)) + + end subroutine + end diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index 1472b0d237d..67af0b374d6 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -366,7 +366,8 @@ tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer) /* This will take care of removing completely unrolled loops from the loop structures so we can continue unrolling now innermost loops. */ - cleanup_tree_cfg (); + if (cleanup_tree_cfg ()) + update_ssa (TODO_update_ssa_only_virtuals); /* Clean up the information about numbers of iterations, since complete unrolling might have invalidated it. */