[rs6000] Do not generate sibling call to nested function

Kyrill Tkachov kyrylo.tkachov@foss.arm.com
Mon Sep 24 13:20:00 GMT 2018


Hi Eric,

On 18/09/18 15:56, Segher Boessenkool wrote:
> 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!
>

I'm seeing a testism on the GCC 7 branch due to the noipa attribute in the testcase.
I think it doesn't exist in GCC 7 so we're getting a test for excess errors FAIL:

warning: 'noipa' attribute directive ignored [-Wattributes]

Any chance we can adjust the testcase?

Thanks,
Kyrill

>
> Segher



More information about the Gcc-patches mailing list