On Thu, Jul 25, 2024 at 4:09 PM Sam James <s...@gentoo.org> wrote:
>
> Andi Kleen <a...@linux.intel.com> writes:
>
> > From: Andi Kleen <a...@gcc.gnu.org>
> >
> > - Run the target_effective tail_call checks without optimization to
> > match the actual test cases.
> > - Add an extra check for external tail calls to handle targets like
> > powerpc that cannot tail call between different object files.
> > This one will also cover templates.
>
> Two trivial comments below.
>
> >
> > gcc/testsuite/ChangeLog:
> >
> >       PR testsuite/116080
> >       * g++.dg/musttail10.C: Use external tail call target check.
> >       * g++.dg/musttail6.C: Dito.
>
> s/Dito/Ditto/

One extra nit, It is much (~5x) more common to use "Likewise" rather
than Ditto in GCC's changelogs.
[apinski@xeond2 gcc]$ git grep Ditto *{,/}ChangeLog*|wc -l
41565
[apinski@xeond2 gcc]$ git grep Likewise *{,/}ChangeLog*|wc -l
196587

Thanks,
Andrew

>
> >       * lib/target-supports.exp: Add external_tail_call. Disable
> >       optimization for tail call checks.
> > ---
> >  gcc/testsuite/g++.dg/musttail10.C     |  2 +-
> >  gcc/testsuite/g++.dg/musttail6.C      |  2 +-
> >  gcc/testsuite/lib/target-supports.exp | 14 +++++++++++---
> >  3 files changed, 13 insertions(+), 5 deletions(-)
> >
> > diff --git a/gcc/testsuite/g++.dg/musttail10.C 
> > b/gcc/testsuite/g++.dg/musttail10.C
> > index ff7fcc7d8755..bd75affa2220 100644
> > --- a/gcc/testsuite/g++.dg/musttail10.C
> > +++ b/gcc/testsuite/g++.dg/musttail10.C
> > @@ -8,7 +8,7 @@ double g() { [[gnu::musttail]] return f<int>(); } /* { 
> > dg-error "cannot tail-cal
> >
> >  template <class T>
> >  __attribute__((noinline, noclone, noipa))
> > -T g1() { [[gnu::musttail]] return f<T>(); } /* { dg-error "target is not 
> > able" "" { target powerpc*-*-* } } */
> > +T g1() { [[gnu::musttail]] return f<T>(); } /* { dg-error "target is not 
> > able" "" { target { external_tail_call } } } */
> >
> >  template <class T>
> >  __attribute__((noinline, noclone, noipa))
> > diff --git a/gcc/testsuite/g++.dg/musttail6.C 
> > b/gcc/testsuite/g++.dg/musttail6.C
> > index 5c6f69407ddb..81f6d9f3ca77 100644
> > --- a/gcc/testsuite/g++.dg/musttail6.C
> > +++ b/gcc/testsuite/g++.dg/musttail6.C
> > @@ -1,6 +1,6 @@
> >  /* { dg-do compile { target { struct_tail_call } } } */
> > +/* { dg-require-effective-target external_tail_call } */
> >  /* A lot of architectures will not build this due to PR115606 and PR115607 
> > */
> > -/* { dg-skip-if "powerpc does not support sibcall to templates" { 
> > powerpc*-*-* } } */
> >  /* { dg-options "-std=gnu++11" } */
> >  /* { dg-additional-options "-fdelayed-branch" { target sparc*-*-* } } */
> >
> > diff --git a/gcc/testsuite/lib/target-supports.exp 
> > b/gcc/testsuite/lib/target-supports.exp
> > index d368251ef9a4..0a3946e82d4b 100644
> > --- a/gcc/testsuite/lib/target-supports.exp
> > +++ b/gcc/testsuite/lib/target-supports.exp
> > @@ -12741,7 +12741,15 @@ proc check_effective_target_tail_call { } {
> >      return [check_no_messages_and_pattern tail_call ",SIBCALL" rtl-expand {
> >       __attribute__((__noipa__)) void foo (void) { }
> >       __attribute__((__noipa__)) void bar (void) { foo(); }
> > -    } {-O2 -fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a 
> > detailed dump.
> > +    } {-fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed 
> > dump.
> > +}
> > +
> > +# Return 1 if the target can perform tail-calls for externals
> > +proc check_effective_target_external_tail_call { } {
> > +    return [check_no_messages_and_pattern tail_call ",SIBCALL" rtl-expand {
> > +     extern __attribute__((__noipa__)) void foo (void);
> > +     __attribute__((__noipa__)) void bar (void) { foo(); }
>
> There's far more instances of noipa in the testsuite than __noipa__.
>
> > +    } {-fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed 
> > dump.
> >  }
> >
> >  # Return 1 if the target can perform tail-call optimizations for structures
> > @@ -12751,9 +12759,9 @@ proc check_effective_target_struct_tail_call { } {
> >      return [check_no_messages_and_pattern tail_call ",SIBCALL" rtl-expand {
> >       // C++
> >       struct foo { int a, b; };
> > -     __attribute__((__noipa__)) struct foo foo (void) { return {}; }
> > +     extern __attribute__((__noipa__)) struct foo foo (void);
> >       __attribute__((__noipa__)) struct foo bar (void) { return foo(); }
> > -    } {-O2 -fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a 
> > detailed dump.
> > +    } {-fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed 
> > dump.
> >  }
> >
> >  # Return 1 if the target's calling sequence or its ABI

Reply via email to