aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-im.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-08-01 11:48:04 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-08-01 11:48:04 +0000
commit137143106086c762d05037b4d420c1eaf8fe6fbc (patch)
tree103b768984c681c0e66bf0bd7b06f89dbdc9cce1 /gcc/tree-ssa-loop-im.c
parentd04aacfc87503addc886a6a0ee9e69d73ffc280f (diff)
downloadgcc-137143106086c762d05037b4d420c1eaf8fe6fbc.zip
gcc-137143106086c762d05037b4d420c1eaf8fe6fbc.tar.gz
gcc-137143106086c762d05037b4d420c1eaf8fe6fbc.tar.bz2
tree-flow.h (struct gimple_df): Remove syms_to_rename member, add ssa_renaming_needed and rename_vops flags.
2012-08-01 Richard Guenther <rguenther@suse.de> * tree-flow.h (struct gimple_df): Remove syms_to_rename member, add ssa_renaming_needed and rename_vops flags. (SYMS_TO_RENAME): Remove. (symbol_marked_for_renaming): Likewise. (mark_virtual_ops_for_renaming): Likewise. * tree-into-ssa.c (symbols_to_rename_set, symbols_to_rename): New globals. (mark_for_renaming, marked_for_renaming): New functions. (symbol_marked_for_renaming): Remove. (dump_currdefs): Adjust. (maybe_replace_use): Likewise. (maybe_replace_use_in_debug_stmt): Likewise. (maybe_register_def): Likewise. (rewrite_update_phi_arguments): Likewise. (rewrite_update_enter_block): Likewise. (fini_ssa_renamer): Clear update SSA status here ... (delete_update_ssa): ... not here. Free rename set. (prepare_block_for_update): Compute which decls need renaming. (dump_update_ssa): Adjust. (mark_sym_for_renaming): Adjust update SSA status for virtuals. (need_ssa_update_p): Adjust. (insert_updated_phi_nodes_for): Likewise. (update_ssa): Likewise. * tree-ssa-operands.c (finalize_ssa_defs): Adjust update SSA status for virtual and real operands. (finalize_ssa_uses): Likewise. * tree-ssanames.c (init_ssanames): Adjust. * tree-ssa.c (maybe_rewrite_mem_ref_base, maybe_optimize_var, execute_update_addresses_taken): Add bitmap to keep track of which candidates are suitable for rewriting and later renaming by SSA update. * matrix-reorg.c (transform_access_sites): Do not rename all defs. * tree-dfa.c (make_rename_temp): Do not mark real operands for renaming. * cgraphunit.c (assemble_thunk): Likewise. * gimplify.c (gimple_regimplify_operands): Likewise. (force_gimple_operand_1): Likewise. * ipa-prop.c (ipa_modify_formal_parameters): Likewise. * tree-inline.c (declare_return_variable): Likewise. * tree-parloops.c (separate_decls_in_region_stmt): Do not call mark_virtual_ops_for_renaming. (create_stores_for_reduction): Likewise. (create_loads_and_stores_for_name): Likewise. * tree-predcom.c (mark_virtual_ops_for_renaming): Remove. (initialize_root_vars_lm): Do not call mark_virtual_ops_for_renaming. (execute_load_motion): Likewise. (remove_stmt): Likewise. (execute_pred_commoning_chain): Likewise. * tree-sra.c (create_access_replacement): Do not rename real operands. (get_unrenamed_access_replacement): Unify with ... (get_access_replacement): ... this. (get_repl_default_def_ssa_name): Adjust. * tree-ssa-loop-im.c (move_computations_stmt): Manually update virtual SSA form. (rewrite_mem_ref_loc): Do not call mark_virtual_ops_for_renaming. * tree-ssa-loop-prefetch.c (emit_mfence_after_loop): Likewise. From-SVN: r190033
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
-rw-r--r--gcc/tree-ssa-loop-im.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 541b8c2..558df40 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -1291,6 +1291,8 @@ move_computations_stmt (struct dom_walk_data *dw_data,
for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); )
{
+ edge e;
+
stmt = gsi_stmt (bsi);
lim_data = get_lim_data (stmt);
@@ -1323,9 +1325,26 @@ move_computations_stmt (struct dom_walk_data *dw_data,
cost, level->num);
}
- mark_virtual_ops_for_renaming (stmt);
+ e = loop_preheader_edge (level);
+ gcc_assert (!gimple_vdef (stmt));
+ if (gimple_vuse (stmt))
+ {
+ /* The new VUSE is the one from the virtual PHI in the loop
+ header or the one already present. */
+ gimple_stmt_iterator gsi2;
+ for (gsi2 = gsi_start_phis (e->dest);
+ !gsi_end_p (gsi2); gsi_next (&gsi2))
+ {
+ gimple phi = gsi_stmt (gsi2);
+ if (!is_gimple_reg (gimple_phi_result (phi)))
+ {
+ gimple_set_vuse (stmt, PHI_ARG_DEF_FROM_EDGE (phi, e));
+ break;
+ }
+ }
+ }
gsi_remove (&bsi, false);
- gsi_insert_on_edge (loop_preheader_edge (level), stmt);
+ gsi_insert_on_edge (e, stmt);
}
}
@@ -1783,7 +1802,6 @@ mem_refs_may_alias_p (tree mem1, tree mem2, struct pointer_map_t **ttae_cache)
static void
rewrite_mem_ref_loc (mem_ref_loc_p loc, tree tmp_var)
{
- mark_virtual_ops_for_renaming (loc->stmt);
*loc->ref = tmp_var;
update_stmt (loc->stmt);
}