This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix MULT_HIGHPART_EXPR folding (PR tree-optimization/56918)


On Fri, 12 Apr 2013, Jakub Jelinek wrote:

> On Thu, Apr 11, 2013 at 09:13:17PM +0200, Marc Glisse wrote:
> > On Thu, 11 Apr 2013, Jakub Jelinek wrote:
> > 
> > >The op1 - op2 line instead of multiplication is something that has been
> > >introduced in C++ double_int changes, but without the 2 * TYPE_PRECISION
> > >prec it would always return 0 or -1 anyway.
> > 
> > The comments on PREC in the rshift function really confused me.
> 
> Yeah, me too.  But if count == prec, the code always:
>   /* Zero / sign extend all bits that are beyond the precision.  */
>    
>   if (count >= prec)
>     {
>       *hv = signmask;
>       *lv = signmask;
>     }          
> which is definitely not what we want.  We want TYPE_PRECISION bits
> of the result zero resp. sign extended into the whole double_int precision,
> which for TYPE_PRECISION == HOST_BITS_PER_WIDE_INT is exactly the:
>   else if ((prec - count) >= HOST_BITS_PER_WIDE_INT)
>     {
>       *hv &= ~((HOST_WIDE_INT) (-1) << (prec - count - HOST_BITS_PER_WIDE_INT));
>       *hv |= signmask << (prec - count - HOST_BITS_PER_WIDE_INT);
>     }
> case, and for smaller TYPE_PRECISION it is the last case:
>   else
>     {
>       *hv = signmask;
>       *lv &= ~((unsigned HOST_WIDE_INT) (-1) << (prec - count));
>       *lv |= signmask << (prec - count);
>     }
> 
> > I have one question below.
> > >+	{
> > >+	  if (TYPE_PRECISION (type) != 2 * HOST_BITS_PER_WIDE_INT)
> > >+	    return NULL_TREE;
> > >+	  op1.wide_mul_with_sign (op2, false, &res, &overflow);
> > 
> > Why "false" and not something involving "uns"?
> 
> false was what rth used in his original code.  Looking at what is the
> difference, it seems unsigned_p only matters for the computation of
> overflow, and, MULT_HIGHPART_EXPR should never overflow, thus perhaps
> we should either have a dummy bool overflow_dummy; there and use it
> instead of &overflow, or just set overflow = false; afterwards.
> Preferences?

dummy_overflow.

Ok with that change.

Thanks,
Richard.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]