Commit e294f495 by Richard Biener Committed by Richard Biener

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
parent 7e78cfda
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> 2017-07-25 David Edelsohn <dje.gcc@gmail.com>
* dwarf2asm.c (dw2_asm_output_nstring): Encode double quote * dwarf2asm.c (dw2_asm_output_nstring): Encode double quote
......
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> 2017-07-25 Wilco Dijkstra <wdijkstr@arm.com>
* testsuite/gcc.target/aarch64/pr79041-2.c: Improve test. * testsuite/gcc.target/aarch64/pr79041-2.c: Improve test.
......
! { 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
...@@ -581,9 +581,11 @@ process_use (gimple *stmt, tree use, loop_vec_info loop_vinfo, ...@@ -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 /* We are also not interested in uses on loop PHI backedges that are
inductions. Otherwise we'll needlessly vectorize the IV increment 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 else if (gimple_code (stmt) == GIMPLE_PHI
&& STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_induction_def && 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)) && (PHI_ARG_DEF_FROM_EDGE (stmt, loop_latch_edge (bb->loop_father))
== use)) == use))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment