https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99083
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- The following ira-color.c piece has heuristics that get triggered differently: /* Return TRUE if spilling pseudo-registers whose numbers are in array REGNOS is better than spilling pseudo-registers with numbers in OTHER_REGNOS for reload with given IN and OUT for INSN. The function used by the reload pass to make better register spilling decisions. */ bool ira_better_spill_reload_regno_p (int *regnos, int *other_regnos, rtx in, rtx out, rtx_insn *insn) { .. #ifdef REG_ALLOC_ORDER if (hard_regno >= 0 && other_hard_regno >= 0) return (inv_reg_alloc_order[hard_regno] < inv_reg_alloc_order[other_hard_regno]); #else if (call_used_count != other_call_used_count) return call_used_count > other_call_used_count; #endif return false; } it somehow reads to me as if that should have tested HONOR_REG_ALLOC_ORDER instead? Not sure how likely it is that we run into this (last) condition. Interestingly x86 defines ADJUST_REG_ALLOC_ORDER.