From ed765125f2981bc0c2976b5650ba54abc3cb5f2e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 15 Feb 2007 15:07:59 +0000 Subject: [PATCH] caller-save.c (save_call_clobbered_regs): Do not process sibcalls. 2007-02-15 Paolo Bonzini * caller-save.c (save_call_clobbered_regs): Do not process sibcalls. From-SVN: r121998 --- gcc/ChangeLog | 4 ++++ gcc/caller-save.c | 9 +++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d889d1955b6..ba840404f19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2007-02-15 Paolo Bonzini + + * caller-save.c (save_call_clobbered_regs): Do not process sibcalls. + 2007-02-15 Nick Clifton * varasm.c (default_asm_output_anchor): Prepend * to . symbol in diff --git a/gcc/caller-save.c b/gcc/caller-save.c index 54f88a14d40..4acb912248d 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);