https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107131
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note there is a missed optimization here (unrelated to the wrong code): _32 = o_13(D) == 0; _35 = (long int) _32; _36 = -_35; _109 = (long long unsigned int) _36; _102 = _109 > 10439075533421201520; This should just be: _32 = o_13(D) == 0; _ = (long long unsigned int) _32; _109 = -_35; Let me file that as a seperate bug.