OSDN Git Service

2008-04-29 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 Apr 2008 16:01:36 +0000 (16:01 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 Apr 2008 16:01:36 +0000 (16:01 +0000)
PR tree-optimization/36078
* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely):
Update virtual SSA form after cleaning up the CFG.

* gfortran.fortran-torture/compile/pr36078.f90: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134799 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.fortran-torture/compile/pr36078.f90 [new file with mode: 0644]
gcc/tree-ssa-loop-ivcanon.c

index b5ae15e..125a29c 100644 (file)
@@ -1,5 +1,11 @@
 2008-04-29  Richard Guenther  <rguenther@suse.de>
 
+       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  <rguenther@suse.de>
+
        PR middle-end/15255
        * fold-const.c (fold_binary): Fold (A + A) * C to A * 2*C.
 
index dd8b3ae..c12d382 100644 (file)
@@ -1,5 +1,10 @@
 2008-04-29  Richard Guenther  <rguenther@suse.de>
 
+       PR tree-optimization/36078
+       * gfortran.fortran-torture/compile/pr36078.f90: New testcase.
+
+2008-04-29  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/15255
        * gcc.dg/fold-plusmult.c: New testcase.
 
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr36078.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr36078.f90
new file mode 100644 (file)
index 0000000..b7f0aa3
--- /dev/null
@@ -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 
index 1472b0d..67af0b3 100644 (file)
@@ -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.  */