diff options
author | Richard Biener <rguenth@gcc.gnu.org> | 2014-06-16 08:16:01 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-06-16 08:16:01 +0000 |
commit | 5d5cb4d4c12b658375e64c9854b87fb3c3870d36 (patch) | |
tree | 6ee693ff5d78441c403995132d5b06ba13fe74aa | |
parent | 4e4fa3c522cea950b30b119a9efdbc10476cce64 (diff) | |
download | gcc-5d5cb4d4c12b658375e64c9854b87fb3c3870d36.zip gcc-5d5cb4d4c12b658375e64c9854b87fb3c3870d36.tar.gz gcc-5d5cb4d4c12b658375e64c9854b87fb3c3870d36.tar.bz2 |
tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Make all defs available at the end.
2014-06-16 Richard Biener <rguenther@suse.de>
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
Make all defs available at the end.
(eliminate): If we remove a PHI node schedule cfg-cleanup.
From-SVN: r211698
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 16 |
2 files changed, 18 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b484e6..2394901 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-16 Richard Biener <rguenther@suse.de> + + * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): + Make all defs available at the end. + (eliminate): If we remove a PHI node schedule cfg-cleanup. + 2014-06-18 Jakub Jelinek <jakub@redhat.com> PR plugins/45078 @@ -11,7 +17,8 @@ 2014-06-15 Jan Hubicka <hubicka@ucw.cz> - * c-family/c-common.c (handle_tls_model_attribute): Use set_decl_tls_model. + * c-family/c-common.c (handle_tls_model_attribute): Use + set_decl_tls_model. * cgraph.h (struct varpool_node): Add tls_model. * tree.c (decl_tls_model, set_decl_tls_model): New functions. * tree.h (DECL_TLS_MODEL): Update. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index b7550b9..bca95dd 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4188,7 +4188,6 @@ eliminate_dom_walker::before_dom_children (basic_block b) b->loop_father->num); } /* Don't keep sprime available. */ - eliminate_push_avail (lhs); sprime = NULL_TREE; } } @@ -4433,10 +4432,11 @@ eliminate_dom_walker::before_dom_children (basic_block b) VN_INFO (vdef)->valnum = vuse; } - /* Make the new value available - for fully redundant LHS we - continue with the next stmt above. */ - if (lhs && TREE_CODE (lhs) == SSA_NAME) - eliminate_push_avail (lhs); + /* Make new values available - for fully redundant LHS we + continue with the next stmt above and skip this. */ + def_operand_p defp; + FOR_EACH_SSA_DEF_OPERAND (defp, stmt, iter, SSA_OP_DEF) + eliminate_push_avail (DEF_FROM_PTR (defp)); } /* Replace destination PHI arguments. */ @@ -4521,7 +4521,11 @@ eliminate (bool do_pre) gsi = gsi_for_stmt (stmt); if (gimple_code (stmt) == GIMPLE_PHI) - remove_phi_node (&gsi, true); + { + remove_phi_node (&gsi, true); + /* Removing a PHI node in a block may expose a forwarder block. */ + el_todo |= TODO_cleanup_cfg; + } else { basic_block bb = gimple_bb (stmt); |