https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83358
--- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- The following fixes this particular issue: diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h index 312467d9788..00f1dae9085 100644 --- a/gcc/config/i386/x86-tune-costs.h +++ b/gcc/config/i386/x86-tune-costs.h @@ -2345,7 +2345,7 @@ struct processor_costs core_cost = { {COSTS_N_INSNS (8), /* cost of a divide/mod for QI */ COSTS_N_INSNS (8), /* HI */ /* 8-11 */ - COSTS_N_INSNS (11), /* SI */ + COSTS_N_INSNS (13), /* SI */ /* 24-81 */ COSTS_N_INSNS (81), /* DI */ COSTS_N_INSNS (81)}, /* other */ Perhaps the div costs are a bit too tight in general?