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/common | |
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/common')
-rw-r--r-- | gcc/common/config/rs6000/rs6000-common.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/common/config/rs6000/rs6000-common.c b/gcc/common/config/rs6000/rs6000-common.c index 9857b54..4b0c205 100644 --- a/gcc/common/config/rs6000/rs6000-common.c +++ b/gcc/common/config/rs6000/rs6000-common.c @@ -31,6 +31,8 @@ /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options rs6000_option_optimization_table[] = { + /* Split multi-word types early. */ + { OPT_LEVELS_ALL, OPT_fsplit_wide_types_early, NULL, 1 }, /* Enable -fsched-pressure for first pass instruction scheduling. */ { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } |