Hi, This patch series addresses a variety of issues in LRA that the MIPS target has exposed but are not specific to MIPS.
The fixes are primarily related to how WORD_REGISTER_OPERATIONS needs to be accounted for in LRA SUBREG reloading. In almost all cases LRA needs to reload the inner REG/MEM/PLUS rather than simplify to use the outer mode. Following detailed analysis of the code in simplify_operand_subreg there is scope for various improvements around this area. These changes will however be far too invasive for GCC 7 in stage 4. Notes on the current implementation are here: https://gcc.gnu.org/ml/gcc/2017-02/msg00000.html Background discussion on the fixes is here: https://gcc.gnu.org/ml/gcc/2017-01/msg00130.html Original bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78660 Some fixes made in this series are written to ensure safety and minimize impact. As such further changes including reworking the fixes are likely but as part of GCC 8 development. This whole patch series has been run through bootstrap and regression test on mips64el-linux-gnu. @Vladimir: Although you have given approval in principle to some of these already please could you double check as I have added comments in some cases. Patch 5 has not been posted before in any form. @Eric: thanks for the offer of sparc testing; please can you let me know if there are any issues? I'm running x86_64 testing too but most of the code won't trigger there as it is not a WORD_REGISTER_OPERATIONS target. If anyone can give a recipe for bootstrapping ARM on a compile farm machine I will do that but I have no idea how to get the ARM multiarch stuff to work in Ubuntu. Thanks, Matthew Matthew Fortune (4): Handle WORD_REGISTER_OPERATIONS when reloading (subreg (reg)) Tighten condition for converting SUBREG reloads from OP_OUT to OP_INOUT Support WORD_REGISTER_OPERATIONS requirements in simplify_operand_subreg Partial revert of r243782 to restore previous behavior Robert Suchanek (1): Ensure the mode used to create split registers is suppported gcc/lra-constraints.c | 61 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 8 deletions(-) -- 2.2.1