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]
Other format: [Raw text]

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


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