On Fri, 19 May 2017, Alexander Monakov wrote: > On Fri, 19 May 2017, Marek Polacek wrote: > > > I think it's possible to keep this folding, note that it's valid to > > > transform to > > > > > > (n * 1 * z) * 500000 > > > > > > (i.e. accumulate multiplications on the outermost factor) > > (to be precise, if the multiplication is done in a signed type and the middle > constant factor was a negated power of two, the sign change needs to remain: > > a * -4 * b * 2 > > needs to be transformed to > > a * -1 * b * 8 )
Shouldn't that only be the case if the middle constant was -1 and the outer constant was 1? If a * -4 * b is INT_MIN, a * b won't overflow and so a * b * -8 should be a safe transformation. (You also need to avoid overflows in accumulating things on the outermost factor.) -- Joseph S. Myers jos...@codesourcery.com