This patch fixes a bug that causes the prologue to use more temporary
registers than necessary.  Backported to 4.7 and 4.8.

        * config/tilegx/tilegx.c (tilegx_expand_prologue): Avoid
        double-decrement of next_scratch_regno.

--- gcc/config/tilegx/tilegx.c  (revision 197134)
+++ gcc/config/tilegx/tilegx.c  (working copy)
@@ -3999,11 +3999,10 @@ tilegx_expand_prologue (void)
 
        if (r == NULL_RTX)
          {
-           rtx p = compute_frame_addr (offset, &next_scratch_regno);
-           r = gen_rtx_REG (Pmode, next_scratch_regno--);
-           reg_save_addr[which_scratch] = r;
-
-           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+           int prev_scratch_regno = next_scratch_regno;
+           r = compute_frame_addr (offset, &next_scratch_regno);
+           if (prev_scratch_regno != next_scratch_regno)
+             reg_save_addr[which_scratch] = r;
          }
        else
          {

Reply via email to