On Tue, 18 Dec 2018 03:08:51 -0600 Segher Boessenkool <seg...@kernel.crashing.org> wrote:
> Hi! > > On Fri, Dec 14, 2018 at 03:22:13PM +0000, Jozef Lawrynowicz wrote: > > 2018-12-14 Jozef Lawrynowicz <joze...@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? No not for this one, I just spotted the timeouts in the GCC testsuite. > > > > 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! Thanks, applied to trunk. Jozef