https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108757
--- Comment #15 from Chip Kerchner <chip.kerchner at ibm dot com> --- How about this (from Peter's testcase)? Does it still have issues? It produces the same assembly. #define N 32 #define M 2 unsigned long int foo (unsigned long int a) { return (a - (N*M)) / N + M; }