On 18 March 2015 at 12:42, Yvan Roux wrote: > HI Kyrill, > > On 18 March 2015 at 11:24, Kyrill Tkachov wrote: >> Hi Yvan, >> >> >> On 18/03/15 10:19, Yvan Roux wrote: >>> >>> Hi, >>> >>> This is a fix for PR64208 where LRA loops when dealing with >>> iwmmxt_arm_movdi insn. As explain in the PR, the issue 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 changes in IRA cost made by PR60969, changed the register class of >>> this insn output from GENERAL_REGS to IWMMXT_REGS, and the >>> redundancies in the insn pattern alternatives description force LRA to >>> reload the pseudo, which generates the same iwmmxt_arm_movdi insn, >>> which can't be resolved, and so on ... >>> >>> Removing the redundancies fixes the issue, as LRA find that >>> alternative 8 (Uy => y) matches. >>> >>> This issue is present in 4.9 branch, but latent on trunk (the >>> clobbering of IP and CC information added during -fuse-caller-save >>> patch changed the register allocation). >>> >>> Cross compiled and regression tested on ARM targets (but not on an >>> IWMMXT one), is it ok for trunk and 4.9 branch ? >>> >>> Rq: I think that adding IP and CC clobbers to >>> CALL_INSN_FUNCTION_USAGE, as specified by AAPCS, in 4.9 branch is >>> something we need too, I've a patch for that if you agree on that. >>> >>> Thanks, >>> Yvan >>> >>> 2105-03-17 Yvan Roux >>> >>> PR target/64208 >>> * config/arm/iwmmxt.md ("*iwmmxt_arm_movdi"): Cleanup redundant >>> alternatives. >> >> >> As a general note, I think this patch should include the testcase from the >> PR. >> I can see that it's fairly self-contained. > > Yes, I wanted to find one that exhibits the issue on trunk as the PR > testcase doesn't, but don't find one so far. If it's fine to include > a testcase that don't fail without that patch on trunk, I can include > it. Here is the patch with the testcase. Cheers, Yvan gcc/ 2105-03-18 Yvan Roux PR target/64208 * config/arm/iwmmxt.md ("*iwmmxt_arm_movdi"): Cleanup redundant alternatives. gcc/testsuite/ 2105-03-18 Yvan Roux PR target/64208 * gcc.target/arm/pr64208.c: New test.