aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2008-08-26 01:12:17 +0000
committerVladimir Makarov <vmakarov@redhat.com>2008-08-26 01:12:17 +0000
commit04f138937336f7a6a9ef7b1065bb3f0e084c587a (patch)
treee1fe183891d68eb61005059d6a767e71e1be9913
parent9634c14afe5d74ae7c737f0eeec722f93fd1a23d (diff)
2008-08-25 Vladimir Makarov <vmakarov@redhat.com>ira
* 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: https://gcc.gnu.org/svn/gcc/branches/ira@139582 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/caller-save.c26
-rw-r--r--gcc/doc/invoke.texi5
-rw-r--r--gcc/opts.c5
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 <vmakarov@redhat.com>
+
+ * 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 <law@redhat.com>
Vladimir Makarov <vmakarov@redhat.com>
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. */