aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenth@gcc.gnu.org>2014-06-16 08:16:01 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-06-16 08:16:01 +0000
commit5d5cb4d4c12b658375e64c9854b87fb3c3870d36 (patch)
tree6ee693ff5d78441c403995132d5b06ba13fe74aa
parent4e4fa3c522cea950b30b119a9efdbc10476cce64 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/tree-ssa-pre.c16
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);