diff options
author | glisse <glisse@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-08-21 09:32:21 +0000 |
---|---|---|
committer | glisse <glisse@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-08-21 09:32:21 +0000 |
commit | 258bd648e6065446a18fe099309116cf658c4421 (patch) | |
tree | 773cf046c0dfd55437a213c2c0d6c24b378ad71e /gcc/gimple-iterator.c | |
parent | 46caa32dc6684dd49fc9d0be81e57eb5a9c89067 (diff) | |
download | gcc-258bd648e6065446a18fe099309116cf658c4421.tar.gz |
2014-08-21 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/62112
gcc/
* gimple-iterator.c (gsi_replace): Return whether EH cleanup is needed.
* gimple-iterator.h (gsi_replace): Return bool.
* tree-ssa-alias.c (ref_may_alias_global_p_1): New helper, code
moved from ref_may_alias_global_p.
(ref_may_alias_global_p, refs_may_alias_p, ref_maybe_used_by_stmt_p):
New overloads.
(ref_maybe_used_by_call_p): Take ao_ref* instead of tree.
(stmt_kills_ref_p_1): Rename...
(stmt_kills_ref_p): ... to this.
* tree-ssa-alias.h (ref_may_alias_global_p, ref_maybe_used_by_stmt_p,
stmt_kills_ref_p): Declare.
* tree-ssa-dse.c (dse_possible_dead_store_p): New argument, use it.
Move the self-assignment case...
(dse_optimize_stmt): ... here. Handle builtin calls. Remove dead code.
gcc/testsuite/
* gcc.dg/tree-ssa/pr62112-1.c: New file.
* gcc.dg/tree-ssa/pr62112-2.c: Likewise.
* gcc.c-torture/execute/pr35472.c: Add noclone attribute.
* gcc.c-torture/execute/20071219-1.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@214262 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimple-iterator.c')
-rw-r--r-- | gcc/gimple-iterator.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/gimple-iterator.c b/gcc/gimple-iterator.c index ad9bb06dcfd..7077dcec0a8 100644 --- a/gcc/gimple-iterator.c +++ b/gcc/gimple-iterator.c @@ -429,15 +429,17 @@ gsi_split_seq_before (gimple_stmt_iterator *i, gimple_seq *pnew_seq) /* Replace the statement pointed-to by GSI to STMT. If UPDATE_EH_INFO is true, the exception handling information of the original statement is moved to the new statement. Assignments must only be - replaced with assignments to the same LHS. */ + replaced with assignments to the same LHS. Returns whether EH edge + cleanup is required. */ -void +bool gsi_replace (gimple_stmt_iterator *gsi, gimple stmt, bool update_eh_info) { gimple orig_stmt = gsi_stmt (*gsi); + bool require_eh_edge_purge = false; if (stmt == orig_stmt) - return; + return false; gcc_assert (!gimple_has_lhs (orig_stmt) || !gimple_has_lhs (stmt) || gimple_get_lhs (orig_stmt) == gimple_get_lhs (stmt)); @@ -448,7 +450,7 @@ gsi_replace (gimple_stmt_iterator *gsi, gimple stmt, bool update_eh_info) /* Preserve EH region information from the original statement, if requested by the caller. */ if (update_eh_info) - maybe_clean_or_replace_eh_stmt (orig_stmt, stmt); + require_eh_edge_purge = maybe_clean_or_replace_eh_stmt (orig_stmt, stmt); gimple_duplicate_stmt_histograms (cfun, stmt, cfun, orig_stmt); @@ -460,6 +462,7 @@ gsi_replace (gimple_stmt_iterator *gsi, gimple stmt, bool update_eh_info) gsi_set_stmt (gsi, stmt); gimple_set_modified (stmt, true); update_modified_stmt (stmt); + return require_eh_edge_purge; } |