From b324a248eeec17750278f9a7f77b77141cfb119f Mon Sep 17 00:00:00 2001 From: rguenth Date: Thu, 23 Aug 2012 11:17:29 +0000 Subject: [PATCH] 2012-08-23 Richard Guenther * 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 | 5 +++++ gcc/tree-vect-stmts.c | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3fb5883..bec8b9e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-08-23 Richard Guenther + + * tree-vect-stmts.c (vect_finish_stmt_generation): Update + virtual SSA form. + 2012-08-23 Jakub Jelinek * tree.c (copy_node_stat): Clear DECL_STRUCT_FUNCTION. diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 706b0bc..ab4a26c 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -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, -- 2.7.4