This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [rs6000] Do not generate sibling call to nested function
- From: Segher Boessenkool <segher at kernel dot crashing dot org>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 18 Sep 2018 09:56:10 -0500
- Subject: Re: [rs6000] Do not generate sibling call to nested function
- References: <2045800.G86V45WoCa@polaris>
Hi!
On Mon, Sep 17, 2018 at 11:11:53AM +0200, Eric Botcazou wrote:
> more precisely, to a nested function that requires a static chain. The reason
> is that the sibling call epilogue may clobber the static chain register r11.
>
> Tested on PowerPC/Linux, OK for the mainline?
>
>
> 2018-09-17 Eric Botcazou <ebotcazou@adacore.com>
>
> * config/rs6000/rs6000.c (rs6000_function_ok_for_sibcall): Return false
> if the call takes a static chain.
> --- config/rs6000/rs6000.c (revision 264342)
> +++ config/rs6000/rs6000.c (working copy)
> @@ -24332,6 +24332,10 @@ rs6000_function_ok_for_sibcall (tree dec
> {
> tree fntype;
>
> + /* The sibcall epilogue may clobber the static chain register. */
> + if (CALL_EXPR_STATIC_CHAIN (exp))
> + return false;
> +
> if (decl)
> fntype = TREE_TYPE (decl);
> else
We could probably make sibcalls work with static chain, but that is most
likely not worth it. Could you change the comment to say something like
that?
Approved for trunk and backports. Thanks!
Segher