On Tue, Aug 14, 2012 at 10:36 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> Patch aims to fix instability introduced by first scheduler on x86. In >> particular it targets following list: >> >> [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46843 >> [2] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46829 >> [3] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36680 >> [4] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42295 >> >> Main idea of this activity is mostly to provide user a possibility to >> safely turn on first scheduler for his codes. In some cases this could >> positively affect performance, especially for in-order Atom. >> >> It would be great to hear some feedback from the community about the change. > > The 46829 failure is due to combine pass blindly propagating r8 into > divmod instruction. This is invalid for divmod, which expects ax > there. > This can be fixed by introducing "ax_register_operand" predicate, but > I think that combine shouldn't propagate hard registers. This blocks > register allocator, and we have many passes that handle propagation of > hard registers after IRA much more effectively. > > Various "*_not_xmm0_*" predicates were introduced just to fight this > issue. They would be immediately obsolete with above combine change. > > IMO, preventing combine to propagate hard regs will fix 90% of spill > failures on x86. Probably, we can live with the check that propagated hard register really satisfies operand constraint. Jakub, do you have any opinion here? Uros.