From fa09122aa24992c512e5e9e492e36fe1f3ebffd8 Mon Sep 17 00:00:00 2001 From: irar Date: Thu, 22 Apr 2010 18:03:01 +0000 Subject: [PATCH] PR tree-optimization/43482 * tree-vect-loop.c (vect_create_epilog_for_reduction): Handle loop unrolling in update of exit phis. Fix comment. * tree-vect-slp.c (vect_analyze_slp): Check that there are at least two reduction statements in the loop before starting SLP analysis. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158650 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/tree-vect-loop.c | 14 ++++++++++---- gcc/tree-vect-slp.c | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d220bcb454..1a887732bc9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-04-22 Ira Rosen + + PR tree-optimization/43482 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Handle + loop unrolling in update of exit phis. Fix comment. + * tree-vect-slp.c (vect_analyze_slp): Check that there are at + least two reduction statements in the loop before starting SLP + analysis. + 2010-04-22 Nick Clifton * config/stormy16/stormy16-lib2.c (__ucmpsi2): Fix thinko. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e1c799dab9..65f576d8c10 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-22 Ira Rosen + + PR tree-optimization/43482 + * gcc.dg/vect/pr43842.c: New test. + 2010-04-22 Bernd Schmidt * gcc.target/i386/wmul-1.c: Add dg-require-effective-target ilp32. diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index e6e9008ea37..83b823d84bf 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -2961,7 +2961,7 @@ vect_create_epilog_for_reduction (VEC (tree, heap) *vect_defs, gimple stmt, enum vect_def_type dt = vect_unknown_def_type; int j, i; VEC (tree, heap) *scalar_results = NULL; - int group_size = 1, k, ratio; + unsigned int group_size = 1, k, ratio; VEC (tree, heap) *vec_initial_defs = NULL; VEC (gimple, heap) *phis; @@ -3439,7 +3439,8 @@ vect_finalize_reduction: v_out2 = reduce s_out3 = extract_field s_out4 = adjust_result - use */ + use + use */ /* In SLP we may have several statements in NEW_PHIS and REDUCTION_PHIS (in case that GROUP_SIZE is greater than vectorization factor). Therefore, we @@ -3447,8 +3448,13 @@ vect_finalize_reduction: (GROUP_SIZE / number of new vector stmts) scalar results correspond to the first vector stmt, etc. (RATIO is equal to (GROUP_SIZE / number of new vector stmts)). */ - ratio = group_size / VEC_length (gimple, new_phis); - gcc_assert (!(group_size % VEC_length (gimple, new_phis))); + if (group_size > VEC_length (gimple, new_phis)) + { + ratio = group_size / VEC_length (gimple, new_phis); + gcc_assert (!(group_size % VEC_length (gimple, new_phis))); + } + else + ratio = 1; for (k = 0; k < group_size; k++) { diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 99a865fee20..6949ebdf873 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -1213,7 +1213,7 @@ vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo) } /* Find SLP sequences starting from groups of reductions. */ - if (loop_vinfo && VEC_length (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo)) + if (loop_vinfo && VEC_length (gimple, LOOP_VINFO_REDUCTIONS (loop_vinfo)) > 1 && vect_analyze_slp_instance (loop_vinfo, bb_vinfo, VEC_index (gimple, reductions, 0))) ok = true; -- 2.11.0