Richard Henderson wrote:
Ian Lance Taylor wrote:
Michael Eager <[EMAIL PROTECTED]> writes:

I'm running into a situation where reload is replacing
a pseudo-register in an insn with a memory reference.
The problem is that this is happening in a memory ref.

The initial pattern is something like

(set (reg/v:SI 1) (mem/s:SI (plus:SI
    (reg/f:SI 30)
    (const_int 4)) ))

After reload, this becomes

(set (reg/v:SI 1) (mem/s:SI (plus:SI
    (mem/f/c:SI (plus:SI (reg/f:SI 19) (const_int -2))
        (const_int 4))

The reg-equiv for pseudo-reg 30 is the mem ref in the middle.

Any idea about why this might be happening, or, better,
how to get reload to generate a load from reg-equiv to a reg
rather than replace the pseudo-reg with the reg-equiv?

This is a normal occurrence during the course of reload.  If this
escapes from reload, it suggests that your GO_IF_LEGITIMATE_ADDRESS
macro is incorrectly accepting a MEM as a memory address, or that your
insn operand predicate is somehow accepting it.

Another possibility is illegal rtl sharing.

If you mean that an rtx would be pointed to by two different
insn's, how would that happen?  (Excluding someone mucking
things up deliberately or accidentally.)


--
Michael Eager    [EMAIL PROTECTED]
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

Reply via email to