This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: state of 3.2.1-pre: how far from release?


	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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]