aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-02-19 10:14:33 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-02-19 10:14:33 +0100
commit47cc28f568eff9f93ad63ca2cb730b865232f441 (patch)
tree686b8fed7c73913c1f14dac6b8015d579d29103e
parenta475fd3dcbdbe5def1461111710ce6ab17e7d918 (diff)
downloadgcc-47cc28f568eff9f93ad63ca2cb730b865232f441.zip
gcc-47cc28f568eff9f93ad63ca2cb730b865232f441.tar.gz
gcc-47cc28f568eff9f93ad63ca2cb730b865232f441.tar.bz2
re PR tree-optimization/56350 (ICE in vectorizable_reduction, at tree-vect-loop.c:4731)
PR tree-optimization/56350 * tree-vect-loop.c (vectorizable_reduction): If orig_stmt, return false if haven't found reduction or nested cycle operand, rather than asserting we must find it. * gcc.dg/pr56350.c: New test. From-SVN: r196134
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/pr56350.c13
-rw-r--r--gcc/tree-vect-loop.c19
4 files changed, 34 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8848264..b4036f2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2013-02-19 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/56350
+ * tree-vect-loop.c (vectorizable_reduction): If orig_stmt, return false
+ if haven't found reduction or nested cycle operand, rather than
+ asserting we must find it.
+
PR tree-optimization/56381
* tree-ssa-pre.c (create_expression_by_pieces): Fix up last argument
to fold_build3.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1828629..94a237b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2013-02-19 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/56350
+ * gcc.dg/pr56350.c: New test.
+
PR tree-optimization/56381
* g++.dg/opt/pr56381.C: New test.
diff --git a/gcc/testsuite/gcc.dg/pr56350.c b/gcc/testsuite/gcc.dg/pr56350.c
new file mode 100644
index 0000000..899a507
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr56350.c
@@ -0,0 +1,13 @@
+/* PR tree-optimization/56350 */
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-vectorize" } */
+
+int a, b, c;
+
+void
+f (void)
+{
+ for (; c; c++)
+ for (b = 0; b < 2; b++)
+ a /= 8;
+}
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index a2f9013..3693cd2 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -4707,7 +4707,7 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
The last use is the reduction variable. In case of nested cycle this
assumption is not true: we use reduc_index to record the index of the
reduction variable. */
- for (i = 0; i < op_type-1; i++)
+ for (i = 0; i < op_type - 1; i++)
{
/* The condition of COND_EXPR is checked in vectorizable_condition(). */
if (i == 0 && code == COND_EXPR)
@@ -4739,11 +4739,18 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
if (!vectype_in)
vectype_in = tem;
gcc_assert (is_simple_use);
- gcc_assert (dt == vect_reduction_def
- || dt == vect_nested_cycle
- || ((dt == vect_internal_def || dt == vect_external_def
- || dt == vect_constant_def || dt == vect_induction_def)
- && nested_cycle && found_nested_cycle_def));
+ if (!(dt == vect_reduction_def
+ || dt == vect_nested_cycle
+ || ((dt == vect_internal_def || dt == vect_external_def
+ || dt == vect_constant_def || dt == vect_induction_def)
+ && nested_cycle && found_nested_cycle_def)))
+ {
+ /* For pattern recognized stmts, orig_stmt might be a reduction,
+ but some helper statements for the pattern might not, or
+ might be COND_EXPRs with reduction uses in the condition. */
+ gcc_assert (orig_stmt);
+ return false;
+ }
if (!found_nested_cycle_def)
reduc_def_stmt = def_stmt;