aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-06-18 11:45:17 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-06-18 11:45:17 +0000
commit30866dc930e37752a9010a8b27663ccfbf76260c (patch)
tree3015c25206b2e29ed9f184938da40ddc8e57fbec
parent560c75e960fafc380191bf162a8e428a35e5fb67 (diff)
downloadgcc-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/ChangeLog16
-rw-r--r--gcc/passes.def6
-rw-r--r--gcc/testsuite/ChangeLog20
-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.exp6
-rw-r--r--gcc/tree-pass.h1
-rw-r--r--gcc/tree-ssa-copy.c20
-rw-r--r--gcc/tree-ssa-dce.c58
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 */