This is the mail archive of the
mailing list for the GCC project.
Re: Your change of September 11, 1998
- To: Richard Kenner <kenner at vlsi1 dot ultra dot nyu dot edu>
- Subject: Re: Your change of September 11, 1998
- From: Richard Henderson <rth at redhat dot com>
- Date: Mon, 15 Jan 2001 16:33:16 -0800
- Cc: gcc at gcc dot gnu dot org
- References: <10101160010.AA24815@vlsi1.ultra.nyu.edu>
On Mon, Jan 15, 2001 at 07:09:41PM -0500, Richard Kenner wrote:
> This is an a CALL_INSN where SET_SRC is a CALL. If we have it as a
> parellel of multiple sets, you first have the problem of where to put
> the byte offsets ...
We don't actually need the byte offsets past the calls to
emit_group_load and emit_group_store. Once we've done that
we have the structure safely in memory where we like it.
> ... but you also have to do sharing of the CALL RTL, much
> like the case of an ASM with multiple outputs. This seems like a mess.
Indeed. One solution was mentioned the last time this came
up is to represent this as
[(call (mem (symbol_ref "foo"))
(set (reg:DI 0) (call_return))
(set (reg:DI 1) (call_return))
(set (reg:DF 32) (call_return))]
where CALL_RETURN is an rtx that carries no information
except that it is an arbitrary value.
> Right, but how do you recommend we fix this?
I don't know. I don't really want to touch any of the function
call mechanisms this close to the 3.0 branch.
Since you keep mentioning note_stores, I assume that's where
the rtl checking failure ocurrs? If so, perhaps just teach it
to iterate over the parallel and return each hard reg in sequence.