From 48b9299c9538166cf321ac098ffd8428acd2fa14 Mon Sep 17 00:00:00 2001 From: vmakarov Date: Tue, 26 Aug 2008 01:12:17 +0000 Subject: [PATCH] 2008-08-25 Vladimir Makarov * opts.c (decode_options): Set up flag_ira. * doc/invoke.texi (fira): Document it. * caller-save.c (save_call_clobbered_regs): Define and use do_placement_opt_p. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/ira@139582 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/caller-save.c | 26 ++++++++++++-------------- gcc/doc/invoke.texi | 5 +++-- gcc/opts.c | 5 +++++ 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index acc2f610d73..8aaf72fe5e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-08-25 Vladimir Makarov + + * opts.c (decode_options): Set up flag_ira. + + * doc/invoke.texi (fira): Document it. + + * caller-save.c (save_call_clobbered_regs): Define and use + do_placement_opt_p. + 2008-08-24 Jeff Law Vladimir Makarov diff --git a/gcc/caller-save.c b/gcc/caller-save.c index b8df950c02b..76ff2360fb7 100644 --- a/gcc/caller-save.c +++ b/gcc/caller-save.c @@ -1719,8 +1719,9 @@ save_call_clobbered_regs (void) loop_iterator li; int save_pseudo[FIRST_PSEUDO_REGISTER]; int free_pseudo[FIRST_PSEUDO_REGISTER]; + bool do_placement_opt_p = 0 /* flag_ira && optimize */; - if (flag_ira && optimize) + if (do_placement_opt_p) { /* Do global analysis for better placement of spill code. */ alloc_aux_for_blocks (sizeof (struct bb_info)); @@ -1737,7 +1738,7 @@ save_call_clobbered_regs (void) CLEAR_HARD_REG_SET (hard_regs_saved); n_regs_saved = 0; - if (flag_ira && reload_insn_chain != NULL) + if (do_placement_opt_p && reload_insn_chain != NULL) { bb_info = BB_INFO_BY_INDEX (reload_insn_chain->block); set_hard_reg_saved (bb_info->restore_in, @@ -1758,7 +1759,7 @@ save_call_clobbered_regs (void) { if (n_regs_saved) { - if (!flag_ira && code == JUMP_INSN) + if (!do_placement_opt_p && code == JUMP_INSN) /* Restore all registers if this is a JUMP_INSN. */ COPY_HARD_REG_SET (referenced_regs, hard_regs_saved); else @@ -1780,7 +1781,7 @@ save_call_clobbered_regs (void) regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS, save_mode, save_pseudo); - if (flag_ira && optimize) + if (do_placement_opt_p) { gcc_assert (before == regno); save_mode[before] = VOIDmode; @@ -1852,7 +1853,7 @@ save_call_clobbered_regs (void) COPY_HARD_REG_SET (used_regs, call_used_reg_set); AND_HARD_REG_SET (hard_regs_to_save, used_regs); - if (flag_ira) + if (do_placement_opt_p) IOR_HARD_REG_SET (hard_regs_saved, hard_regs_to_save); else { @@ -1883,7 +1884,7 @@ save_call_clobbered_regs (void) remain saved. If the last insn in the block is a JUMP_INSN, put the restore before the insn, otherwise, put it after the insn. */ - if (flag_ira && optimize) + if (do_placement_opt_p) set_hard_reg_saved (BB_INFO_BY_INDEX (chain->block)->restore_here, BB_INFO_BY_INDEX (chain->block)->restore_out_mode, save_mode, @@ -1899,15 +1900,12 @@ save_call_clobbered_regs (void) regno += insert_restore (chain, JUMP_P (insn), regno, MOVE_MAX_WORDS, save_mode, save_pseudo); - if (flag_ira && optimize) - { - gcc_assert (before == regno); - save_mode[before] = VOIDmode; - save_pseudo[before] = -1; - } + gcc_assert (before == regno); + save_mode[before] = VOIDmode; + save_pseudo[before] = -1; } - if (flag_ira && optimize && next_bb_info != NULL) + if (do_placement_opt_p && next_bb_info != NULL) set_hard_reg_saved (next_bb_info->restore_in, next_bb_info->restore_in_mode, save_mode, next_bb_info->restore_in_pseudo, save_pseudo); @@ -1915,7 +1913,7 @@ save_call_clobbered_regs (void) } } - if (!flag_ira) + if (!do_placement_opt_p) return; CLEAR_HARD_REG_SET (hard_regs_to_save); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 455b43d9fee..db05e321856 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -5683,8 +5683,9 @@ Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. @item -fira @opindex fira -If supported for the target machine, use the integrated register -allocator (@acronym{IRA}) for register allocation. +Use the integrated register allocator (@acronym{IRA}) for register +allocation. It is a default if @acronym{IRA} has been ported for the +target. @item -fira-algorithm=@var{algorithm} Use specified algorithm for the integrated register allocator. The diff --git a/gcc/opts.c b/gcc/opts.c index 59add657780..badc0a1a6cd 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -878,6 +878,11 @@ decode_options (unsigned int argc, const char **argv) flag_section_anchors = 0; } +#ifdef IRA_COVER_CLASSES + /* Use IRA if it is implemented for the target. */ + flag_ira = 1; +#endif + /* Originally we just set the variables if a particular optimization level, but with the advent of being able to change the optimization level for a function, we need to reset optimizations. */ -- 2.11.4.GIT