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: Reload generating memory ref in memory ref


Ian Lance Taylor wrote:
Michael Eager <eager@eagercon.com> 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.



r~



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