Dave Korn wrote:
When regclass determines that placing an operand into either one of several register classes would have the same cost, it picks the numerically highest one in enum reg_class ordering.
One possible solution is to give the special registers a higher REGISTER_MOVE_COST to discourage their use.
Another solution is to use ! and ? in the constraints to increase the cost of alternatives that are inconvenient.
There is also CLASS_LIKELY_SPILLED_P which is supposed to discourage local-alloc from using registers in single-reg classes. At least there is code for this in gcc-2.95.3. It looks like things have changed in this area since then.
-- Jim Wilson, GNU Tools Support, http://www.specifix.com