https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82853
--- Comment #20 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Testcase I've been eyeballing so far: unsigned f1 (unsigned x) { return (x % 679U) == 0; } unsigned f2 (unsigned x, unsigned *y) { *y = x / 679U; return (x % 679U) == 0; } unsigned f3 (unsigned x) { return (x % 1738U) == 0; } void bar (void); void f4 (unsigned x) { if (x % 3 == 0) bar (); } void f5 (unsigned x) { if (x % 3 == 1) bar (); } void f6 (unsigned x) { if (x % 3 == 2) bar (); }