aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2020-05-14 16:29:19 +0200
committerAldy Hernandez <aldyh@redhat.com>2020-05-15 08:50:12 +0200
commit304543d8ff80796ef7fa6afdf0ab6bffa5698c9a (patch)
tree95a6681762c374dab0503517e6676d2ea94f9c27
parentaf1295ebe16845ced1901c1dc6fb16ba33f57818 (diff)
downloadgcc-304543d8ff80796ef7fa6afdf0ab6bffa5698c9a.zip
gcc-304543d8ff80796ef7fa6afdf0ab6bffa5698c9a.tar.gz
gcc-304543d8ff80796ef7fa6afdf0ab6bffa5698c9a.tar.bz2
Run copy propagation before evrp.
-rw-r--r--gcc/passes.def5
-rw-r--r--gcc/tree-pass.h1
-rw-r--r--gcc/tree-ssa-copy.c24
3 files changed, 28 insertions, 2 deletions
diff --git a/gcc/passes.def b/gcc/passes.def
index d6ed6e4..9cbd9cf 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -84,7 +84,12 @@ along with GCC; see the file COPYING3. If not see
execute TODO_rebuild_alias at this point. */
NEXT_PASS (pass_build_ealias);
NEXT_PASS (pass_fre, true /* may_iterate */);
+
NEXT_PASS (pass_ranger_vrp, false /* allow_il_changes */);
+ /* Run copy-prop to keep evrp below from doing simple copy prop
+ and messing up our comparison and trap phase. */
+ NEXT_PASS (pass_evrp_copy_prop);
+
NEXT_PASS (pass_early_vrp);
NEXT_PASS (pass_ranger_vrp, true /* allow_il_changes */);
NEXT_PASS (pass_merge_phi);
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index e37a30d..5d92083 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -444,6 +444,7 @@ extern gimple_opt_pass *make_pass_sink_code (gcc::context *ctxt);
extern gimple_opt_pass *make_pass_fre (gcc::context *ctxt);
extern gimple_opt_pass *make_pass_check_data_deps (gcc::context *ctxt);
extern gimple_opt_pass *make_pass_copy_prop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_evrp_copy_prop (gcc::context *ctxt);
extern gimple_opt_pass *make_pass_isolate_erroneous_paths (gcc::context *ctxt);
extern gimple_opt_pass *make_pass_early_vrp (gcc::context *ctxt);
extern gimple_opt_pass *make_pass_ranger_vrp (gcc::context *ctxt);
diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c
index 9bcb708..2952850 100644
--- a/gcc/tree-ssa-copy.c
+++ b/gcc/tree-ssa-copy.c
@@ -636,11 +636,22 @@ const pass_data pass_data_copy_prop =
0, /* todo_flags_finish */
};
+class pass_data_factory : public pass_data
+{
+public:
+ pass_data_factory (const pass_data &pass, const char *name)
+ {
+ memcpy (this, &pass, sizeof (*this));
+ if (name)
+ this->name = name;
+ }
+};
+
class pass_copy_prop : public gimple_opt_pass
{
public:
- pass_copy_prop (gcc::context *ctxt)
- : gimple_opt_pass (pass_data_copy_prop, ctxt)
+ pass_copy_prop (gcc::context *ctxt, const char *name = NULL)
+ : gimple_opt_pass (pass_data_factory (pass_data_copy_prop, name), ctxt)
{}
/* opt_pass methods: */
@@ -657,3 +668,12 @@ make_pass_copy_prop (gcc::context *ctxt)
{
return new pass_copy_prop (ctxt);
}
+
+// Instantiate a new copy propagation pass with a different name, to
+// minimize changes to tests looking for a particular copyprop dump
+// file.
+gimple_opt_pass *
+make_pass_evrp_copy_prop (gcc::context *ctxt)
+{
+ return new pass_copy_prop (ctxt, "evrp-copyprop");
+}