On 17/04/15 05:58 AM, Georg-Johann Lay wrote:
I allowed me to CC Vladimir; maybe he can propose how the backend can
describe an efficient, constraint-based solution. The problem is
about expanders producing insns with non-fixed hard-regs as in/out
operands or clobbers. This includes move insn from non-generic
address spaces which require dedicated hard regs. Issue is about
correctness and efficiency of generated code.
I might be wrong but I think you have a bloated code because you use
scratches. I already told several times that usage of scratch is always
a bad idea. It was a bad idea for an old RA and is still a bad idea for
IRA. The usage of scratches should be prohibited, probably we should
write it somewhere. It is better to use just a regular pseudo instead.
Why it is a bad idea? Because IRA (or the old global RA) does not take
them into account *at all*. It means that IRA might think that there
are enough registers for pseudos but in reality it is wrong because of
scratches in live range of the pseudos.
If it is not the case I should investigate why you have a bloated code
and small test would help here.
Thanks, I hope my comments will be useful.