re PR tree-optimization/34591 (internal compiler error: in cost_for_stmt, at tree...
authorDorit Nuzman <dorit@il.ibm.com>
Thu, 27 Dec 2007 19:14:17 +0000 (19:14 +0000)
committerDorit Nuzman <dorit@gcc.gnu.org>
Thu, 27 Dec 2007 19:14:17 +0000 (19:14 +0000)
        PR tree-optimization/34591
        * tree-vect-trasnform.c (vect_estimate_min_profitable_iters): Skip
        stmts (including reduction stmts) that are not live.

From-SVN: r131206

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

index 996e71584f8399c2a45c8d2ba1b78a0c8b92c9c4..8f4a3cf954b504b7ac5e947f81b2c772af71ac67 100644 (file)
@@ -1,3 +1,9 @@
+2007-12-27  Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/34591
+       * tree-vect-trasnform.c (vect_estimate_min_profitable_iters): Skip
+       stmts (including reduction stmts) that are not live.
+
 2007-12-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/34281
index dd87ad99b7e6337b454378ba3268b877ced7f0ac..207325a911325f32feb0593705304cb2d66aa3d3 100644 (file)
@@ -1,3 +1,8 @@
+2007-12-27  Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/34591
+       * gcc.dg/vect/pr34591.c: New test.
+
 2007-12-27  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR libfortran/34594
diff --git a/gcc/testsuite/gcc.dg/vect/pr34591.c b/gcc/testsuite/gcc.dg/vect/pr34591.c
new file mode 100644 (file)
index 0000000..1f02544
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+int av_resample(int filter_length, short *src, short *filter)
+{
+    int i;
+    int val=0;
+    for(i=0; i<filter_length; i++)
+      val += src[ i ] * filter[i];
+    return val;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
index 6fe1d63aae670b333d0dfc63e3143b4d0b67cef6..352939f03b24179ead2bc79f4711fcf11d93e8d7 100644 (file)
@@ -202,7 +202,8 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo)
          stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
          /* Skip stmts that are not vectorized inside the loop.  */
          if (!STMT_VINFO_RELEVANT_P (stmt_info)
-             && STMT_VINFO_DEF_TYPE (stmt_info) != vect_reduction_def)
+             && (!STMT_VINFO_LIVE_P (stmt_info)
+                 || STMT_VINFO_DEF_TYPE (stmt_info) != vect_reduction_def))
            continue;
          scalar_single_iter_cost += cost_for_stmt (stmt) * factor;
          vec_inside_cost += STMT_VINFO_INSIDE_OF_LOOP_COST (stmt_info) * factor;