Your change of September 11, 1998
Richard Henderson
rth@redhat.com
Mon Jan 15 16:33:00 GMT 2001
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"))
(blah))
(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.
r~
More information about the Gcc
mailing list