https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64208
Yvan Roux <yroux at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC| |yroux at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |yroux at gcc dot gnu.org --- Comment #2 from Yvan Roux <yroux at gcc dot gnu.org> --- Regression was introduced on trunk and 4.9 branch by fix of PR rtl-optimization/60969 and then workaround by r211798 (-fuse-caller-save enable for ARM). The PR fix changes some IRA cost which makes it choose a IWMMXT_REGS (instead of a GENERAL_REGS one) for the result of iwmmxt_arm_movdi insn and the alternatives of this pattern make LRA stuck in a loop. The -fuse-caller-save patch fixed the issue because it adds IP and CC cloobers to CALL_INSN_FUNCTION_USAGE, which changes the register allocation (a GENERAL_REGS is selected this time), but the real issue is in the alternatives description of iwmmxt_arm_movdi insn. I've a patch for it that I'll submit.