Richard Henderson schrieb:
On 06/14/2011 02:29 PM, Georg-Johann Lay wrote:

I tested on some handcrafted examples and on the code attached to
PR46278. The generated code looked very good and so I started
regression testing but found at spill fail in
 gcc.c-torture/compile/950612-1.c

I reproduced this today.

The Problem is that we really have run out of registers.  X and Z
are both in use, and we're attempting to spill them for caller-save.
There is no register in which to load fp+158 so that we can save
either X or Z.

Thanks for the analysis, that makes thinks clearer.

But I still wonder what's the very problem. Any architecture has limited reg+const addressing and limited number of address registers. I definetely saw architectures run out of registers and reload manages to access stack beyond reg+maxoff without any hacks and clear and straight forward backend.

Bigger machines definetely have bigger maxoff and more address regs, but the software that's intended to run on them is considerably more complicated. Yet gcc doesn't run into problems and reload can cope with that.

You're going to have to have some support for fp+large somewhere.

So there must be something fundamentally different between avr and other ports?

Is there a minimum requirement for add<pmode>3 insn like "r,r,n" alternative so that it can add a const without reload?

Johann

r~

Reply via email to