state of 3.2.1-pre: how far from release?
David Edelsohn
dje@watson.ibm.com
Wed Nov 6 10:59:00 GMT 2002
>>>>> Michael Matz writes:
Michael> This can't be done. We basically have this situation:
Michael> op1 = (reg 929)
Michael> op2 = (plus (reg 929) (const 4))
Michael> op3 = (plus (reg 929) (const 8))
Michael> We also know, that (reg 929) == (plus (reg r11) 520).
Your typos when copying the example are confusing the situation.
(reg 929) = (plus (reg r31) (const_int 520))
r31 = frame pointer
However, the instruction does not allow an offsettable address as the
source, so the address sum eventually gets reloaded into a hard reg, e.g.,
r17.
In other words, we eventually have
(reg 929) = (reg r17)
replacing 929 with 17 can be performed by overwriting the reg. The other
pluses are implicit in the instruction because the sequence of registers
is loaded from a sequence of memory addresses.
Michael> As you said this works in HEAD, does anybody know if this issue really is
Michael> fixed there, or does it simply not happen there?
I do not see any changes in reload which would fix this. HEAD
seems to have complete the substitution prior to elimination. Is global
alloc just getting this right prior to reload?
David
More information about the Gcc
mailing list