On 09 August 2007 13:25, Rask Ingemann Lambertsen wrote:
> On Fri, Aug 03, 2007 at 03:49:32PM +0100, Dave Korn wrote:
>>
>> Yes, absolutely so, we already know that there are problems there. For
>> references, see the threads "Deep CSE bug!"[*] and "Bogus REG_EQUIV note
>> generation"[**] (subject line was wrong, should have been REG_EQUAL all
>> along) from June last year, where we got some way into analysing the
>> problem. I /think/ that the presence of REG_RETVAL in this particular
>> case is only tangential to the problem; from what I remember of the
>> discussion, this is just about Gcc incorrectly handling reg notes when it
>> decomposes multi-word-size-mode moves into individual word-sized moves.
>
> All examples so far have had CONST_DOUBLE in the REG_EQUAL note.
Yes, and? I don't see what you're getting at here.
>> Pranav, although there is indeed a bug in the mid-end here, from your
>> point of view the simple and effective workaround should be to implement a
>> movdi pattern (and movsf and movdf if you don't have them yet: it's an
>> absolute requirement to implement movMM for any modes you expect your
>> machine to handle) in the backend.
>
> If you look at the ia16 back end I posted, you'll notice that it only
> implements movXX for modes of 16 bits or less and AFAIK does not suffer from
> the CSE bug.
It maybe latent for other reasons, or you may not have triggered it yet, but
I wonder what kind of REG_EQUAL notes do you get when you start passing 32-
(or even 64-) bit values around in 16-bit registers?
cheers,
DaveK
--
Can't think of a witty .sigline today....