This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Illegal code generation: gcc-3.2 --target=m68k-elf


On Mon, Oct 21, 2002 at 07:22:24PM -0400, Peter Barada wrote:
> (insn 690 689 691 (set (subreg:SI (reg/v:HI 40) 0)
>         (plus:SI (subreg:SI (reg/v:HI 40) 0)
>             (const_int 1 [0x1]))) 99 {*addsi3_5200} (nil)
>     (nil))
> 
> Looks like combine put the two instructions together, but there is no
> instruction in the ColdFire that can allow for this to happen (I guess
> it found the pattern for addhi3 and assumed that it is valid for
> ColdFire?).

No.  The constraints for addsi3_5200 say it's valid.  And indeed
it would be if R40 were allocated to a register.

> (insn 690 1150 691 (set (mem:SI (plus:SI (reg/f:SI 14 %a6)
>                 (const_int -428 [0xfffffe54])) [0 rotate S4 A16])
>         (plus:SI (mem:SI (plus:SI (reg/f:SI 14 %a6)
>                     (const_int -428 [0xfffffe54])) [0 rotate S4 A16])
>             (reg:SI 0 %d0))) 99 {*addsi3_5200} (nil)
>     (nil))
> 
> Now the RTL is bogus since the store to memory is *SImode* wide
> whereas the original variable is HImode.

Are you _sure_ you're showing us everything?  There should have
been some inefficient jiggery-pokery with subreg reloads.  This
should not have been the real stack slot for R40, but somewhere
else.



r~


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]