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: question regarding regrename and failure of 950704-1.c on main


> In message <200205092121.g49LLNtM005497@hiauly1.hia.nrc.ca>, "John David Anglin
> " writes:
>  > > But why did we end up with DImode value in reg23?  That's the 
>  > > underlying problem -- HARD_REGNO_MODE_OK should have rejected
>  > > putting a DImode value in reg23.
>  > 
>  > Two long longs are passed to f (x, y) in r23-r24 and r25-r26.
> True, but if you look you'll find that they're packed in the wrong manner
> as register arguments (ie the order for passing them in registers is not
> the order in which we want to use them elsewhere).  They get copied out and
> repacked into proper order immediately after the prologue.

This is the rtl for one of the copies (%r23):

(insn 6 7 4 (set (reg/v:DI 2 %r2 [96])
        (reg:DI 23 %r23)) 118 {*pa.md:3247} (nil)
    (expr_list:REG_EQUIV (mem/f:DI (plus:SI (reg/f:SI 3 %r3 [96])
		(const_int -48 [0xffffffd0])) [2 y+0 S8 A64])
	(nil)))

It doesn't appear that they are being reordered.  Since the test passes
with the early clobber added to the add pattern, I the packing for the
call must be mucked up as well.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)


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