aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-07-25 13:22:31 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-07-25 13:22:31 +0000
commite294f495894cd2d9e217565e340284b2edda4671 (patch)
treee2ee51663547264a9c5c74d4a99448f396e1d9e1 /gcc
parent7e78cfda8219a0e7d95232e15fe49cb4de620134 (diff)
downloadgcc-e294f495894cd2d9e217565e340284b2edda4671.zip
gcc-e294f495894cd2d9e217565e340284b2edda4671.tar.gz
gcc-e294f495894cd2d9e217565e340284b2edda4671.tar.bz2
re PR tree-optimization/81529 (ICE in vectorizable_induction, at tree-vect-loop.c:6613)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr81529.f9032
-rw-r--r--gcc/tree-vect-stmts.c4
4 files changed, 46 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5a623bd..cc4bcdd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 433b79c..e28a732 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..92e3d48
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr81529.f90
@@ -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
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index a22947d..8a63104 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -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))
{