aboutsummaryrefslogtreecommitdiff
path: root/gcc/toplev.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-12-12 14:50:05 -0800
committerRichard Henderson <rth@gcc.gnu.org>2001-12-12 14:50:05 -0800
commit8582c27b18b4b930dc202ee851528377e2234348 (patch)
treebbc23bebdd972d2b44a70bb56df71f814ddfbac5 /gcc/toplev.c
parentde76a39c6e0550ed9cfc87a5e9d112f7f8dbefd7 (diff)
downloadgcc-8582c27b18b4b930dc202ee851528377e2234348.zip
gcc-8582c27b18b4b930dc202ee851528377e2234348.tar.gz
gcc-8582c27b18b4b930dc202ee851528377e2234348.tar.bz2
regrename.c (copyprop_hardreg_forward): New optimization.
* regrename.c (copyprop_hardreg_forward): New optimization. (kill_value_regno, kill_value, init_value_data, kill_clobbered_value, kill_set_value, kill_autoinc_value, copy_value, find_oldest_value_reg, replace_oldest_value_reg, replace_oldest_value_addr, replace_oldest_value_mem, copyprop_hardreg_forward_1, debug_value_data, validate_value_data): New. * rtl.h (copyprop_hardreg_forward): Declare. * toplev.c (flag_cprop_registers): New. (f_options): Add -fcprop-registers (rest_of_compilation): Invoke it. (parse_options_and_default_flags): Set it at -O1. * doc/invoke.texi: Document it. From-SVN: r47951
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r--gcc/toplev.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 6661500..d2c7ca0 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -427,6 +427,7 @@ int flag_reorder_blocks = 0;
/* Nonzero if registers should be renamed. */
int flag_rename_registers = 0;
+int flag_cprop_registers = 0;
/* Nonzero for -pedantic switch: warn about anything
that standard spec forbids. */
@@ -1083,6 +1084,8 @@ lang_independent_options f_options[] =
N_("Reorder basic blocks to improve code placement") },
{"rename-registers", &flag_rename_registers, 1,
N_("Do the register renaming optimization pass") },
+ {"cprop-registers", &flag_cprop_registers, 1,
+ N_("Do the register copy-propagation optimization pass") },
{"common", &flag_no_common, 0,
N_("Do not put uninitialized globals in the common section") },
{"inhibit-size-directive", &flag_inhibit_size_directive, 1,
@@ -3280,12 +3283,15 @@ rest_of_compilation (decl)
}
#endif
- if (optimize > 0 && flag_rename_registers)
+ if (flag_rename_registers || flag_cprop_registers)
{
timevar_push (TV_RENAME_REGISTERS);
open_dump_file (DFI_rnreg, decl);
- regrename_optimize ();
+ if (flag_rename_registers)
+ regrename_optimize ();
+ if (flag_cprop_registers)
+ copyprop_hardreg_forward ();
close_dump_file (DFI_rnreg, print_rtl_with_bb, insns);
timevar_pop (TV_RENAME_REGISTERS);
@@ -4620,6 +4626,7 @@ parse_options_and_default_flags (argc, argv)
flag_omit_frame_pointer = 1;
#endif
flag_guess_branch_prob = 1;
+ flag_cprop_registers = 1;
}
if (optimize >= 2)