Patchwork [4/4] Using gen_int_mode instead of GEN_INT

login
register
mail settings
Submitter Richard Sandiford
Date Sept. 9, 2013, 10:27 a.m.
Message ID <87a9jmguhc.fsf@talisman.default>
Download mbox | patch
Permalink /patch/273545/
State New
Headers show

Comments

Richard Sandiford - Sept. 9, 2013, 10:27 a.m.
Similar to patch 1, but here the calls are involved in a SET instruction
(or equivalent) and are cases where the operand must have the same mode as
the SET destination.

Tested in the same way as before.  OK to install?

Thanks,
Richard


gcc/
	* asan.c (asan_emit_stack_protection): Use gen_int_mode instead of
	GEN_INT.
	* builtins.c (expand_errno_check): Likewise.
	* dwarf2cfi.c (init_return_column_size): Likewise.
	* except.c (sjlj_mark_call_sites): Likewise.
	* expr.c (move_by_pieces_1, store_by_pieces_2): Likewise.
	* lra-constraints.c (emit_inc): Likewise.
	* ree.c (combine_set_extension): Likewise.
	* regmove.c (fixup_match_2): Likewise.
	* reload1.c (inc_for_reload): Likewise.
Richard Guenther - Sept. 9, 2013, 11:29 a.m.
On Mon, Sep 9, 2013 at 12:27 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> Similar to patch 1, but here the calls are involved in a SET instruction
> (or equivalent) and are cases where the operand must have the same mode as
> the SET destination.
>
> Tested in the same way as before.  OK to install?

Ok.

Thanks,
Richard.

