Kaz Kojima <[EMAIL PROTECTED]> writes: > Like this? > > @@ -2861,6 +2861,12 @@ expand_call (tree exp, rtx target, int i > > If they refer to the same register, this move will be a no-op, > except when function inlining is being done. */ > + /* We have to copy a return value in a CLASS_LIKELY_SPILLED hard > + reg to a plain register. */ > + if (REG_P (valreg) > + && HARD_REGISTER_P (valreg) > + && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (valreg)))) > + valreg = copy_to_reg (valreg); > emit_move_insn (target, valreg); > > /* If we are setting a MEM, this code must be executed. Since it is
In general, yes. But looking at it we should probably only call copy_to_reg if TARGET is not itself a pseudo-register. And I think I would put the new code before the "TARGET and VALREG cannot be equal" comment. That patch is OK if it works and passes testing, and if you add a test case and a ChangeLog entry. Thanks. Ian