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