Help with reload
Jeff Law
law@redhat.com
Tue Jun 22 18:57:00 GMT 2010
On 06/22/10 08:52, Revital1 Eres wrote:
> Hello,
>
> I have a question regarding code generation for a new target I'm working
> on.
> I am using GCC 4.6.
>
> In reload pass the following first instruction is replaced with the
> second one after spilling reg 182 to the stack. The problem is that
> the generated new instruction does not have a valid address format and
> I'm not sure why it was considered as a valid replacement.
> Any help on how to resolve this is appreciated.
>
> (insn 282 150 151 13 jctrans.c:109 (set (reg:SI 12 r12)
> (mem/s:SI (plus:SI (reg/v/f:SI 182 [ incomp ])
> (const_int 8 [0x8])) [6 *incomp_85 S4 A32])) -1 (nil))
>
> (insn 282 150 151 13 jctrans.c:109 (set (reg:SI 12 r12)
> (mem/s:SI (plus:SI (mem/c:SI (plus:SI (reg/f:SI 63 r63)
> (const_int -12 [0xfffffff4])) [56 %sfp+-12 S4 A32])
> (const_int 8 [0x8])) [6 *incomp_85 S4 A32])) -1 (nil))
>
What's happening is pseudo 182 is not getting a hard reg, and is thus on
the stack (see reg_equiv_mem). Reload will substitute the MEM for the
unassigned pseudo.
Check your GO_IF_LEGITIMATE_ADDRESS. You might also look at your
REGNO_OK_FOR_BASE_P and whether or not it handles a strict & non-strict
variant properly.
Jeff
More information about the Gcc
mailing list