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.