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