Fix PR64876, regressions in powerpc64 Go testsuite

Jakub Jelinek jakub@redhat.com
Thu Feb 5 10:32:00 GMT 2015


On Thu, Feb 05, 2015 at 08:59:01PM +1030, Alan Modra wrote:
> On Thu, Feb 05, 2015 at 08:12:25AM +0100, Jakub Jelinek wrote:
> > On Thu, Feb 05, 2015 at 02:09:54PM +1030, Alan Modra wrote:
> > > Jakub, was your suggestion to use get_last_insn_anywhere() based on
> > > not wanting to expose details that should be internal to
> > > emit-rtl.[ch]?
> > 
> > Yes.  But if it doesn't work for what you want, either add a new accessor or
> > use it directly.
> 
> Thanks, I'll use it directly now and have a patch in the works to tidy
> m32c.c and rs6000.c.
> 
> David, here is the revised patch.  Bootstrapped etc. powerpc64-linux,
> and fixes a few more Go testsuite failures compared to the last one..
> 
> 	PR target/64876
> 	* config/rs6000/rs6000.c (chain_already_loaded): New function.
> 	(rs6000_call_aix): Use it.
> 
> Index: gcc/config/rs6000/rs6000.c
> ===================================================================
> --- gcc/config/rs6000/rs6000.c	(revision 220433)
> +++ gcc/config/rs6000/rs6000.c	(working copy)
> @@ -32919,7 +32919,29 @@ rs6000_legitimate_constant_p (machine_mode mode, r
>  }
>  
>  
> +/* Return TRUE iff the sequence ending in LAST sets the static chain.  */
>  
> +static bool
> +chain_already_loaded (rtx_insn *last)
> +{
> +  for (; last != NULL; last = PREV_INSN (last))
> +    {
> +      if (NONJUMP_INSN_P (last))
> +	{
> +	  rtx patt = PATTERN (last);
> +
> +	  if (GET_CODE (patt) == SET)
> +	    {
> +	      rtx lhs = XEXP (patt, 0);
> +
> +	      if (REG_P (lhs) && REGNO (lhs) == STATIC_CHAIN_REGNUM)
> +		return true;
> +	    }

Shouldn't you stop at CALL_INSNs?  I mean in that case it would load the
static chain for the other call and not the current one.
Or do you have some guarantee that is in yet another sequence?

	Jakub



More information about the Gcc-patches mailing list