OSDN Git Service

PR target/31701
authorkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 Apr 2007 00:07:40 +0000 (00:07 +0000)
committerkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 Apr 2007 00:07:40 +0000 (00:07 +0000)
* config/sh/sh.c (output_stack_adjust): Avoid using the frame
register itself to hold the offset constant.  Tell flow the use
of r4 and r5 when they are used.

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

gcc/ChangeLog
gcc/config/sh/sh.c

index 8363fbc..bd61b8e 100644 (file)
@@ -1,3 +1,10 @@
+2007-04-27  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       PR target/31701
+       * config/sh/sh.c (output_stack_adjust): Avoid using the frame
+       register itself to hold the offset constant.  Tell flow the use
+       of r4 and r5 when they are used.
+
 2007-04-27  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-forwprop.c (forward_propagate_into_cond): Keep track
index 0aeb764..ffa2509 100644 (file)
@@ -5619,7 +5619,13 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
              temp = scavenge_reg (&temps);
            }
          if (temp < 0 && live_regs_mask)
-           temp = scavenge_reg (live_regs_mask);
+           {
+             HARD_REG_SET temps;
+
+             COPY_HARD_REG_SET (temps, *live_regs_mask);
+             CLEAR_HARD_REG_BIT (temps, REGNO (reg));
+             temp = scavenge_reg (&temps);
+           }
          if (temp < 0)
            {
              rtx adj_reg, tmp_reg, mem;
@@ -5668,6 +5674,9 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
              emit_move_insn (adj_reg, mem);
              mem = gen_tmp_stack_mem (Pmode, gen_rtx_POST_INC (Pmode, reg));
              emit_move_insn (tmp_reg, mem);
+             /* Tell flow the insns that pop r4/r5 aren't dead.  */
+             emit_insn (gen_rtx_USE (VOIDmode, tmp_reg));
+             emit_insn (gen_rtx_USE (VOIDmode, adj_reg));
              return;
            }
          const_reg = gen_rtx_REG (GET_MODE (reg), temp);