On 03/14/2011 06:10 PM, Richard Earnshaw wrote: > > On Sun, 2011-03-13 at 16:31 +0000, Andrew Stubbs wrote: >> This patch discourages the use of NEON for integer operations on ARM >> Cortex-A8. >> >> The problem is that transferring data from NEON/VFP registers to core >> registers is prohibitively expensive on A8. This should not affect >> Cortex-A9 in the same way. >> >> This change gives a 6% increase in performance on SPEC2000 crafty, on an >> imx51 board. >> >> An older version of the patch has been used for some time in the >> CodeSourcery and Linaro toolchains, so it's fairly well tested. >> >> OK (for stage 1)? >> >> Andrew > > There's no denying numbers like that, so I'm going to approve this for > stage 1, but I'm far from convinced that this isn't papering over other > problems.
Oh, I agree. I seem to recall we tried using REGISTER_MOVE_COST, but it didn't help. Ideally, we'd fix this in the register allocator and in lower-subreg, but I believe that would be a significantly larger project. You'd have to detect that if a certain pseudo is allocated to a NEON register, this would cause an expensive register move (because it's used in an insn that only allows GENERAL_REGS), and then recursively every other operation that involves this pseudo also needs to avoid NEON registers for the same reason. Doing this in lower-subreg would give the best results (splitting pseudos that shouldn't go into NEON regs and leaving the others alone), but it would also work to do it in IRA. Bernd