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.

Reply via email to