diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-08-07 12:11:43 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-08-07 12:11:43 +0000 |
commit | eb54054d68ce7a732815f0450c67f3ff76ac9ad4 (patch) | |
tree | 02e3ec579b10a719a3d7f4d2ad5c2cdc6cc883c1 /gcc/tree-into-ssa.c | |
parent | 9c06f2609ecb5c30d82d103ad5492983e3393392 (diff) | |
download | gcc-eb54054d68ce7a732815f0450c67f3ff76ac9ad4.tar.gz |
2012-08-07 Richard Guenther <rguenther@suse.de>
* tree-into-ssa.c (rewrite_stmt): Remove clobbers for variables
we rewrite into SSA form.
(rewrite_enter_block): Adjust.
* gimple-iterator.c (gsi_replace): Also allow replacement with
a stmt without a lhs.
* tree-ssa-live.c (remove_unused_locals): Remove code handling
clobbers of SSA names.
* tree-nested.c (convert_local_reference_stmt): Remove clobbers
for variables we access through the local chain.
* tree-cfg.c (verify_gimple_assign_single): Verify clobbers
clobber full decls only.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190200 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-into-ssa.c')
-rw-r--r-- | gcc/tree-into-ssa.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 1350d77abbf..74ef7f5b61d 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1323,12 +1323,12 @@ rewrite_debug_stmt_uses (gimple stmt) definition of a variable when a new real or virtual definition is found. */ static void -rewrite_stmt (gimple_stmt_iterator si) +rewrite_stmt (gimple_stmt_iterator *si) { use_operand_p use_p; def_operand_p def_p; ssa_op_iter iter; - gimple stmt = gsi_stmt (si); + gimple stmt = gsi_stmt (*si); /* If mark_def_sites decided that we don't need to rewrite this statement, ignore it. */ @@ -1362,9 +1362,24 @@ rewrite_stmt (gimple_stmt_iterator si) FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, iter, SSA_OP_ALL_DEFS) { tree var = DEF_FROM_PTR (def_p); - tree name = make_ssa_name (var, stmt); + tree name; tree tracked_var; + gcc_assert (DECL_P (var)); + + if (gimple_clobber_p (stmt) + && is_gimple_reg (var)) + { + /* If we rewrite a DECL into SSA form then drop its + clobber stmts and replace uses with a new default def. */ + gcc_assert (TREE_CODE (var) == VAR_DECL + && !gimple_vdef (stmt)); + gsi_replace (si, gimple_build_nop (), true); + register_new_def (get_or_create_ssa_default_def (cfun, var), var); + break; + } + + name = make_ssa_name (var, stmt); SET_DEF (def_p, name); register_new_def (DEF_FROM_PTR (def_p), var); @@ -1372,7 +1387,7 @@ rewrite_stmt (gimple_stmt_iterator si) if (tracked_var) { gimple note = gimple_build_debug_bind (tracked_var, name, stmt); - gsi_insert_after (&si, note, GSI_SAME_STMT); + gsi_insert_after (si, note, GSI_SAME_STMT); } } } @@ -1439,7 +1454,7 @@ rewrite_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, of a variable when a new real or virtual definition is found. */ if (TEST_BIT (interesting_blocks, bb->index)) for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) - rewrite_stmt (gsi); + rewrite_stmt (&gsi); /* Step 3. Visit all the successor blocks of BB looking for PHI nodes. For every PHI node found, add a new argument containing the current |