diff options
author | Richard Biener <rguenther@suse.de> | 2014-06-18 11:45:17 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-06-18 11:45:17 +0000 |
commit | 30866dc930e37752a9010a8b27663ccfbf76260c (patch) | |
tree | 3015c25206b2e29ed9f184938da40ddc8e57fbec | |
parent | 560c75e960fafc380191bf162a8e428a35e5fb67 (diff) | |
download | gcc-30866dc930e37752a9010a8b27663ccfbf76260c.zip gcc-30866dc930e37752a9010a8b27663ccfbf76260c.tar.gz gcc-30866dc930e37752a9010a8b27663ccfbf76260c.tar.bz2 |
tree-pass.h (make_pass_dce_loop): Remove.
2014-06-18 Richard Biener <rguenther@suse.de>
* tree-pass.h (make_pass_dce_loop): Remove.
* passes.def: Replace pass_dce_loop with pass_dce.
* tree-ssa-dce.c (perform_tree_ssa_dce): If something
changed free niter estimates and reset the scev cache.
(tree_ssa_dce_loop, pass_data_dce_loop, pass_dce_loop,
make_pass_dce_loop): Remove.
* tree-ssa-copy.c: Include tree-ssa-loop-niter.h.
(fini_copy_prop): Return whether something changed. Always
let substitute_and_fold perform DCE and free niter estimates
and reset the scev cache if so.
(execute_copy_prop): If sth changed schedule cleanup-cfg.
(pass_data_copy_prop): Do not unconditionally schedule
cleanup-cfg or update-ssa.
* gcc.dg/vect/vect.exp: Remove dump-tree-dceloop-* processing.
* gcc.dg/vect/dump-tree-dceloop-pr26359.c: Rename to ...
* gcc.dg/vect/pr26359.c: ... this and adjust appropriately.
From-SVN: r211781
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/passes.def | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr26359.c (renamed from gcc/testsuite/gcc.dg/vect/dump-tree-dceloop-pr26359.c) | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect.exp | 6 | ||||
-rw-r--r-- | gcc/tree-pass.h | 1 | ||||
-rw-r--r-- | gcc/tree-ssa-copy.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-dce.c | 58 |
8 files changed, 63 insertions, 69 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 19f33b2..b7acf34 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2014-06-18 Richard Biener <rguenther@suse.de> + + * tree-pass.h (make_pass_dce_loop): Remove. + * passes.def: Replace pass_dce_loop with pass_dce. + * tree-ssa-dce.c (perform_tree_ssa_dce): If something + changed free niter estimates and reset the scev cache. + (tree_ssa_dce_loop, pass_data_dce_loop, pass_dce_loop, + make_pass_dce_loop): Remove. + * tree-ssa-copy.c: Include tree-ssa-loop-niter.h. + (fini_copy_prop): Return whether something changed. Always + let substitute_and_fold perform DCE and free niter estimates + and reset the scev cache if so. + (execute_copy_prop): If sth changed schedule cleanup-cfg. + (pass_data_copy_prop): Do not unconditionally schedule + cleanup-cfg or update-ssa. + 2014-06-18 Yuri Rumyantsev <ysrumyan@gmail.com> PR tree-optimization/61518 diff --git a/gcc/passes.def b/gcc/passes.def index f305c60..26b30c9 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -203,7 +203,7 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_tree_loop_init); NEXT_PASS (pass_lim); NEXT_PASS (pass_copy_prop); - NEXT_PASS (pass_dce_loop); + NEXT_PASS (pass_dce); NEXT_PASS (pass_tree_unswitch); NEXT_PASS (pass_scev_cprop); NEXT_PASS (pass_record_bounds); @@ -215,7 +215,7 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_graphite_transforms); NEXT_PASS (pass_lim); NEXT_PASS (pass_copy_prop); - NEXT_PASS (pass_dce_loop); + NEXT_PASS (pass_dce); POP_INSERT_PASSES () NEXT_PASS (pass_iv_canon); NEXT_PASS (pass_parallelize_loops); @@ -224,7 +224,7 @@ along with GCC; see the file COPYING3. If not see Please do not add any other passes in between. */ NEXT_PASS (pass_vectorize); PUSH_INSERT_PASSES_WITHIN (pass_vectorize) - NEXT_PASS (pass_dce_loop); + NEXT_PASS (pass_dce); POP_INSERT_PASSES () NEXT_PASS (pass_predcom); NEXT_PASS (pass_complete_unroll); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 702fc36..52c4bef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,23 @@ +2014-06-18 Richard Biener <rguenther@suse.de> + + * tree-pass.h (make_pass_dce_loop): Remove. + * passes.def: Replace pass_dce_loop with pass_dce. + * tree-ssa-dce.c (perform_tree_ssa_dce): If something + changed free niter estimates and reset the scev cache. + (tree_ssa_dce_loop, pass_data_dce_loop, pass_dce_loop, + make_pass_dce_loop): Remove. + * tree-ssa-copy.c: Include tree-ssa-loop-niter.h. + (fini_copy_prop): Return whether something changed. Always + let substitute_and_fold perform DCE and free niter estimates + and reset the scev cache if so. + (execute_copy_prop): If sth changed schedule cleanup-cfg. + (pass_data_copy_prop): Do not unconditionally schedule + cleanup-cfg or update-ssa. + + * gcc.dg/vect/vect.exp: Remove dump-tree-dceloop-* processing. + * gcc.dg/vect/dump-tree-dceloop-pr26359.c: Rename to ... + * gcc.dg/vect/pr26359.c: ... this and adjust appropriately. + 2014-06-18 Yuri Rumyantsev <ysrumyan@gmail.com> PR tree-optimization/61518 diff --git a/gcc/testsuite/gcc.dg/vect/dump-tree-dceloop-pr26359.c b/gcc/testsuite/gcc.dg/vect/pr26359.c index ae7aea2..f4e2a37 100644 --- a/gcc/testsuite/gcc.dg/vect/dump-tree-dceloop-pr26359.c +++ b/gcc/testsuite/gcc.dg/vect/pr26359.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-fdump-tree-dce5-details" } */ int a[256], b[256], c[256]; @@ -11,6 +12,6 @@ foo () { } } -/* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dceloop3" } } */ -/* { dg-final { cleanup-tree-dump "dceloop\[1-3\]" } } */ +/* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dce5" } } */ +/* { dg-final { cleanup-tree-dump "dce" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index e8d866b..9fc8c18 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -138,12 +138,6 @@ lappend DEFAULT_VECTCFLAGS "-ftrapv" dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/trapv-*.\[cS\]]] \ "" $DEFAULT_VECTCFLAGS -# -fdump-tree-dceloop-details tests -set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS -lappend DEFAULT_VECTCFLAGS "-fdump-tree-dceloop-details" -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/dump-tree-dceloop-*.\[cS\]]] \ - "" $DEFAULT_VECTCFLAGS - # -fno-tree-dce tests set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS lappend DEFAULT_VECTCFLAGS "-fno-tree-dce" diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 3888bb6..bdaf673 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -382,7 +382,6 @@ extern gimple_opt_pass *make_pass_build_alias (gcc::context *ctxt); extern gimple_opt_pass *make_pass_build_ealias (gcc::context *ctxt); extern gimple_opt_pass *make_pass_dominator (gcc::context *ctxt); extern gimple_opt_pass *make_pass_dce (gcc::context *ctxt); -extern gimple_opt_pass *make_pass_dce_loop (gcc::context *ctxt); extern gimple_opt_pass *make_pass_cd_dce (gcc::context *ctxt); extern gimple_opt_pass *make_pass_call_cdce (gcc::context *ctxt); extern gimple_opt_pass *make_pass_merge_phi (gcc::context *ctxt); diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c index e0ed63f..1d404d2 100644 --- a/gcc/tree-ssa-copy.c +++ b/gcc/tree-ssa-copy.c @@ -45,6 +45,8 @@ along with GCC; see the file COPYING3. If not see #include "cfgloop.h" #include "tree-scalar-evolution.h" #include "tree-ssa-dom.h" +#include "tree-ssa-loop-niter.h" + /* This file implements the copy propagation pass and provides a handful of interfaces for performing const/copy propagation and @@ -542,7 +544,7 @@ get_value (tree name) /* Deallocate memory used in copy propagation and do final substitution. */ -static void +static bool fini_copy_prop (void) { unsigned i; @@ -594,10 +596,17 @@ fini_copy_prop (void) } } - /* Don't do DCE if SCEV is initialized. It would destroy the scev cache. */ - substitute_and_fold (get_value, NULL, !scev_initialized_p ()); + bool changed = substitute_and_fold (get_value, NULL, true); + if (changed) + { + free_numbers_of_iterations_estimates (); + if (scev_initialized_p ()) + scev_reset (); + } free (copy_of); + + return changed; } @@ -639,7 +648,8 @@ execute_copy_prop (void) { init_copy_prop (); ssa_propagate (copy_prop_visit_stmt, copy_prop_visit_phi_node); - fini_copy_prop (); + if (fini_copy_prop ()) + return TODO_cleanup_cfg; return 0; } @@ -656,7 +666,7 @@ const pass_data pass_data_copy_prop = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - ( TODO_cleanup_cfg | TODO_update_ssa ), /* todo_flags_finish */ + 0, /* todo_flags_finish */ }; class pass_copy_prop : public gimple_opt_pass diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index 4969b11..171d216 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -1479,7 +1479,12 @@ perform_tree_ssa_dce (bool aggressive) tree_dce_done (aggressive); if (something_changed) - return TODO_update_ssa | TODO_cleanup_cfg; + { + free_numbers_of_iterations_estimates (); + if (scev_initialized_p) + scev_reset (); + return TODO_update_ssa | TODO_cleanup_cfg; + } return 0; } @@ -1491,19 +1496,6 @@ tree_ssa_dce (void) } static unsigned int -tree_ssa_dce_loop (void) -{ - unsigned int todo; - todo = perform_tree_ssa_dce (/*aggressive=*/false); - if (todo) - { - free_numbers_of_iterations_estimates (); - scev_reset (); - } - return todo; -} - -static unsigned int tree_ssa_cd_dce (void) { return perform_tree_ssa_dce (/*aggressive=*/optimize >= 2); @@ -1549,44 +1541,6 @@ make_pass_dce (gcc::context *ctxt) namespace { -const pass_data pass_data_dce_loop = -{ - GIMPLE_PASS, /* type */ - "dceloop", /* name */ - OPTGROUP_NONE, /* optinfo_flags */ - true, /* has_execute */ - TV_TREE_DCE, /* tv_id */ - ( PROP_cfg | PROP_ssa ), /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - 0, /* todo_flags_finish */ -}; - -class pass_dce_loop : public gimple_opt_pass -{ -public: - pass_dce_loop (gcc::context *ctxt) - : gimple_opt_pass (pass_data_dce_loop, ctxt) - {} - - /* opt_pass methods: */ - opt_pass * clone () { return new pass_dce_loop (m_ctxt); } - virtual bool gate (function *) { return flag_tree_dce != 0; } - virtual unsigned int execute (function *) { return tree_ssa_dce_loop (); } - -}; // class pass_dce_loop - -} // anon namespace - -gimple_opt_pass * -make_pass_dce_loop (gcc::context *ctxt) -{ - return new pass_dce_loop (ctxt); -} - -namespace { - const pass_data pass_data_cd_dce = { GIMPLE_PASS, /* type */ |