2012-08-23 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Aug 2012 11:17:29 +0000 (11:17 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Aug 2012 11:17:29 +0000 (11:17 +0000)
* tree-vect-stmts.c (vect_finish_stmt_generation): Update
virtual SSA form.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190620 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-vect-stmts.c

index 3fb5883..bec8b9e 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-23  Richard Guenther  <rguenther@suse.de>
+
+       * tree-vect-stmts.c (vect_finish_stmt_generation): Update
+       virtual SSA form.
+
 2012-08-23  Jakub Jelinek  <jakub@redhat.com>
 
        * tree.c (copy_node_stat): Clear DECL_STRUCT_FUNCTION.
index 706b0bc..ab4a26c 100644 (file)
@@ -1600,6 +1600,32 @@ vect_finish_stmt_generation (gimple stmt, gimple vec_stmt,
 
   gcc_assert (gimple_code (stmt) != GIMPLE_LABEL);
 
+  if (!gsi_end_p (*gsi)
+      && gimple_has_mem_ops (vec_stmt))
+    {
+      gimple at_stmt = gsi_stmt (*gsi);
+      tree vuse = gimple_vuse (at_stmt);
+      if (vuse && TREE_CODE (vuse) == SSA_NAME)
+       {
+         tree vdef = gimple_vdef (at_stmt);
+         gimple_set_vuse (vec_stmt, gimple_vuse (at_stmt));
+         /* If we have an SSA vuse and insert a store, update virtual
+            SSA form to avoid triggering the renamer.  Do so only
+            if we can easily see all uses - which is what almost always
+            happens with the way vectorized stmts are inserted.  */
+         if ((vdef && TREE_CODE (vdef) == SSA_NAME)
+             && ((is_gimple_assign (vec_stmt)
+                  && !is_gimple_reg (gimple_assign_lhs (vec_stmt)))
+                 || (is_gimple_call (vec_stmt)
+                     && !(gimple_call_flags (vec_stmt)
+                          & (ECF_CONST|ECF_PURE|ECF_NOVOPS)))))
+           {
+             tree new_vdef = copy_ssa_name (vuse, vec_stmt);
+             gimple_set_vdef (vec_stmt, new_vdef);
+             SET_USE (gimple_vuse_op (at_stmt), new_vdef);
+           }
+       }
+    }
   gsi_insert_before (gsi, vec_stmt, GSI_SAME_STMT);
 
   set_vinfo_for_stmt (vec_stmt, new_stmt_vec_info (vec_stmt, loop_vinfo,