re PR tree-optimization/33804 (ICE in vect_transform_stmt, at tree-vect-transform...
authorIra Rosen <irar@il.ibm.com>
Wed, 24 Oct 2007 09:35:00 +0000 (09:35 +0000)
committerIra Rosen <irar@gcc.gnu.org>
Wed, 24 Oct 2007 09:35:00 +0000 (09:35 +0000)
PR tree-optimization/33804
* tree-vect-transform.c (vectorizable_operation): Remove the
checks that the vectorization is worthwhile from the transformation
phase.

From-SVN: r129599

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr33804.c [new file with mode: 0644]
gcc/tree-vect-transform.c

index 5c53f62..7ace9f9 100644 (file)
@@ -1,5 +1,12 @@
 2007-10-24  Ira Rosen  <irar@il.ibm.com>
 
+       PR tree-optimization/33804
+       * tree-vect-transform.c (vectorizable_operation): Remove the
+       checks that the vectorization is worthwhile from the transformation
+       phase.
+
+2007-10-24  Ira Rosen  <irar@il.ibm.com>
+
        * tree-vect-analyze.c (vect_build_slp_tree): Return false if
        vectype cannot be determined for the scalar type.
        (vect_analyze_slp_instance): Likewise.
index f650910..72bc446 100644 (file)
@@ -1,3 +1,8 @@
+2007-10-24  Ira Rosen  <irar@il.ibm.com>
+
+       PR tree-optimization/33804
+       * gcc.dg/vect/pr33804.c: New testcase.
+
 2007-10-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR forrtran/33849
diff --git a/gcc/testsuite/gcc.dg/vect/pr33804.c b/gcc/testsuite/gcc.dg/vect/pr33804.c
new file mode 100644 (file)
index 0000000..959ac67
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+void f(unsigned char *s, unsigned char *d, int n) {
+    int i;
+    for (i = 0; i < n; i += 4) {
+        d[i + 0] += s[i + 0];
+        d[i + 1] += s[i + 1];
+        d[i + 2] += s[i + 2];
+        d[i + 3] += s[i + 3];
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect"  } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
index 81abd36..1f07605 100644 (file)
@@ -3858,18 +3858,21 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt,
     {
       if (vect_print_dump_info (REPORT_DETAILS))
        fprintf (vect_dump, "op not supported by target.");
+      /* Check only during analysis.  */
       if (GET_MODE_SIZE (vec_mode) != UNITS_PER_WORD
-          || LOOP_VINFO_VECT_FACTOR (loop_vinfo)
-            < vect_min_worthwhile_factor (code))
+          || (LOOP_VINFO_VECT_FACTOR (loop_vinfo)
+             < vect_min_worthwhile_factor (code)
+              && !vec_stmt))
         return false;
       if (vect_print_dump_info (REPORT_DETAILS))
        fprintf (vect_dump, "proceeding using word mode.");
     }
 
-  /* Worthwhile without SIMD support?  */
+  /* Worthwhile without SIMD support? Check only during analysis.  */
   if (!VECTOR_MODE_P (TYPE_MODE (vectype))
       && LOOP_VINFO_VECT_FACTOR (loop_vinfo)
-        < vect_min_worthwhile_factor (code))
+        < vect_min_worthwhile_factor (code)
+      && !vec_stmt)
     {
       if (vect_print_dump_info (REPORT_DETAILS))
        fprintf (vect_dump, "not worthwhile without SIMD support.");