A few people reported that the patch broke i686.  I am going to work on the patch more.  Meanwhile I've reverted the patch.

On 03/09/2018 11:16 AM, Vladimir Makarov wrote:
The following patch fixes

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83712

It is another "cannot find a spill reg for reload" problem.  LRA has already a code splitting hard reg live ranges to avoid such problem.  This code is in LRA inheritance pass.  Unfortunately, the code does splitting for small class pseudos only.  This PR is a more complicated code and it is hard to adapt the inheritance sub-pass to reliably solve such problems.

To fix the PR, I added a sub-pass which works in very rare cases after we already found that we have no hard regs for a reload pseudo.  It tries to split a hard reg live range for the pseudo. After that it tries again to assign a hard reg to the pseudo.  The patch changes LRA-subpass flow for this.  I hope that the patch will finally solved all such problems but I am not sure to be completely certain.

The patch was bootstrapped and tested on x86-64 and ppc64.

Committed as rev. 258390.


Reply via email to