On Mon, 17 Jul 2017, Marc Glisse wrote: > > +/* Combine successive multiplications. Similar to above, but handling > > + overflow is different. */ > > +(simplify > > + (mult (mult @0 INTEGER_CST@1) INTEGER_CST@2) > > + (with { > > + bool overflow_p; > > + wide_int mul = wi::mul (@1, @2, TYPE_SIGN (type), &overflow_p); > > + } > > + (if (!overflow_p || TYPE_OVERFLOW_WRAPS (type)) > > I wonder if there are cases where this would cause trouble for saturating > integers. The only case I can think of is when @2 is -1, but that's likely > simplified to NEGATE_EXPR first.
Ah, yes, I think if @2 is -1 or 0 then we should not attempt this transform for either saturating or sanitized types, just like in the first patch. I think wrapping the 'with' with 'if (!integer_minus_onep (@2) && !integer_zerop (@2))' works, since as you say it should become a negate/zero anyway? Alexander