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