diff options
author | Richard Biener <rguenther@suse.de> | 2017-07-25 13:22:31 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-07-25 13:22:31 +0000 |
commit | e294f495894cd2d9e217565e340284b2edda4671 (patch) | |
tree | e2ee51663547264a9c5c74d4a99448f396e1d9e1 | |
parent | 7e78cfda8219a0e7d95232e15fe49cb4de620134 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr81529.f90 | 32 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 4 |
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)) { |