------- 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

Reply via email to