aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDorit Nuzman <dorit@il.ibm.com>2007-03-17 14:43:30 +0000
committerDorit Nuzman <dorit@gcc.gnu.org>2007-03-17 14:43:30 +0000
commitc492dc9a666e438ca8bbd2052482e8c30d8b5019 (patch)
treeccf362c05136dde7e56af2263a798328ffa1b61a
parent44d974b5d205b10a3f4636de4fa9c4a2198b3a10 (diff)
downloadgcc-c492dc9a666e438ca8bbd2052482e8c30d8b5019.zip
gcc-c492dc9a666e438ca8bbd2052482e8c30d8b5019.tar.gz
gcc-c492dc9a666e438ca8bbd2052482e8c30d8b5019.tar.bz2
re PR tree-optimization/31041 (verify_stmts failed: invalid operand to binary operator with -O2 -ftree-vectorize)
PR tree-optimization/31041 * tree-vect-transform.c (get_initial_def_for_induction): Call force_gimple_operand. From-SVN: r123023
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr31041.c27
-rw-r--r--gcc/tree-vect-transform.c16
4 files changed, 50 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a6beced..e7c89c0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-17 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/31041
+ * tree-vect-transform.c (get_initial_def_for_induction): Call
+ force_gimple_operand.
+
2007-03-17 Olga Golovanevsky <olga@il.ibm.com>
* ipa-type-escape.c (look_for_casts) : Revert code to use
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 560fab9..478aa77 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-17 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/31041
+ * gcc.dg/vect/pr31041.c: New test.
+
2007-03-16 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* g++.dg/warn/Wconversion-integer.C: New
diff --git a/gcc/testsuite/gcc.dg/vect/pr31041.c b/gcc/testsuite/gcc.dg/vect/pr31041.c
new file mode 100644
index 0000000..e2b0b63
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr31041.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+typedef int int32_t;
+struct UNewTrie
+{
+ int32_t index[(0x110000 >> 1)];
+};
+typedef struct UNewTrie UNewTrie;
+utrie_open_3_4 ()
+{
+ UNewTrie *trie;
+ int32_t i, j;
+ {
+ i = 0;
+ do
+ {
+ trie->index[i++] = j;
+ j += 1;
+ }
+ while (i < 5);
+ }
+}
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 6938841..bddea1e 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -548,6 +548,7 @@ get_initial_def_for_induction (tree stmt, tree iv_phi)
int ncopies = vf / nunits;
tree expr;
stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
+ tree stmts;
gcc_assert (phi_info);
@@ -575,16 +576,23 @@ get_initial_def_for_induction (tree stmt, tree iv_phi)
gcc_assert (ok);
/* Create the vector that holds the initial_value of the induction. */
- new_name = init_expr;
+ new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
+ add_referenced_var (new_var);
+
+ new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
+ if (stmts)
+ {
+ new_bb = bsi_insert_on_edge_immediate (pe, stmts);
+ gcc_assert (!new_bb);
+ }
+
t = NULL_TREE;
- t = tree_cons (NULL_TREE, init_expr, t);
+ t = tree_cons (NULL_TREE, new_name, t);
for (i = 1; i < nunits; i++)
{
tree tmp;
/* Create: new_name = new_name + step_expr */
- new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
- add_referenced_var (new_var);
tmp = fold_build2 (PLUS_EXPR, scalar_type, new_name, step_expr);
init_stmt = build_gimple_modify_stmt (new_var, tmp);
new_name = make_ssa_name (new_var, init_stmt);