aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2007-02-15 15:07:59 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2007-02-15 15:07:59 +0000
commited765125f2981bc0c2976b5650ba54abc3cb5f2e (patch)
tree025135acaafe07fe73718d7570e8e8e0cf774264
parentfc01261a60ff3e7643ff663950020505a6d659d0 (diff)
downloadgcc-ed765125f2981bc0c2976b5650ba54abc3cb5f2e.zip
gcc-ed765125f2981bc0c2976b5650ba54abc3cb5f2e.tar.gz
gcc-ed765125f2981bc0c2976b5650ba54abc3cb5f2e.tar.bz2
caller-save.c (save_call_clobbered_regs): Do not process sibcalls.
2007-02-15 Paolo Bonzini <bonzini@gnu.org> * caller-save.c (save_call_clobbered_regs): Do not process sibcalls. From-SVN: r121998
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/caller-save.c9
2 files changed, 7 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d889d19..ba84040 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2007-02-15 Paolo Bonzini <bonzini@gnu.org>
+
+ * caller-save.c (save_call_clobbered_regs): Do not process sibcalls.
+
2007-02-15 Nick Clifton <nickc@redhat.com>
* varasm.c (default_asm_output_anchor): Prepend * to . symbol in
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index 54f88a1..4acb912 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -407,7 +407,9 @@ save_call_clobbered_regs (void)
regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS, save_mode);
}
- if (code == CALL_INSN && ! find_reg_note (insn, REG_NORETURN, NULL))
+ if (code == CALL_INSN
+ && ! SIBLING_CALL_P (insn)
+ && ! find_reg_note (insn, REG_NORETURN, NULL))
{
unsigned regno;
HARD_REG_SET hard_regs_to_save;
@@ -450,11 +452,6 @@ save_call_clobbered_regs (void)
during the call, but the subreg that is set isn't. */
CLEAR_HARD_REG_SET (this_insn_sets);
note_stores (PATTERN (insn), mark_set_regs, &this_insn_sets);
- /* Sibcalls are considered to set the return value,
- compare flow.c:propagate_one_insn. */
- if (SIBLING_CALL_P (insn) && current_function_return_rtx)
- mark_set_regs (current_function_return_rtx, NULL_RTX,
- &this_insn_sets);
/* Compute which hard regs must be saved before this call. */
AND_COMPL_HARD_REG_SET (hard_regs_to_save, call_fixed_reg_set);