From: Daniel Berlin Date: Sat, 24 Dec 2005 04:42:48 +0000 (+0000) Subject: tree-pass.h (pass_eliminate_useless_stores): Remove. X-Git-Tag: releases/gcc-4.2.0~5163 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=097d5d18f0c4993b69e79765f3ea44d7bc1d4c53;p=thirdparty%2Fgcc.git tree-pass.h (pass_eliminate_useless_stores): Remove. 2005-12-23 Daniel Berlin * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1053920e423a..19c11a7130ee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-12-23 Daniel Berlin + + * 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 * combine.c (simplify_shift_const): Fix typo. Use, whenever diff --git a/gcc/passes.c b/gcc/passes.c index 7673c677a495..a5402fa2e001 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -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 index 6797ce521ff5..000000000000 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-eustores.c +++ /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" } } */ diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index bd1b94b516dc..ca9eab4deb82 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -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; diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 08964004d0aa..1f4692926226 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -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 */ -};