https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87311
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- /* -A - 1 -> ~A */ (simplify (minus (convert? (negate @0)) integer_each_onep) (if (!TYPE_OVERFLOW_TRAPS (type) && tree_nop_conversion_p (type, TREE_TYPE (@0))) (bit_not (convert @0)))) I would have expected at least -ftrapv to disable this transformation, but I see "i = ~i" in the .original dump...