https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114660
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think we've been discussing an idea of turning on flag_wrapv very late among the GIMPLE passes and reassociate again. Because RTL also kind of assumes flag_wrapv, there is no difference between signed/unsigned addition/subtraction/non-widening multiplication. Though, a question is if it wouldn't screw up range info for use during expansion too much. Other option is to rewrite into unsigned operations only what we've successfully reassociated in the late reassoc pass.