register move costs broken

Alan Modra alan@linuxcare.com.au
Tue Feb 13 22:41:00 GMT 2001


On Tue, 13 Feb 2001, Jeffrey A Law wrote:

>   In message < Pine.LNX.4.21.0102141611450.32094-100000@front.linuxcare.com.au >y
> ou write:
>   > serial.c: In function `change_speed':
>   > serial.c:1803: Insn does not satisfy its constraints:
>   > (insn 1409 1406 649 (set (reg:DI 60 SAR [269])
>   >         (mem:DI (plus:DI (reg/f:DI 30 %r30)
>   >                 (const_int -248 [0xffffff08])) 0)) 123 {*pa.md:3157} (nil)
>   >     (nil))
>   > serial.c:1803: confused by earlier errors, bailing out
> Note there's a bug either in the PA backend or reload which is closely
> related to this failure.
> 
> In particular if we have a multiply which is then used as a shift count
> in a variable shift instruction, then we can end up in a situation where
> we need to copy from an FP register into the SAR register.

In this case it wasn't later used in a variable shift.

lreg dump showed every register class cost at 20000 for register 269, then
;; Register 269 in 60.
which is SAR unless I'm mistaken.

All costs the same looked highly irregular to me, which is why I decided
to investigate the effect of backing out Jan's patch.

Alan
-- 
Linuxcare.  Support for the Revolution.



More information about the Gcc-bugs mailing list