From: Richard Biener Date: Wed, 17 Jun 2015 07:37:40 +0000 (+0000) Subject: revert: [multiple changes] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c689ce1eaa200a05e10bee5131b64a05d506fa13;p=gcc.git revert: [multiple changes] 2015-06-17 Richard Biener PR tree-optimization/66251 * tree-vect-stmts.c (vectorizable_store): Fix gathering of vectorized stmts for SLP strided stores. * gfortran.fortran-torture/compile/pr66251-2.f90: New testcase. Revert 2015-05-22 Richard Biener PR tree-optimization/66251 * tree-vect-stmts.c (vectorizable_conversion): Properly set STMT_VINFO_VEC_STMT even for the SLP case. 2015-05-26 Michael Matz PR middle-end/66251 * tree-vect-stmts.c (vect_create_vectorized_demotion_stmts): Always set STMT_VINFO_VEC_STMT, also with SLP. From-SVN: r224545 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf557c765a2..5bb885b280a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,22 @@ +2015-06-17 Richard Biener + + PR tree-optimization/66251 + * tree-vect-stmts.c (vectorizable_store): Fix gathering of vectorized + stmts for SLP strided stores. + + Revert + 2015-05-22 Richard Biener + + PR tree-optimization/66251 + * tree-vect-stmts.c (vectorizable_conversion): Properly + set STMT_VINFO_VEC_STMT even for the SLP case. + + 2015-05-26 Michael Matz + + PR middle-end/66251 + * tree-vect-stmts.c (vect_create_vectorized_demotion_stmts): Always set + STMT_VINFO_VEC_STMT, also with SLP. + 2015-06-16 Uros Bizjak PR target/56766 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 76870d374f6..b5470032db5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-17 Richard Biener + + PR tree-optimization/66251 + * gfortran.fortran-torture/compile/pr66251-2.f90: New testcase. + 2015-06-16 Paolo Carlini PR c++/59682 diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr66251-2.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr66251-2.f90 new file mode 100644 index 00000000000..8eb8aa33bb9 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr66251-2.f90 @@ -0,0 +1,23 @@ +subroutine mv(m,nc,irp,ja,val,x,ldx,y,ldy,acc) + use iso_fortran_env + implicit none + + integer, parameter :: ipk_ = int32 + integer, parameter :: spk_ = real32 + complex(spk_), parameter :: czero=(0.0_spk_,0.0_spk_) + + integer(ipk_), intent(in) :: m,ldx,ldy,nc,irp(*),ja(*) + complex(spk_), intent(in) :: x(ldx,*),val(*) + complex(spk_), intent(inout) :: y(ldy,*) + complex(spk_), intent(inout) :: acc(*) + integer(ipk_) :: i,j,k, ir, jc + + do i=1,m + acc(1:nc) = czero + do j=irp(i), irp(i+1)-1 + acc(1:nc) = acc(1:nc) + val(j) * x(ja(j),1:nc) + enddo + y(i,1:nc) = -acc(1:nc) + end do + +end subroutine mv diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 12829de3d15..99e25f88f91 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3370,13 +3370,15 @@ vect_create_vectorized_demotion_stmts (vec *vec_oprnds, (or in STMT_VINFO_RELATED_STMT chain). */ if (slp_node) SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt); - - if (!*prev_stmt_info) - STMT_VINFO_VEC_STMT (stmt_info) = new_stmt; else - STMT_VINFO_RELATED_STMT (*prev_stmt_info) = new_stmt; + { + if (!*prev_stmt_info) + STMT_VINFO_VEC_STMT (stmt_info) = new_stmt; + else + STMT_VINFO_RELATED_STMT (*prev_stmt_info) = new_stmt; - *prev_stmt_info = vinfo_for_stmt (new_stmt); + *prev_stmt_info = vinfo_for_stmt (new_stmt); + } } } @@ -3955,12 +3957,14 @@ vectorizable_conversion (gimple stmt, gimple_stmt_iterator *gsi, if (slp_node) SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt); - - if (!prev_stmt_info) - STMT_VINFO_VEC_STMT (stmt_info) = new_stmt; else - STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt; - prev_stmt_info = vinfo_for_stmt (new_stmt); + { + if (!prev_stmt_info) + STMT_VINFO_VEC_STMT (stmt_info) = new_stmt; + else + STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt; + prev_stmt_info = vinfo_for_stmt (new_stmt); + } } } @@ -5327,9 +5331,23 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, /* We've set op and dt above, from gimple_assign_rhs1(stmt), and first_stmt == stmt. */ if (j == 0) - vec_oprnd = vect_get_vec_def_for_operand (op, first_stmt, NULL); + { + if (slp) + { + vect_get_vec_defs (op, NULL_TREE, stmt, &vec_oprnds, NULL, + slp_node, -1); + vec_oprnd = vec_oprnds[0]; + } + else + vec_oprnd = vect_get_vec_def_for_operand (op, first_stmt, NULL); + } else - vec_oprnd = vect_get_vec_def_for_stmt_copy (dt, vec_oprnd); + { + if (slp) + vec_oprnd = vec_oprnds[j]; + else + vec_oprnd = vect_get_vec_def_for_stmt_copy (dt, vec_oprnd); + } for (i = 0; i < nstores; i++) { @@ -5359,7 +5377,7 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, vect_finish_stmt_generation (stmt, incr, gsi); running_off = newoff; - if (j == 0 && i == i) + if (j == 0 && i == 0) STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = assign; else STMT_VINFO_RELATED_STMT (prev_stmt_info) = assign;