re PR tree-optimization/81529 (ICE in vectorizable_induction, at tree-vect-loop.c...
authorRichard Biener <rguenther@suse.de>
Tue, 25 Jul 2017 13:22:31 +0000 (13:22 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 25 Jul 2017 13:22:31 +0000 (13:22 +0000)
2017-07-25  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81529
* tree-vect-stmts.c (process_use): Disregard live induction PHIs
when optimizing backedge uses.

* gfortran.dg/pr81529.f90: New testcase.

From-SVN: r250517

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr81529.f90 [new file with mode: 0644]
gcc/tree-vect-stmts.c

index 5a623bd6ddc611024644c25df4bda826e959e0cd..cc4bcddda52b10a877d1dcd3d63e1889570fba29 100644 (file)
@@ -1,3 +1,9 @@
+2017-07-25  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/81529
+       * tree-vect-stmts.c (process_use): Disregard live induction PHIs
+       when optimizing backedge uses.
+
 2017-07-25  David Edelsohn  <dje.gcc@gmail.com>
 
        * dwarf2asm.c (dw2_asm_output_nstring): Encode double quote
index 433b79c39d9f133a38ad85d85218e4248d187be3..e28a732f2efd093fc973aa6ae43eac0d13e04dbe 100644 (file)
@@ -1,3 +1,8 @@
+2017-07-25  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/81529
+       * gfortran.dg/pr81529.f90: New testcase.
+
 2017-07-25  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * testsuite/gcc.target/aarch64/pr79041-2.c: Improve test.
diff --git a/gcc/testsuite/gfortran.dg/pr81529.f90 b/gcc/testsuite/gfortran.dg/pr81529.f90
new file mode 100644 (file)
index 0000000..92e3d48
--- /dev/null
@@ -0,0 +1,32 @@
+! { dg-do compile }
+! { dg-options "-std=gnu -fno-tree-scev-cprop -Ofast" }
+
+subroutine CalcCgr(C,rmax,ordgr_max)
+  integer, intent(in) :: rmax,ordgr_max
+  double complex :: Zadj(2,2), Zadj2(2,2)
+  double complex, intent(out) :: C(0:rmax,0:rmax,0:rmax)
+  double complex, allocatable :: Cexpgr(:,:,:,:)
+  double complex :: Caux
+  integer :: rmaxB,rmaxExp,r,n0,n1,n2,k,l,i,j,m,n,nn
+
+  rmaxB = 2*rmax
+  rmaxExp = rmaxB
+  allocate(Cexpgr(0:rmaxExp/2,0:rmaxExp,0:rmaxExp,0:ordgr_max))
+   
+  rloop: do r=0,rmaxExp/2
+    do n0=r,1,-1
+      do nn=r-n0,0,-1
+        do i=1,2
+          Caux = Caux - Zadj(i,l)
+        end do
+        Cexpgr(n0,0,0,0) = Caux/(2*(nn+1))
+      end do
+    end do
+    do n1=0,r
+      n2 = r-n1
+      if (r.le.rmax) then
+        C(0,n1,n2) = Cexpgr(0,n1,n2,0)
+      end if
+    end do
+  end do rloop
+end subroutine CalcCgr
index a22947d02aca84663cd972265af34e1f999a6500..8a631046cc8e82797fd7e052216e9fcd028088e6 100644 (file)
@@ -581,9 +581,11 @@ process_use (gimple *stmt, tree use, loop_vec_info loop_vinfo,
     }
   /* We are also not interested in uses on loop PHI backedges that are
      inductions.  Otherwise we'll needlessly vectorize the IV increment
-     and cause hybrid SLP for SLP inductions.  */
+     and cause hybrid SLP for SLP inductions.  Unless the PHI is live
+     of course.  */
   else if (gimple_code (stmt) == GIMPLE_PHI
           && STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_induction_def
+          && ! STMT_VINFO_LIVE_P (stmt_vinfo)
           && (PHI_ARG_DEF_FROM_EDGE (stmt, loop_latch_edge (bb->loop_father))
               == use))
     {