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: Geoff Keating <geoffk at geoffk dot org>, Richard Henderson <rth at redhat dot com>, Daniel Berlin <dan at dberlin dot org>
- Cc: gcc at gcc dot gnu dot org
- Date: Tue, 05 Nov 2002 17:54:18 -0500
- Subject: Re: state of 3.2.1-pre: how far from release?
- References: <jbuck@synopsys.com> <200211052113.QAA29762@makai.watson.ibm.com>
Let me explain my current understanding of the bug and maybe
someone can provide some more insight. The bug occurs on the GCC 3.2
branch, but not on the trunk.
On the GCC 3.2 branch, reload_as_needed() is entered with the
instruction still containing pseudos. eliminate_regs_in_insn()
substitutes a hard reg for the first use of the pseudo, but leaves the
others untouched. eliminate_regs_in_insn() recognizes the instruction and
recog_data.n_operands is 3, so it only loops over three locations. On the
trunk, the instruction already has hard regs substituted when
reload_as_needed() is called.
Are pseudos suppose to be shared so that one substitution replaces
all instances? Shared within an instruction? The parallel is generated
using:
for (i = 0; i < count; i++)
XVECEXP (operands[3], 0, i)
= gen_rtx_SET (VOIDmode, gen_rtx_REG (SImode, regno + i),
adjust_address (op1, SImode, i * 4));
and adjust_address() calls copy_rtx() on the addr in the memref. Maybe
the bug is calling adjust_address() to generate a sequence of memory
addresses in a single instruction.
Thanks, David