This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix PR64876, regressions in powerpc64 Go testsuite
- From: Jakub Jelinek <jakub at redhat dot com>
- To: David Edelsohn <dje dot gcc at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 5 Feb 2015 11:31:53 +0100
- Subject: Re: Fix PR64876, regressions in powerpc64 Go testsuite
- Authentication-results: sourceware.org; auth=none
- References: <20150203135735 dot GJ14796 at bubble dot grove dot modra dot org> <CAGWvnykygYkakPVTASG_UuGM=f7tXPSdnUzS-seMe=gB3EUqhQ at mail dot gmail dot com> <20150204001605 dot GL14796 at bubble dot grove dot modra dot org> <CAGWvnykMMtzV6n54cWsa16u53MiRLE1FNEKScvvagK_wv9qUww at mail dot gmail dot com> <20150205033954 dot GR14796 at bubble dot grove dot modra dot org> <20150205071225 dot GD1746 at tucnak dot redhat dot com> <20150205102901 dot GU14796 at bubble dot grove dot modra dot org>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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