This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: state of 3.2.1-pre: how far from release?
- From: David Edelsohn <dje at watson dot ibm dot com>
- To: Michael Matz <matz at suse dot de>
- Cc: Geoff Keating <geoffk at geoffk dot org>, Richard Henderson <rth at redhat dot com>, Daniel Berlin <dan at dberlin dot org>, gcc at gcc dot gnu dot org
- Date: Wed, 06 Nov 2002 11:05:25 -0500
- Subject: Re: state of 3.2.1-pre: how far from release?
>>>>> Michael Matz writes:
Michael> I must be dense or something. But eliminate_regs_in_insn() is only for
Michael> converting eliminable hardregs into their target plus constant, like for
Michael> instance frame to stack pointer elimination. The changing from pseudo
Michael> regs into their reg_renumber[] hardregs is done by alter_reg().
Michael> I don't know how eliminate_regs_in_insn() should come
Michael> into play here (except maybe if r11 is somehow eliminable?).
reg 31 is the frame pointer, before elimination, so the first
force_reg moved a frame pointer offset address into a pseudo.
eliminate_regs_in_insn() first converts that instruction to:
(insn 1856 1853 16458 (parallel[
(set (reg:SI 4 r4)
(mem/s:SI (plus:SI (reg/f:SI 1 r1)
(const_int 520 [0x208])) [0 S4 A32]))
(set (reg:SI 5 r5)
(mem/s:SI (plus:SI (reg/f:SI 929)
(const_int 4 [0x4])) [0 S4 A32]))
(set (reg:SI 6 r6)
(mem/s:SI (plus:SI (reg/f:SI 929)
(const_int 8 [0x8])) [0 S4 A32]))
(set (reg:SI 7 r7)
(mem/s:SI (plus:SI (reg/f:SI 929)
(const_int 12 [0xc])) [0 S4 A32]))
] ) 322 {*rs6000.md:8764} (insn_list:REG_DEP_OUTPUT 1843 (insn_list:REG_DEP_OUTPUT 1846 (insn_list 1842 (insn_list:REG_DEP_ANTI 1849 (nil)))))
(nil))
Note that only the pseudo in the first operand was modified. Later
(plus (reg 1) (const_int 520))
is reloaded into a reg because the instruction does not accept an
offsettable address. Only the address in the first operand of the
parallel is substituted again. I have been trying to show the first
instance where not all pseudos are replaced.
David