diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2019-07-08 19:35:12 +0200 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2019-07-08 19:35:12 +0200 |
commit | b18081df8cca5f2306e99709fa2c06b9cbeea8d0 (patch) | |
tree | 59ef6d36e481b583dd0009cdd57c64508448c61e /gcc/tree-pass.h | |
parent | 8f783191775bc266a74175e92c7eb64098bd4283 (diff) | |
download | gcc-b18081df8cca5f2306e99709fa2c06b9cbeea8d0.zip gcc-b18081df8cca5f2306e99709fa2c06b9cbeea8d0.tar.gz gcc-b18081df8cca5f2306e99709fa2c06b9cbeea8d0.tar.bz2 |
subreg: Add -fsplit-wide-types-early (PR88233)
Currently the second lower-subreg pass is run right before RA. This
is much too late to be very useful. At least for targets that do not
have RTL patterns for operations on multi-register modes it is a lot
better to split patterns earlier, before combine and all related
passes.
This adds an option -fsplit-wide-types-early that does that, and
enables it by default for rs6000.
PR rtl-optimization/88233
* common.opt (fsplit-wide-types-early): New option.
* common/config/rs6000/rs6000-common.c
(rs6000_option_optimization_table): Add OPT_fsplit_wide_types_early for
OPT_LEVELS_ALL.
* doc/invoke.texi (Optimization Options): Add -fsplit-wide-types-early.
* lower-subreg.c (pass_lower_subreg2::gate): Add test for
flag_split_wide_types_early.
(pass_data_lower_subreg3): New.
(pass_lower_subreg3): New.
(make_pass_lower_subreg3): New.
* passes.def (pass_lower_subreg2): Move after the loop passes.
(pass_lower_subreg3): New, inserted where pass_lower_subreg2 was.
* tree-pass.h (make_pass_lower_subreg2): Move up, to its new place in
the pass pipeline; its previous place is taken by ...
(make_pass_lower_subreg3): ... this.
From-SVN: r273240
Diffstat (limited to 'gcc/tree-pass.h')
-rw-r--r-- | gcc/tree-pass.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index b27dbdd..7b83293 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -552,6 +552,7 @@ extern rtl_opt_pass *make_pass_rtl_unroll_loops (gcc::context *ctxt); extern rtl_opt_pass *make_pass_rtl_doloop (gcc::context *ctxt); extern rtl_opt_pass *make_pass_rtl_loop_done (gcc::context *ctxt); +extern rtl_opt_pass *make_pass_lower_subreg2 (gcc::context *ctxt); extern rtl_opt_pass *make_pass_web (gcc::context *ctxt); extern rtl_opt_pass *make_pass_cse2 (gcc::context *ctxt); extern rtl_opt_pass *make_pass_df_initialize_opt (gcc::context *ctxt); @@ -567,7 +568,7 @@ extern rtl_opt_pass *make_pass_partition_blocks (gcc::context *ctxt); extern rtl_opt_pass *make_pass_match_asm_constraints (gcc::context *ctxt); extern rtl_opt_pass *make_pass_split_all_insns (gcc::context *ctxt); extern rtl_opt_pass *make_pass_fast_rtl_byte_dce (gcc::context *ctxt); -extern rtl_opt_pass *make_pass_lower_subreg2 (gcc::context *ctxt); +extern rtl_opt_pass *make_pass_lower_subreg3 (gcc::context *ctxt); extern rtl_opt_pass *make_pass_mode_switching (gcc::context *ctxt); extern rtl_opt_pass *make_pass_sms (gcc::context *ctxt); extern rtl_opt_pass *make_pass_sched (gcc::context *ctxt); |