This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: question regarding regrename and failure of 950704-1.c on main
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: law at redhat dot com
- Cc: rth at redhat dot com, gcc at gcc dot gnu dot org
- Date: Thu, 9 May 2002 17:53:19 -0400 (EDT)
- Subject: 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)