> Thanks,
> Richard
>
>
> gcc/
>         * asan.c (asan_emit_stack_protection): Use gen_int_mode instead of
>         GEN_INT.
>         * builtins.c (expand_errno_check): Likewise.
>         * dwarf2cfi.c (init_return_column_size): Likewise.
>         * except.c (sjlj_mark_call_sites): Likewise.
>         * expr.c (move_by_pieces_1, store_by_pieces_2): Likewise.
>         * lra-constraints.c (emit_inc): Likewise.
>         * ree.c (combine_set_extension): Likewise.
>         * regmove.c (fixup_match_2): Likewise.
>         * reload1.c (inc_for_reload): Likewise.
>
> Index: gcc/asan.c
> ===================================================================
> --- gcc/asan.c  2013-09-09 10:55:59.743537289 +0100
> +++ gcc/asan.c  2013-09-09 11:06:25.029673768 +0100
> @@ -966,15 +966,15 @@ asan_emit_stack_protection (rtx base, HO
>    str_cst = asan_pp_string (&asan_pp);
>
>    /* Emit the prologue sequence.  */
>    base = expand_binop (Pmode, add_optab, base,
>                        gen_int_mode (base_offset, Pmode),
>                        NULL_RTX, 1, OPTAB_DIRECT);
>    mem = gen_rtx_MEM (ptr_mode, base);
> -  emit_move_insn (mem, GEN_INT (ASAN_STACK_FRAME_MAGIC));
> +  emit_move_insn (mem, gen_int_mode (ASAN_STACK_FRAME_MAGIC, ptr_mode));
>    mem = adjust_address (mem, VOIDmode, GET_MODE_SIZE (ptr_mode));
>    emit_move_insn (mem, expand_normal (str_cst));
>    shadow_base = expand_binop (Pmode, lshr_optab, base,
>                               GEN_INT (ASAN_SHADOW_SHIFT),
>                               NULL_RTX, 1, OPTAB_DIRECT);
>    shadow_base = expand_binop (Pmode, add_optab, shadow_base,
>                               gen_int_mode (targetm.asan_shadow_offset (),
> Index: gcc/builtins.c
> ===================================================================
> --- gcc/builtins.c      2013-09-09 10:55:59.747537322 +0100
> +++ gcc/builtins.c      2013-09-09 11:06:25.030673776 +0100
> @@ -1963,15 +1963,16 @@ expand_errno_check (tree exp, rtx target
>      {
>  #ifdef GEN_ERRNO_RTX
>        rtx errno_rtx = GEN_ERRNO_RTX;
>  #else
>        rtx errno_rtx
>           = gen_rtx_MEM (word_mode, gen_rtx_SYMBOL_REF (Pmode, "errno"));
>  #endif
> -      emit_move_insn (errno_rtx, GEN_INT (TARGET_EDOM));
> +      emit_move_insn (errno_rtx,
> +                     gen_int_mode (TARGET_EDOM, GET_MODE (errno_rtx)));
>        emit_label (lab);
>        return;
>      }
>  #endif
>
>    /* Make sure the library call isn't expanded as a tail call.  */
>    CALL_EXPR_TAILCALL (exp) = 0;
> Index: gcc/dwarf2cfi.c
> ===================================================================
> --- gcc/dwarf2cfi.c     2013-09-08 17:18:39.456588227 +0100
> +++ gcc/dwarf2cfi.c     2013-09-09 11:06:25.028673760 +0100
> @@ -242,15 +242,16 @@ expand_builtin_dwarf_sp_column (void)
>     which has mode MODE.  Initialize column C as a return address column.  */
>
>  static void
>  init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
>  {
>    HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
>    HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
> -  emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
> +  emit_move_insn (adjust_address (mem, mode, offset),
> +                 gen_int_mode (size, mode));
>  }
>
>  /* Generate code to initialize the register size table.  */
>
>  void
>  expand_builtin_init_dwarf_reg_sizes (tree address)
>  {
> Index: gcc/except.c
> ===================================================================
> --- gcc/except.c        2013-09-08 17:18:39.456588227 +0100
> +++ gcc/except.c        2013-09-09 11:06:25.017673669 +0100
> @@ -1152,15 +1152,15 @@ sjlj_mark_call_sites (void)
>        before = insn;
>        if (CALL_P (insn))
>         before = find_first_parameter_load (insn, NULL_RTX);
>
>        start_sequence ();
>        mem = adjust_address (crtl->eh.sjlj_fc, TYPE_MODE (integer_type_node),
>                             sjlj_fc_call_site_ofs);
> -      emit_move_insn (mem, GEN_INT (this_call_site));
> +      emit_move_insn (mem, gen_int_mode (this_call_site, GET_MODE (mem)));
>        p = get_insns ();
>        end_sequence ();
>
>        emit_insn_before (p, before);
>        last_call_site = this_call_site;
>      }
>  }
> Index: gcc/expr.c
> ===================================================================
> --- gcc/expr.c  2013-09-09 10:55:59.754537379 +0100
> +++ gcc/expr.c  2013-09-09 11:06:25.021673702 +0100
> @@ -1067,34 +1067,40 @@ move_by_pieces_1 (insn_gen_fn genfun, ma
>         from1 = adjust_automodify_address (data->from, mode, data->from_addr,
>                                            data->offset);
>        else
>         from1 = adjust_address (data->from, mode, data->offset);
>
>        if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
>         emit_insn (gen_add2_insn (data->to_addr,
> -                                 GEN_INT (-(HOST_WIDE_INT)size)));
> +                                 gen_int_mode (-(HOST_WIDE_INT) size,
> +                                               GET_MODE (data->to_addr))));
>        if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0)
>         emit_insn (gen_add2_insn (data->from_addr,
> -                                 GEN_INT (-(HOST_WIDE_INT)size)));
> +                                 gen_int_mode (-(HOST_WIDE_INT) size,
> +                                               GET_MODE (data->from_addr))));
>
>        if (data->to)
>         emit_insn ((*genfun) (to1, from1));
>        else
>         {
>  #ifdef PUSH_ROUNDING
>           emit_single_push_insn (mode, from1, NULL);
>  #else
>           gcc_unreachable ();
>  #endif
>         }
>
>        if (HAVE_POST_INCREMENT && data->explicit_inc_to > 0)
> -       emit_insn (gen_add2_insn (data->to_addr, GEN_INT (size)));
> +       emit_insn (gen_add2_insn (data->to_addr,
> +                                 gen_int_mode (size,
> +                                               GET_MODE (data->to_addr))));
>        if (HAVE_POST_INCREMENT && data->explicit_inc_from > 0)
> -       emit_insn (gen_add2_insn (data->from_addr, GEN_INT (size)));
> +       emit_insn (gen_add2_insn (data->from_addr,
> +                                 gen_int_mode (size,
> +                                               GET_MODE (data->from_addr))));
>
>        if (! data->reverse)
>         data->offset += size;
>
>        data->len -= size;
>      }
>  }
> @@ -2672,21 +2678,24 @@ store_by_pieces_2 (insn_gen_fn genfun, m
>         to1 = adjust_automodify_address (data->to, mode, data->to_addr,
>                                          data->offset);
>        else
>         to1 = adjust_address (data->to, mode, data->offset);
>
>        if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
>         emit_insn (gen_add2_insn (data->to_addr,
> -                                 GEN_INT (-(HOST_WIDE_INT) size)));
> +                                 gen_int_mode (-(HOST_WIDE_INT) size,
> +                                               GET_MODE (data->to_addr))));
>
>        cst = (*data->constfun) (data->constfundata, data->offset, mode);
>        emit_insn ((*genfun) (to1, cst));
>
>        if (HAVE_POST_INCREMENT && data->explicit_inc_to > 0)
> -       emit_insn (gen_add2_insn (data->to_addr, GEN_INT (size)));
> +       emit_insn (gen_add2_insn (data->to_addr,
> +                                 gen_int_mode (size,
> +                                               GET_MODE (data->to_addr))));
>
>        if (! data->reverse)
>         data->offset += size;
>
>        data->len -= size;
>      }
>  }
> Index: gcc/lra-constraints.c
> ===================================================================
> --- gcc/lra-constraints.c       2013-09-08 17:18:39.456588227 +0100
> +++ gcc/lra-constraints.c       2013-09-09 11:06:25.023673719 +0100
> @@ -2833,15 +2833,17 @@ emit_inc (enum reg_class new_rclass, rtx
>        emit_insn (gen_move_insn (incloc, result));
>        /* Restore non-modified value for the result.  We prefer this
>          way because it does not require an additional hard
>          register.  */
>        if (plus_p)
>         {
>           if (CONST_INT_P (inc))
> -           emit_insn (gen_add2_insn (result, GEN_INT (-INTVAL (inc))));
> +           emit_insn (gen_add2_insn (result,
> +                                     gen_int_mode (-INTVAL (inc),
> +                                                   GET_MODE (result))));
>           else
>             emit_insn (gen_sub2_insn (result, inc));
>         }
>        else
>         emit_insn (gen_add2_insn (result, inc));
>      }
>    return result;
> Index: gcc/ree.c
> ===================================================================
> --- gcc/ree.c   2013-09-08 17:18:39.456588227 +0100
> +++ gcc/ree.c   2013-09-09 11:06:25.023673719 +0100
> @@ -294,15 +294,16 @@ combine_set_extension (ext_cand *cand, r
>         new_set = gen_rtx_SET (VOIDmode, new_reg, orig_src);
>        else
>         {
>           /* Zero-extend the negative constant by masking out the bits outside
>              the source mode.  */
>           enum machine_mode src_mode = GET_MODE (SET_DEST (*orig_set));
>           rtx new_const_int
> -           = GEN_INT (INTVAL (orig_src) & GET_MODE_MASK (src_mode));
> +           = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (src_mode),
> +                           GET_MODE (new_reg));
>           new_set = gen_rtx_SET (VOIDmode, new_reg, new_const_int);
>         }
>      }
>    else if (GET_MODE (orig_src) == VOIDmode)
>      {
>        /* This is mostly due to a call insn that should not be optimized.  */
>        return false;
> Index: gcc/regmove.c
> ===================================================================
> --- gcc/regmove.c       2013-09-08 17:18:39.456588227 +0100
> +++ gcc/regmove.c       2013-09-09 11:06:25.024673727 +0100
> @@ -782,15 +782,16 @@ fixup_match_2 (rtx insn, rtx dst, rtx sr
>        if (pset && SET_DEST (pset) == dst
>           && GET_CODE (SET_SRC (pset)) == PLUS
>           && XEXP (SET_SRC (pset), 0) == src
>           && CONST_INT_P (XEXP (SET_SRC (pset), 1)))
>         {
>           HOST_WIDE_INT newconst
>             = INTVAL (offset) - INTVAL (XEXP (SET_SRC (pset), 1));
> -         rtx add = gen_add3_insn (dst, dst, GEN_INT (newconst));
> +         rtx add = gen_add3_insn (dst, dst,
> +                                  gen_int_mode (newconst, GET_MODE (dst)));
>
>           if (add && validate_change (insn, &PATTERN (insn), add, 0))
>             {
>               /* Remove the death note for DST from DST_DEATH.  */
>               if (dst_death)
>                 {
>                   remove_death (REGNO (dst), dst_death);
> Index: gcc/reload1.c
> ===================================================================
> --- gcc/reload1.c       2013-09-09 10:49:45.231460860 +0100
> +++ gcc/reload1.c       2013-09-09 11:06:25.027673752 +0100
> @@ -9153,15 +9153,17 @@ inc_for_reload (rtx reloadreg, rtx in, r
>          We have already copied IN to RELOADREG.  Increment the copy in
>          RELOADREG, save that back, then decrement RELOADREG so it has
>          the original value.  */
>
>        emit_insn (gen_add2_insn (reloadreg, inc));
>        emit_insn (gen_move_insn (incloc, reloadreg));
>        if (CONST_INT_P (inc))
> -       emit_insn (gen_add2_insn (reloadreg, GEN_INT (-INTVAL (inc))));
> +       emit_insn (gen_add2_insn (reloadreg,
> +                                 gen_int_mode (-INTVAL (inc),
> +                                               GET_MODE (reloadreg))));
>        else
>         emit_insn (gen_sub2_insn (reloadreg, inc));
>      }
>  }
>
>  #ifdef AUTO_INC_DEC
>  static void

Patch

Index: gcc/asan.c
===================================================================
--- gcc/asan.c	2013-09-09 10:55:59.743537289 +0100
+++ gcc/asan.c	2013-09-09 11:06:25.029673768 +0100
@@ -966,15 +966,15 @@  asan_emit_stack_protection (rtx base, HO
   str_cst = asan_pp_string (&asan_pp);
 
   /* Emit the prologue sequence.  */
   base = expand_binop (Pmode, add_optab, base,
 		       gen_int_mode (base_offset, Pmode),
 		       NULL_RTX, 1, OPTAB_DIRECT);
   mem = gen_rtx_MEM (ptr_mode, base);
-  emit_move_insn (mem, GEN_INT (ASAN_STACK_FRAME_MAGIC));
+  emit_move_insn (mem, gen_int_mode (ASAN_STACK_FRAME_MAGIC, ptr_mode));
   mem = adjust_address (mem, VOIDmode, GET_MODE_SIZE (ptr_mode));
   emit_move_insn (mem, expand_normal (str_cst));
   shadow_base = expand_binop (Pmode, lshr_optab, base,
 			      GEN_INT (ASAN_SHADOW_SHIFT),
 			      NULL_RTX, 1, OPTAB_DIRECT);
   shadow_base = expand_binop (Pmode, add_optab, shadow_base,
 			      gen_int_mode (targetm.asan_shadow_offset (),
Index: gcc/builtins.c
===================================================================
--- gcc/builtins.c	2013-09-09 10:55:59.747537322 +0100
+++ gcc/builtins.c	2013-09-09 11:06:25.030673776 +0100
@@ -1963,15 +1963,16 @@  expand_errno_check (tree exp, rtx target
     {
 #ifdef GEN_ERRNO_RTX
       rtx errno_rtx = GEN_ERRNO_RTX;
 #else
       rtx errno_rtx
 	  = gen_rtx_MEM (word_mode, gen_rtx_SYMBOL_REF (Pmode, "errno"));
 #endif
-      emit_move_insn (errno_rtx, GEN_INT (TARGET_EDOM));
+      emit_move_insn (errno_rtx,
+		      gen_int_mode (TARGET_EDOM, GET_MODE (errno_rtx)));
       emit_label (lab);
       return;
     }
 #endif
 
   /* Make sure the library call isn't expanded as a tail call.  */
   CALL_EXPR_TAILCALL (exp) = 0;
Index: gcc/dwarf2cfi.c
===================================================================
--- gcc/dwarf2cfi.c	2013-09-08 17:18:39.456588227 +0100
+++ gcc/dwarf2cfi.c	2013-09-09 11:06:25.028673760 +0100
@@ -242,15 +242,16 @@  expand_builtin_dwarf_sp_column (void)
    which has mode MODE.  Initialize column C as a return address column.  */
 
 static void
 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
 {
   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
-  emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
+  emit_move_insn (adjust_address (mem, mode, offset),
+		  gen_int_mode (size, mode));
 }
 
 /* Generate code to initialize the register size table.  */
 
 void
 expand_builtin_init_dwarf_reg_sizes (tree address)
 {
Index: gcc/except.c
===================================================================
--- gcc/except.c	2013-09-08 17:18:39.456588227 +0100
+++ gcc/except.c	2013-09-09 11:06:25.017673669 +0100
@@ -1152,15 +1152,15 @@  sjlj_mark_call_sites (void)
       before = insn;
       if (CALL_P (insn))
 	before = find_first_parameter_load (insn, NULL_RTX);
 
       start_sequence ();
       mem = adjust_address (crtl->eh.sjlj_fc, TYPE_MODE (integer_type_node),
 			    sjlj_fc_call_site_ofs);
-      emit_move_insn (mem, GEN_INT (this_call_site));
+      emit_move_insn (mem, gen_int_mode (this_call_site, GET_MODE (mem)));
       p = get_insns ();
       end_sequence ();
 
       emit_insn_before (p, before);
       last_call_site = this_call_site;
     }
 }
Index: gcc/expr.c
===================================================================
--- gcc/expr.c	2013-09-09 10:55:59.754537379 +0100
+++ gcc/expr.c	2013-09-09 11:06:25.021673702 +0100
@@ -1067,34 +1067,40 @@  move_by_pieces_1 (insn_gen_fn genfun, ma
 	from1 = adjust_automodify_address (data->from, mode, data->from_addr,
 					   data->offset);
       else
 	from1 = adjust_address (data->from, mode, data->offset);
 
       if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
 	emit_insn (gen_add2_insn (data->to_addr,
-				  GEN_INT (-(HOST_WIDE_INT)size)));
+				  gen_int_mode (-(HOST_WIDE_INT) size,
+						GET_MODE (data->to_addr))));
       if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0)
 	emit_insn (gen_add2_insn (data->from_addr,
-				  GEN_INT (-(HOST_WIDE_INT)size)));
+				  gen_int_mode (-(HOST_WIDE_INT) size,
+						GET_MODE (data->from_addr))));
 
       if (data->to)
 	emit_insn ((*genfun) (to1, from1));
       else
 	{
 #ifdef PUSH_ROUNDING
 	  emit_single_push_insn (mode, from1, NULL);
 #else
 	  gcc_unreachable ();
 #endif
 	}
 
       if (HAVE_POST_INCREMENT && data->explicit_inc_to > 0)
-	emit_insn (gen_add2_insn (data->to_addr, GEN_INT (size)));
+	emit_insn (gen_add2_insn (data->to_addr,
+				  gen_int_mode (size,
+						GET_MODE (data->to_addr))));
       if (HAVE_POST_INCREMENT && data->explicit_inc_from > 0)
-	emit_insn (gen_add2_insn (data->from_addr, GEN_INT (size)));
+	emit_insn (gen_add2_insn (data->from_addr,
+				  gen_int_mode (size,
+						GET_MODE (data->from_addr))));
 
       if (! data->reverse)
 	data->offset += size;
 
       data->len -= size;
     }
 }
@@ -2672,21 +2678,24 @@  store_by_pieces_2 (insn_gen_fn genfun, m
 	to1 = adjust_automodify_address (data->to, mode, data->to_addr,
 					 data->offset);
       else
 	to1 = adjust_address (data->to, mode, data->offset);
 
       if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0)
 	emit_insn (gen_add2_insn (data->to_addr,
-				  GEN_INT (-(HOST_WIDE_INT) size)));
+				  gen_int_mode (-(HOST_WIDE_INT) size,
+						GET_MODE (data->to_addr))));
 
       cst = (*data->constfun) (data->constfundata, data->offset, mode);
       emit_insn ((*genfun) (to1, cst));
 
       if (HAVE_POST_INCREMENT && data->explicit_inc_to > 0)
