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
This commit is contained in:
Richard Biener 2014-06-18 11:45:17 +00:00 committed by Richard Biener
parent 560c75e960
commit 30866dc930
8 changed files with 63 additions and 69 deletions

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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" } } */

View File

@ -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"

View File

@ -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);

View File

@ -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

View File

@ -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;
}
@ -1490,19 +1495,6 @@ tree_ssa_dce (void)
return perform_tree_ssa_dce (/*aggressive=*/false);
}
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)
{
@ -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 */