https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119552
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- widening_mul is unfortunately too late here. The normal widening_mul divmod optimization can handle not just c = a / b; d = a % b; or d = a % b; c = a / b; but also c = a / b; ... hundreds of stmts d = a % b; or d = a % b; if (...) { if (...) c = a / b; } If we handle it after the bitintlower pass, we can handle only the first 2 cases (i.e. where it is really adjacent) and nothing else.