This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: SH: PR target/24445
Kaz Kojima <kkojima@rr.iij4u.or.jp> 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