]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Make all defs available...
authorRichard Biener <rguenth@gcc.gnu.org>
Mon, 16 Jun 2014 08:16:01 +0000 (08:16 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 16 Jun 2014 08:16:01 +0000 (08:16 +0000)
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

gcc/ChangeLog
gcc/tree-ssa-pre.c

index 9b484e6562df2de437dadc4c634308a4ebce1233..2394901247f307b2a1060f41e8fdf68c4fdd2262 100644 (file)
@@ -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.
index b7550b9522bc88ae59edb0e7fca2b82bd91df7a0..bca95ddb9bf43eb6cc98941c15f305f0560bce1f 100644 (file)
@@ -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);