diff options
author | Dorit Nuzman <dorit@il.ibm.com> | 2007-03-17 14:43:30 +0000 |
---|---|---|
committer | Dorit Nuzman <dorit@gcc.gnu.org> | 2007-03-17 14:43:30 +0000 |
commit | c492dc9a666e438ca8bbd2052482e8c30d8b5019 (patch) | |
tree | ccf362c05136dde7e56af2263a798328ffa1b61a | |
parent | 44d974b5d205b10a3f4636de4fa9c4a2198b3a10 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr31041.c | 27 | ||||
-rw-r--r-- | gcc/tree-vect-transform.c | 16 |
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); |