-	emit_insn (gen_add2_insn (data->to_addr, GEN_INT (size)));
+	emit_insn (gen_add2_insn (data->to_addr,
+				  gen_int_mode (size,
+						GET_MODE (data->to_addr))));
 
       if (! data->reverse)
 	data->offset += size;
 
       data->len -= size;
     }
 }
Index: gcc/lra-constraints.c
===================================================================
--- gcc/lra-constraints.c	2013-09-08 17:18:39.456588227 +0100
+++ gcc/lra-constraints.c	2013-09-09 11:06:25.023673719 +0100
@@ -2833,15 +2833,17 @@  emit_inc (enum reg_class new_rclass, rtx
       emit_insn (gen_move_insn (incloc, result));
       /* Restore non-modified value for the result.  We prefer this
 	 way because it does not require an additional hard
 	 register.  */
       if (plus_p)
 	{
 	  if (CONST_INT_P (inc))
-	    emit_insn (gen_add2_insn (result, GEN_INT (-INTVAL (inc))));
+	    emit_insn (gen_add2_insn (result,
+				      gen_int_mode (-INTVAL (inc),
+						    GET_MODE (result))));
 	  else
 	    emit_insn (gen_sub2_insn (result, inc));
 	}
       else
 	emit_insn (gen_add2_insn (result, inc));
     }
   return result;
