------- Comment #5 from wilson at gcc dot gnu dot org 2010-04-14 21:57 ------- I think the first part of the solution here is to make ira stop handling zero-size classes as ones that have a potential register pressure problem.
The second part, is that I think we can make ar.lc a fixed register. I think the only reason why it is call-saved is because the ABI says it is call-saved, but the ia64 prologue code has to handle the register specially anyways, so it doesn't matter whether we mark it as call-saved or call-clobbered. Also, all references to it are generated as hard-registers, so it is OK for it to be fixed. There is the off change that someone is incorrectly using a 'e' constraint to put values in the register. We should check for that in a few obvious places like the linux kernel and glibc. If this is true, then we will have to split the 'e' class in two, and ar.lc will have to remain in 'e' and the other two regs will have to move. I did a little checking to see if making ar.lc fixed would work, and I noticed that the handling of doloops is wrong. The default handling is to reject loops with calls, but since ia64 ar.lc is call-saved, we should allow them. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43520