http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46793
--- Comment #3 from Steven Bosscher <steven at gcc dot gnu.org> 2010-12-03 21:05:46 UTC --- The bug is in the architecture, not in the scheduling pass. You cannot expect scheduling before register allocation to always yield code that you can register-allocate with just 3 general registers available. Enabling it only for AMD64 is not a work-around, it's the only proper thing to do if you want to enable the pre-RA scheduling pass by default. And there is still -fsched-pressure that you could try. But I doubt you will get a patch approved to enable scheduling for 32-bits ix86. The failure you are seeing can be triggered quite easily even _without_ scheduling enabled. Just search bugzilla for all the "unable to find spill register" bugs on i386, this one is far from unique.