This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [4/4] Using gen_int_mode instead of GEN_INT
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, Richard Sandiford <rdsandiford at googlemail dot com>
- Date: Mon, 9 Sep 2013 13:29:21 +0200
- Subject: Re: [4/4] Using gen_int_mode instead of GEN_INT
- Authentication-results: sourceware.org; auth=none
- References: <87a9jmguhc dot fsf at talisman dot default>
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