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.