On 07/07/11 22:08, Richard Sandiford wrote: > Sure, I understand that returns does more than return on ARM. > What I meant was: we'd normally want that other stuff to be > expressed in rtl alongside the (return) rtx. E.g. something like: > > (parallel > [(return) > (set (reg r4) (mem (plus (reg sp) (const_int ...)))) > (set (reg r5) (mem (plus (reg sp) (const_int ...)))) > (set (reg sp) (plus (reg sp) (const_int ...)))])
I've thought about it some more. Isn't this just a question of definitions? Much like we implicitly clobber call-used registers for a CALL rtx, we might as well define RETURN to restore the intersection between regs_ever_live and call-saved regs? This is what its current usage implies, but I guess it's never been necessary to spell it out explicitly since we don't optimize across branches to the exit block. Bernd