aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rosen <ira.rosen@linaro.org>2011-08-09 06:02:00 +0000
committerIra Rosen <irar@gcc.gnu.org>2011-08-09 06:02:00 +0000
commit1684ca6b9baa0353d246613531f4e3ffccb969c8 (patch)
tree417132f64ec3fbca165b1cbb0855b5243a51f449
parent4869704e215be941d5d50652350fc1b564407935 (diff)
downloadgcc-1684ca6b9baa0353d246613531f4e3ffccb969c8.zip
gcc-1684ca6b9baa0353d246613531f4e3ffccb969c8.tar.gz
gcc-1684ca6b9baa0353d246613531f4e3ffccb969c8.tar.bz2
re PR tree-optimization/50014 (Assertion failed in vect_get_vec_def_for_stmt_copy)
PR tree-optimization/50014 * tree-vect-loop.c (vectorizable_reduction): Get def type before calling vect_get_vec_def_for_stmt_copy (). From-SVN: r177581
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr50014.c16
-rw-r--r--gcc/tree-vect-loop.c16
4 files changed, 38 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b9fb29..d7d2cd7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-09 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/50014
+ * tree-vect-loop.c (vectorizable_reduction): Get def type before
+ calling vect_get_vec_def_for_stmt_copy ().
+
2011-08-08 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/49990
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 347975d..4883602 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-09 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/50014
+ * gcc.dg/vect/pr50014.c: New test.
+
2011-08-08 Martin Jambor <mjambor@suse.cz>
PR middle-end/49923
diff --git a/gcc/testsuite/gcc.dg/vect/pr50014.c b/gcc/testsuite/gcc.dg/vect/pr50014.c
new file mode 100644
index 0000000..c04ffec
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr50014.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+int f(unsigned char *s, int n)
+{
+ int sum = 0;
+ int i;
+
+ for (i = 0; i < n; i++)
+ sum += 256 * s[i];
+
+ return sum;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index afd03f2..539bcaa 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -4318,7 +4318,7 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
VEC (tree, heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL, *vect_defs = NULL;
VEC (gimple, heap) *phis = NULL;
int vec_num;
- tree def0, def1, tem;
+ tree def0, def1, tem, op0, op1 = NULL_TREE;
/* In case of reduction chain we switch to the first stmt in the chain, but
we don't update STMT_INFO, since only the last stmt is marked as reduction
@@ -4775,8 +4775,6 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
/* Handle uses. */
if (j == 0)
{
- tree op0, op1 = NULL_TREE;
-
op0 = ops[!reduc_index];
if (op_type == ternary_op)
{
@@ -4806,11 +4804,19 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
{
if (!slp_node)
{
- enum vect_def_type dt = vect_unknown_def_type; /* Dummy */
- loop_vec_def0 = vect_get_vec_def_for_stmt_copy (dt, loop_vec_def0);
+ enum vect_def_type dt;
+ gimple dummy_stmt;
+ tree dummy;
+
+ vect_is_simple_use (ops[!reduc_index], loop_vinfo, NULL,
+ &dummy_stmt, &dummy, &dt);
+ loop_vec_def0 = vect_get_vec_def_for_stmt_copy (dt,
+ loop_vec_def0);
VEC_replace (tree, vec_oprnds0, 0, loop_vec_def0);
if (op_type == ternary_op)
{
+ vect_is_simple_use (op1, loop_vinfo, NULL, &dummy_stmt,
+ &dummy, &dt);
loop_vec_def1 = vect_get_vec_def_for_stmt_copy (dt,
loop_vec_def1);
VEC_replace (tree, vec_oprnds1, 0, loop_vec_def1);