OSDN Git Service

2007-02-15 Paolo Bonzini <bonzini@gnu.org>
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Feb 2007 15:07:59 +0000 (15:07 +0000)
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Feb 2007 15:07:59 +0000 (15:07 +0000)
* caller-save.c (save_call_clobbered_regs): Do not process sibcalls.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121998 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/caller-save.c

index d889d19..ba84040 100644 (file)
@@ -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
 2007-02-15  Nick Clifton  <nickc@redhat.com>
 
        * varasm.c (default_asm_output_anchor): Prepend * to . symbol in
index 54f88a1..4acb912 100644 (file)
@@ -407,7 +407,9 @@ save_call_clobbered_regs (void)
                  regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS, save_mode);
            }
 
                  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;
            {
              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);
                 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);
 
              /* Compute which hard regs must be saved before this call.  */
              AND_COMPL_HARD_REG_SET (hard_regs_to_save, call_fixed_reg_set);