https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109626

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
We apply from match.pd (-A) * (-B) -> A * B and -(A - B) -> B - A where
there are no constraints on overflow present for these patterns.

We go

(int) (v2_6(D) - _2) * (int) - v1_5(D)

-> (int) (- (v2_6(D) - _2)) * (int) v1_5(D)

-> (int) (_2 - v2_6(D)) * (int) v1_5(D)

I think the issue must be in (-A) * (-B) -> A * B, but I can't quite nail it.
To result in -1 * INT_MIN we'd have to come from 1 * INT_MIN but then the
negation of INT_MIN would already be problematic.

Reply via email to