This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Simplify expmed.c:lshift_value
- 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:31:55 +0200
- Subject: Re: Simplify expmed.c:lshift_value
- Authentication-results: sourceware.org; auth=none
- References: <8761uagub6 dot fsf at talisman dot default>
On Mon, Sep 9, 2013 at 12:31 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> expmed.c:lshift_value has:
>
> val = double_int::from_uhwi (INTVAL (value)).zext (bitsize);
> val = val.llshift (bitpos, HOST_BITS_PER_DOUBLE_INT);
>
> but its only caller has already zero-extended INTVAL (value) from BITSIZE,
> so we might as well pass that instead of the (value, bitsize) pair.
>
> This isn't really much of a win on its own, but it makes the associated
> wide-int change more obvious.
>
> Tested on x86_64-linux-gnu. OK to install?
Ok.
Thanks,
Richard.
> Thanks,
> Richard
>
>
> gcc/
> * expmed.c (lshift_value): Take an unsigned HOST_WIDE_INT instead
> of an rtx/bitpos pair.
> (store_fixed_bit_field): Update accordingly.
>
> Index: gcc/expmed.c
> ===================================================================
> --- gcc/expmed.c 2013-09-08 11:52:28.995962127 +0100
> +++ gcc/expmed.c 2013-09-08 14:21:49.710092468 +0100
> @@ -56,7 +56,7 @@ static rtx extract_fixed_bit_field (enum
> unsigned HOST_WIDE_INT,
> unsigned HOST_WIDE_INT, rtx, int, bool);
> static rtx mask_rtx (enum machine_mode, int, int, int);
> -static rtx lshift_value (enum machine_mode, rtx, int, int);
> +static rtx lshift_value (enum machine_mode, unsigned HOST_WIDE_INT, int);
> static rtx extract_split_bit_field (rtx, unsigned HOST_WIDE_INT,
> unsigned HOST_WIDE_INT, int);
> static void do_cmp_and_jump (rtx, rtx, enum rtx_code, enum machine_mode, rtx);
> @@ -991,7 +991,7 @@ store_fixed_bit_field (rtx op0, unsigned
> || (bitsize == HOST_BITS_PER_WIDE_INT && v == -1))
> all_one = 1;
>
> - value = lshift_value (mode, value, bitnum, bitsize);
> + value = lshift_value (mode, v, bitnum);
> }
> else
> {
> @@ -1862,14 +1862,15 @@ mask_rtx (enum machine_mode mode, int bi
> }
>
> /* Return a constant integer (CONST_INT or CONST_DOUBLE) rtx with the value
> - VALUE truncated to BITSIZE bits and then shifted left BITPOS bits. */
> + VALUE << BITPOS. */
>
> static rtx
> -lshift_value (enum machine_mode mode, rtx value, int bitpos, int bitsize)
> +lshift_value (enum machine_mode mode, unsigned HOST_WIDE_INT value,
> + int bitpos)
> {
> double_int val;
>
> - val = double_int::from_uhwi (INTVAL (value)).zext (bitsize);
> + val = double_int::from_uhwi (value);
> val = val.llshift (bitpos, HOST_BITS_PER_DOUBLE_INT);
>
> return immed_double_int_const (val, mode);