On Tue, 3 May 2011, Michael Matz wrote:

> Hi,
> 
> On Tue, 3 May 2011, Richard Guenther wrote:
> 
> > --- 5858,5890 ----
> >   
> >         /* If these are the same operation types, we can associate them
> >      assuming no overflow.  */
> > !       if (tcode == code)
> > !   {
> > !     double_int mul;
> > !     int overflow_p;
> > !     mul = double_int_mul_with_sign
> > !             (double_int_ext
> > !                (tree_to_double_int (op1),
> > !                 TYPE_PRECISION (ctype), TYPE_UNSIGNED (ctype)),
> > !              double_int_ext
> > !                (tree_to_double_int (c),
> > !                 TYPE_PRECISION (ctype), TYPE_UNSIGNED (ctype)),
> > !              false, &overflow_p);
> > !     overflow_p = (((!TYPE_UNSIGNED (ctype)
> > !                     || (TREE_CODE (ctype) == INTEGER_TYPE
> > !                         && TYPE_IS_SIZETYPE (ctype))) && overflow_p)
> > !                   | TREE_OVERFLOW (c) | TREE_OVERFLOW (op1));
> > !     if (!double_int_fits_to_tree_p (ctype, mul)
> > !         && ((TYPE_UNSIGNED (ctype) && tcode != MULT_EXPR)
> > !             || (!(TYPE_UNSIGNED (ctype) && tcode != MULT_EXPR)
> > !                 && (!TYPE_UNSIGNED (ctype)
> > !                     || (TREE_CODE (ctype) == INTEGER_TYPE
> > !                         && TYPE_IS_SIZETYPE (ctype))))))
> 
> Doubled "(TYPE_UNSIGNED (ctype) && tcode != MULT_EXPR)".  Clearer is:
> 
> if (!double_int_fits_to_tree_p (ctype, mul)
>     && ((TYPE_UNSIGNED (ctype) && tcode != MULT_EXPR)
>         || !TYPE_UNSIGNED (ctype)
>         || (TREE_CODE (ctype) == INTEGER_TYPE
>             && TYPE_IS_SIZETYPE (ctype))))

Indeed, fixed.

> I've tried to determine if it's otherwise an equivalent transformation but 
> became confused with your intermediate updating of the overflow_p flag.
> The new code sort of makes sense but I can't say if it's exactly what the 
> old code did :)

:)  Another question is why exactly the old code did what it did.

Richard.

Reply via email to