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.

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

Reply via email to