re PR tree-optimization/31041 (verify_stmts failed: invalid operand to binary operato...
authorDorit Nuzman <dorit@il.ibm.com>
Sat, 17 Mar 2007 14:43:30 +0000 (14:43 +0000)
committerDorit Nuzman <dorit@gcc.gnu.org>
Sat, 17 Mar 2007 14:43:30 +0000 (14:43 +0000)
        PR tree-optimization/31041
        * tree-vect-transform.c (get_initial_def_for_induction): Call
        force_gimple_operand.

From-SVN: r123023

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

index a6beced..e7c89c0 100644 (file)
@@ -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
index 560fab9..478aa77 100644 (file)
@@ -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 (file)
index 0000000..e2b0b63
--- /dev/null
@@ -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" } } */
index 6938841..bddea1e 100644 (file)
@@ -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);