This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/31110] Problem while compiling gcc for mn10300-elf
- From: "law at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 27 Mar 2008 00:36:27 -0000
- Subject: [Bug target/31110] Problem while compiling gcc for mn10300-elf
- References: <bug-31110-14137@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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