Index: gcc/ree.c
===================================================================
--- gcc/ree.c	2013-09-08 17:18:39.456588227 +0100
+++ gcc/ree.c	2013-09-09 11:06:25.023673719 +0100
@@ -294,15 +294,16 @@  combine_set_extension (ext_cand *cand, r
 	new_set = gen_rtx_SET (VOIDmode, new_reg, orig_src);
       else
 	{
 	  /* Zero-extend the negative constant by masking out the bits outside
 	     the source mode.  */
 	  enum machine_mode src_mode = GET_MODE (SET_DEST (*orig_set));
 	  rtx new_const_int
-	    = GEN_INT (INTVAL (orig_src) & GET_MODE_MASK (src_mode));
+	    = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (src_mode),
+			    GET_MODE (new_reg));
 	  new_set = gen_rtx_SET (VOIDmode, new_reg, new_const_int);
 	}
     }
   else if (GET_MODE (orig_src) == VOIDmode)
     {
       /* This is mostly due to a call insn that should not be optimized.  */
       return false;
Index: gcc/regmove.c
===================================================================
--- gcc/regmove.c	2013-09-08 17:18:39.456588227 +0100
+++ gcc/regmove.c	2013-09-09 11:06:25.024673727 +0100
@@ -782,15 +782,16 @@  fixup_match_2 (rtx insn, rtx dst, rtx sr
       if (pset && SET_DEST (pset) == dst
 	  && GET_CODE (SET_SRC (pset)) == PLUS
 	  && XEXP (SET_SRC (pset), 0) == src
 	  && CONST_INT_P (XEXP (SET_SRC (pset), 1)))
 	{
 	  HOST_WIDE_INT newconst
 	    = INTVAL (offset) - INTVAL (XEXP (SET_SRC (pset), 1));
-	  rtx add = gen_add3_insn (dst, dst, GEN_INT (newconst));
+	  rtx add = gen_add3_insn (dst, dst,
+				   gen_int_mode (newconst, GET_MODE (dst)));
 
 	  if (add && validate_change (insn, &PATTERN (insn), add, 0))
 	    {
 	      /* Remove the death note for DST from DST_DEATH.  */
 	      if (dst_death)
 		{
 		  remove_death (REGNO (dst), dst_death);
Index: gcc/reload1.c
===================================================================
--- gcc/reload1.c	2013-09-09 10:49:45.231460860 +0100
+++ gcc/reload1.c	2013-09-09 11:06:25.027673752 +0100
@@ -9153,15 +9153,17 @@  inc_for_reload (rtx reloadreg, rtx in, r
 	 We have already copied IN to RELOADREG.  Increment the copy in
 	 RELOADREG, save that back, then decrement RELOADREG so it has
 	 the original value.  */
 
       emit_insn (gen_add2_insn (reloadreg, inc));
       emit_insn (gen_move_insn (incloc, reloadreg));
       if (CONST_INT_P (inc))
-	emit_insn (gen_add2_insn (reloadreg, GEN_INT (-INTVAL (inc))));
+	emit_insn (gen_add2_insn (reloadreg,
+				  gen_int_mode (-INTVAL (inc),
+						GET_MODE (reloadreg))));
       else
 	emit_insn (gen_sub2_insn (reloadreg, inc));
     }
 }
 
 #ifdef AUTO_INC_DEC
 static void