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]

Re: Your change of September 11, 1998


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~

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