[Bug target/31110] Problem while compiling gcc for mn10300-elf
law at redhat dot com
gcc-bugzilla@gcc.gnu.org
Thu Mar 27 00:37:00 GMT 2008
------- Comment #6 from law at redhat dot com 2008-03-27 00:35 -------
Subject: Re: Problem while compiling gcc for mn10300-elf
nickc at redhat dot com wrote:
> ------- Comment #5 from nickc at redhat dot com 2008-03-26 14:16 -------
> Subject: Re: Problem while compiling gcc for mn10300-elf
>
> Hi Jeff,
>
>> What does CLASS, MODE and IN look like?
>
> Err, presumably you are talking about these values when
> default_secondary_reload() triggers the abort ?
Yea.
>
> The CLASS is DATA_OR_EXTENDED_REGS.
>
> The MODE is SImode.
>
> IN looks like this:
>
> (plus:SI (reg/f:SI 9 sp)
> (const_int 1100 [0x44c]))
Hmm, so why isn't this caught by this code in secondary_reload_class:
/* We can't directly load sp + const_int into a data register;
we must use an address register as an intermediate. */
if (class != SP_REGS
&& class != ADDRESS_REGS
&& class != SP_OR_ADDRESS_REGS
&& class != SP_OR_EXTENDED_REGS
&& class != ADDRESS_OR_EXTENDED_REGS
&& class != SP_OR_ADDRESS_OR_EXTENDED_REGS
&& (in == stack_pointer_rtx
|| (GET_CODE (in) == PLUS
&& (XEXP (in, 0) == stack_pointer_rtx
|| XEXP (in, 1) == stack_pointer_rtx))))
return ADDRESS_REGS;
In fact, I'm having trouble seeing why the clause which returns
DATA_REGS/DATA_OR_EXTENDED_REGS exists at all.
Am I being overly dense today?
Jeff
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31110
More information about the Gcc-bugs
mailing list