This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] [MSP430] Fix gcc.dg/pr85180.c and gcc.dg/pr87985.c timeouts for msp430-elf -mlarge
- From: Segher Boessenkool <segher at kernel dot crashing dot org>
- To: Jozef Lawrynowicz <jozef dot l at mittosystems dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 18 Dec 2018 03:08:51 -0600
- Subject: Re: [PATCH] [MSP430] Fix gcc.dg/pr85180.c and gcc.dg/pr87985.c timeouts for msp430-elf -mlarge
- References: <20181212120919.13955fb3@jozef-Aspire-VN7-793G> <20181213014752.GY3803@gate.crashing.org> <20181214152213.0e369052@jozef-Aspire-VN7-793G>
Hi!
On Fri, Dec 14, 2018 at 03:22:13PM +0000, Jozef Lawrynowicz wrote:
> 2018-12-14 Jozef Lawrynowicz <jozef.l@mittosystems.com>
>
> gcc/ChangeLog:
> * combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits
> of src in nonzero_bits_mode if the mode of src is MODE_INT and
> HWI_COMPUTABLE.
> (reg_nonzero_bits_for_combine): Add clarification to comment.
Is there some PR this fixes?
>
> diff --git a/gcc/combine.c b/gcc/combine.c
> index 7e61139..c93aaed 100644
> --- a/gcc/combine.c
> +++ b/gcc/combine.c
> @@ -1698,9 +1698,13 @@ update_rsp_from_reg_equal (reg_stat_type *rsp, rtx_insn *insn, const_rtx set,
> /* Don't call nonzero_bits if it cannot change anything. */
> if (rsp->nonzero_bits != HOST_WIDE_INT_M1U)
> {
> - bits = nonzero_bits (src, nonzero_bits_mode);
> + machine_mode mode = GET_MODE (x);
> + if (GET_MODE_CLASS (mode) == MODE_INT
> + && HWI_COMPUTABLE_MODE_P (mode))
> + mode = nonzero_bits_mode;
> + bits = nonzero_bits (src, mode);
> if (reg_equal && bits)
> - bits &= nonzero_bits (reg_equal, nonzero_bits_mode);
> + bits &= nonzero_bits (reg_equal, mode);
> rsp->nonzero_bits |= bits;
> }
>
> @@ -10224,6 +10228,7 @@ simplify_and_const_int (rtx x, scalar_int_mode mode, rtx varop,
>
> /* Given a REG X of mode XMODE, compute which bits in X can be nonzero.
> We don't care about bits outside of those defined in MODE.
> + We DO care about all the bits in MODE, even if XMODE is smaller than MODE.
>
> For most X this is simply GET_MODE_MASK (GET_MODE (MODE)), but if X is
> a shift, AND, or zero_extract, we can do better. */
I think this is okay for trunk, and for backports after waiting a week
or so for fallout. Thanks!
Segher