OSDN Git Service

PR tree-optimization/43482
authorirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Apr 2010 18:03:01 +0000 (18:03 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:35:07 +0000 (14:35 +0900)
* 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
gcc/testsuite/ChangeLog
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c

index 6d220bc..1a88773 100644 (file)
@@ -1,3 +1,12 @@
+2010-04-22 Ira Rosen <irar@il.ibm.com>
+
+       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  <nickc@redhat.com>
 
        * config/stormy16/stormy16-lib2.c (__ucmpsi2): Fix thinko.
index 7e1c799..65f576d 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-22 Ira Rosen <irar@il.ibm.com>
+
+       PR tree-optimization/43482
+       * gcc.dg/vect/pr43842.c: New test.
+
 2010-04-22  Bernd Schmidt  <bernds@codesourcery.com>
 
        * gcc.target/i386/wmul-1.c: Add dg-require-effective-target ilp32.
index e6e9008..83b823d 100644 (file)
@@ -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 <v_out1>
           s_out3 = extract_field <v_out2, 0>
           s_out4 = adjust_result <s_out3>
-          use <s_out4>  */
+          use <s_out4>  
+          use <s_out4> */
 
   /* 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++)
     {
index 99a865f..6949ebd 100644 (file)
@@ -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;