diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-05-14 16:29:19 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-05-15 08:50:12 +0200 |
commit | 304543d8ff80796ef7fa6afdf0ab6bffa5698c9a (patch) | |
tree | 95a6681762c374dab0503517e6676d2ea94f9c27 | |
parent | af1295ebe16845ced1901c1dc6fb16ba33f57818 (diff) | |
download | gcc-304543d8ff80796ef7fa6afdf0ab6bffa5698c9a.zip gcc-304543d8ff80796ef7fa6afdf0ab6bffa5698c9a.tar.gz gcc-304543d8ff80796ef7fa6afdf0ab6bffa5698c9a.tar.bz2 |
Run copy propagation before evrp.
-rw-r--r-- | gcc/passes.def | 5 | ||||
-rw-r--r-- | gcc/tree-pass.h | 1 | ||||
-rw-r--r-- | gcc/tree-ssa-copy.c | 24 |
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"); +} |