]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-pass.h (pass_eliminate_useless_stores): Remove.
authorDaniel Berlin <dberlin@dberlin.org>
Sat, 24 Dec 2005 04:42:48 +0000 (04:42 +0000)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Sat, 24 Dec 2005 04:42:48 +0000 (04:42 +0000)
2005-12-23  Daniel Berlin  <dberlin@dberlin.org>

* tree-pass.h (pass_eliminate_useless_stores): Remove.
* tree-ssa-pre.c (is_copy_stmt): Ditto.
(follow_copies_till_vuse): Ditto.
(do_eustore): Ditto.
(gate_eustores): Ditto.
(pass_eliminate_useless_stores): Ditto.
* passes.c (init_optimization_passes): Ditto.

From-SVN: r109034

gcc/ChangeLog
gcc/passes.c
gcc/testsuite/gcc.dg/tree-ssa/ssa-eustores.c [deleted file]
gcc/tree-pass.h
gcc/tree-ssa-pre.c

index 1053920e423afb3d749a05d3fe8a88e3c3c64a9b..19c11a7130ee9d1d416a48b7ee537733121433b0 100644 (file)
@@ -1,3 +1,13 @@
+2005-12-23  Daniel Berlin  <dberlin@dberlin.org>
+
+       * tree-pass.h (pass_eliminate_useless_stores): Remove.
+       * tree-ssa-pre.c (is_copy_stmt): Ditto.
+       (follow_copies_till_vuse): Ditto.
+       (do_eustore): Ditto.
+       (gate_eustores): Ditto.
+       (pass_eliminate_useless_stores): Ditto.
+       * passes.c (init_optimization_passes): Ditto.
+
 2005-12-23  Paolo Bonzini  <bonzini@gnu.org>
 
         * combine.c (simplify_shift_const): Fix typo.  Use, whenever
index 7673c677a495f8a1730fd899a002ea36257a57b9..a5402fa2e0016706ee45e4f9845e2aa63efec77c 100644 (file)
@@ -498,7 +498,6 @@ init_optimization_passes (void)
   NEXT_PASS (pass_return_slot);
   NEXT_PASS (pass_rename_ssa_copies);
   NEXT_PASS (pass_early_warn_uninitialized);
-  NEXT_PASS (pass_eliminate_useless_stores);
 
   /* Initial scalar cleanups.  */
   NEXT_PASS (pass_ccp);
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-eustores.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-eustores.c
deleted file mode 100644 (file)
index 6797ce5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-eustores-all" } */
-static int a;
-int foo()
-{
-  int alocal;
-  int b;
-  alocal = a;
-  b = alocal;
-  a = b;
-}
-/* We should eliminate the store back to a.  */
-/* { dg-final { scan-tree-dump-times "Eliminating useless store" 1 "eustores"} } */
-/* { dg-final { cleanup-tree-dump "eustores" } } */
index bd1b94b516dcb1e1e353274f7250a898166d6455..ca9eab4deb82ade2c483535d321d19d71e2a87e5 100644 (file)
@@ -285,7 +285,6 @@ extern struct tree_opt_pass pass_uncprop;
 extern struct tree_opt_pass pass_return_slot;
 extern struct tree_opt_pass pass_reassoc;
 extern struct tree_opt_pass pass_rebuild_cgraph_edges;
-extern struct tree_opt_pass pass_eliminate_useless_stores;
 
 /* IPA Passes */
 extern struct tree_opt_pass pass_ipa_cp;
index 08964004d0aa8fe37c005014817b55dd56bd20fb..1f469292622693489e350e8d50c0695a216992b4 100644 (file)
@@ -2928,135 +2928,3 @@ struct tree_opt_pass pass_fre =
   0                                    /* letter */
 };
 
