Commit 8582c27b by Richard Henderson Committed by Richard Henderson

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
parent de76a39c
2001-12-12 Richard Henderson <rth@redhat.com>
* 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.
2001-12-12 Jakub Jelinek <jakub@redhat.com> 2001-12-12 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (dw_val_class): Add dw_val_class_range_list. * dwarf2out.c (dw_val_class): Add dw_val_class_range_list.
......
...@@ -259,7 +259,7 @@ in the following sections. ...@@ -259,7 +259,7 @@ in the following sections.
@gccoptlist{ @gccoptlist{
-falign-functions=@var{n} -falign-jumps=@var{n} @gol -falign-functions=@var{n} -falign-jumps=@var{n} @gol
-falign-labels=@var{n} -falign-loops=@var{n} @gol -falign-labels=@var{n} -falign-loops=@var{n} @gol
-fbranch-probabilities -fcaller-saves @gol -fbranch-probabilities -fcaller-saves -fcprop-registers @gol
-fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol -fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol
-fdelayed-branch -fdelete-null-pointer-checks @gol -fdelayed-branch -fdelete-null-pointer-checks @gol
-fexpensive-optimizations -ffast-math -ffloat-store @gol -fexpensive-optimizations -ffast-math -ffloat-store @gol
...@@ -3774,6 +3774,12 @@ will most benefit processors with lots of registers. It can, however, ...@@ -3774,6 +3774,12 @@ will most benefit processors with lots of registers. It can, however,
make debugging impossible, since variables will no longer stay in make debugging impossible, since variables will no longer stay in
a ``home register''. a ``home register''.
@item -fno-cprop-registers
@opindex fno-cprop-registers
After register allocation and post-register allocation instruction splitting,
we perform a copy-propagation pass to try to reduce scheduling dependencies
and occasionally eliminate the copy.
@item --param @var{name}=@var{value} @item --param @var{name}=@var{value}
@opindex param @opindex param
In some places, GCC uses various constants to control the amount of In some places, GCC uses various constants to control the amount of
......
...@@ -2097,6 +2097,7 @@ extern rtx stack_limit_rtx; ...@@ -2097,6 +2097,7 @@ extern rtx stack_limit_rtx;
/* In regrename.c */ /* In regrename.c */
extern void regrename_optimize PARAMS ((void)); extern void regrename_optimize PARAMS ((void));
extern void copyprop_hardreg_forward PARAMS ((void));
/* In ifcvt.c */ /* In ifcvt.c */
extern void if_convert PARAMS ((int)); extern void if_convert PARAMS ((int));
......
...@@ -427,6 +427,7 @@ int flag_reorder_blocks = 0; ...@@ -427,6 +427,7 @@ int flag_reorder_blocks = 0;
/* Nonzero if registers should be renamed. */ /* Nonzero if registers should be renamed. */
int flag_rename_registers = 0; int flag_rename_registers = 0;
int flag_cprop_registers = 0;
/* Nonzero for -pedantic switch: warn about anything /* Nonzero for -pedantic switch: warn about anything
that standard spec forbids. */ that standard spec forbids. */
...@@ -1083,6 +1084,8 @@ lang_independent_options f_options[] = ...@@ -1083,6 +1084,8 @@ lang_independent_options f_options[] =
N_("Reorder basic blocks to improve code placement") }, N_("Reorder basic blocks to improve code placement") },
{"rename-registers", &flag_rename_registers, 1, {"rename-registers", &flag_rename_registers, 1,
N_("Do the register renaming optimization pass") }, 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, {"common", &flag_no_common, 0,
N_("Do not put uninitialized globals in the common section") }, N_("Do not put uninitialized globals in the common section") },
{"inhibit-size-directive", &flag_inhibit_size_directive, 1, {"inhibit-size-directive", &flag_inhibit_size_directive, 1,
...@@ -3280,12 +3283,15 @@ rest_of_compilation (decl) ...@@ -3280,12 +3283,15 @@ rest_of_compilation (decl)
} }
#endif #endif
if (optimize > 0 && flag_rename_registers) if (flag_rename_registers || flag_cprop_registers)
{ {
timevar_push (TV_RENAME_REGISTERS); timevar_push (TV_RENAME_REGISTERS);
open_dump_file (DFI_rnreg, decl); open_dump_file (DFI_rnreg, decl);
if (flag_rename_registers)
regrename_optimize (); regrename_optimize ();
if (flag_cprop_registers)
copyprop_hardreg_forward ();
close_dump_file (DFI_rnreg, print_rtl_with_bb, insns); close_dump_file (DFI_rnreg, print_rtl_with_bb, insns);
timevar_pop (TV_RENAME_REGISTERS); timevar_pop (TV_RENAME_REGISTERS);
...@@ -4620,6 +4626,7 @@ parse_options_and_default_flags (argc, argv) ...@@ -4620,6 +4626,7 @@ parse_options_and_default_flags (argc, argv)
flag_omit_frame_pointer = 1; flag_omit_frame_pointer = 1;
#endif #endif
flag_guess_branch_prob = 1; flag_guess_branch_prob = 1;
flag_cprop_registers = 1;
} }
if (optimize >= 2) if (optimize >= 2)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment