https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61734
--- Comment #13 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > Before your last fix both 32bit and 64bit versions of .original look similar > except a condition. We have (a - b > 0) for 64 bit and (a > b) for 32bit. That's obsolete though, you should look at what happens after the fix, which should be equivalent to what happened before r210979. But the reason is very likely the cast to (long unsigned int), which can be stripped for 32-bit but not for 64-bit long ints, which blocks the pattern matching in the latter case.