-/* Return true if T is a copy statement between two ssa names.  */
-
-static bool
-is_copy_stmt (tree t)
-{  
-  if (!t || TREE_CODE (t) != MODIFY_EXPR)
-    return false;
-  if (TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME 
-      && TREE_CODE (TREE_OPERAND (t, 1)) == SSA_NAME)
-    return true;
-  return false;
-}
-
-/* Starting from START, walk copy statements till we hit a statement with a
-   VUSE or a non-copy statement.  */
-
-static tree 
-follow_copies_till_vuse (tree start)
-{
-  if (is_copy_stmt (start) && ZERO_SSA_OPERANDS (start, SSA_OP_VIRTUAL_USES))
-    {
-      tree rhs, defstmt;
-
-      rhs = TREE_OPERAND (start, 1);
-      defstmt = SSA_NAME_DEF_STMT (rhs);
-      return follow_copies_till_vuse (defstmt);
-    }
-  return start;
-}
-
-/* Gate and execute functions for eliminate useless stores.    
-   The goal here is to recognize the pattern *x = ... *x, and eliminate the
-   store because the value hasn't changed.  Store copy/const prop won't
-   do this because making *more* loads (IE propagating *x) is not a win, so it
-   ignores them.  
-   This pass is currently geared completely towards static variable store
-   elimination.  */
-
-static void
-do_eustores (void)
-{
-  basic_block bb;
-  /* For each basic block
-       For each statement (STMT) in the block
-         if STMT is a stores of the pattern *x = y
-           follow the chain of definitions for y, until we hit a non-copy
-          statement or a statement with a vuse. 
-            if the statement we arrive at is a vuse of the operand we killed,
-            accessed through the same memory operation, then we have a
-            useless store (because it is *x = ... = *x).  */
-         
-  FOR_EACH_BB (bb)
-    {
-      block_stmt_iterator bsi;
-
-      for (bsi = bsi_start (bb);
-          !bsi_end_p (bsi);)
-       {
-         tree stmt = bsi_stmt (bsi);
-         tree startat;
-         tree kill;      
-         tree found;
-                 
-         if (NUM_SSA_OPERANDS (stmt, SSA_OP_VMUSTDEF) != 1
-             || TREE_CODE (stmt) != MODIFY_EXPR
-             || TREE_CODE (TREE_OPERAND (stmt, 1)) != SSA_NAME)
-           {
-             bsi_next (&bsi);
-             continue;
-           }
-
-         kill = MUSTDEF_KILL (MUSTDEF_OPS (stmt)); 
-         startat = TREE_OPERAND (stmt, 1);
-         startat = SSA_NAME_DEF_STMT (startat);
-         found = follow_copies_till_vuse (startat);
-
-         if (found && TREE_CODE (found) == MODIFY_EXPR)
-           {      
-
-             /* We want exactly one virtual use, and it should match up with
-                the use being killed.  */
-
-             if (NUM_SSA_OPERANDS (found, SSA_OP_VUSE) != 1
-                 || VUSE_OP (VUSE_OPS (found)) != kill
-                 || !DECL_P (TREE_OPERAND (stmt, 0))
-                 || !operand_equal_p (TREE_OPERAND (found, 1), 
-                                      TREE_OPERAND (stmt, 0), 0))
-               {
-                 bsi_next (&bsi);
-                 continue;
-               }
-
-             if (dump_file)
-               {
-                 fprintf (dump_file, "Eliminating useless store ");
-                 print_generic_stmt (dump_file, stmt, 0);
-               }
-             mark_sym_for_renaming (TREE_OPERAND (stmt, 0));
-             bsi_remove (&bsi);
-           }
-         else
-           {
-             bsi_next (&bsi);
-             continue;
-           }
-       }
-    }
-}
-
-static bool
-gate_eustores(void)
-{
-  return flag_unit_at_a_time != 0;
-}
-
-struct tree_opt_pass pass_eliminate_useless_stores =
-{
-  "eustores",                          /* name */
-  gate_eustores,                               /* gate */
-  do_eustores,                         /* execute */
-  NULL,                                        /* sub */
-  NULL,                                        /* next */
-  0,                                   /* static_pass_number */
-  0,                           /* tv_id */
-  PROP_cfg | PROP_ssa | PROP_alias,    /* properties_required */
-  0,                                   /* properties_provided */
-  0,                                   /* properties_destroyed */
-  0,                                   /* todo_flags_start */
-  TODO_update_ssa | TODO_dump_func 
-  | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
-  0                                    /* letter */
-};