On Sep 2, 2024, at 4:23 PM, Andi Kleen <a...@linux.intel.com> wrote:
> 
> Andi Kleen <a...@linux.intel.com> writes:
> 
> PING^3

Ok.

>> Andi Kleen <a...@linux.intel.com> writes:
>> 
>> PING^2 for https://gcc.gnu.org/pipermail/gcc-patches/2024-July/658602.html
>> 
>> This fixes some musttail related test suite failures that cause noise on
>> various targets.
>> 
>>> Andi Kleen <a...@linux.intel.com> writes:
>>> 
>>> I wanted to ping this patch. It fixes test suite noise on various
>>> targets.
>>> 
>>> https://gcc.gnu.org/pipermail/gcc-patches/2024-July/658602.html
>>> 
>>> 
>>>> From: Andi Kleen <a...@gcc.gnu.org>
>>>> 
>>>> This is a new attempt to fix PR116080. The previous try was reverted
>>>> because it just broke a bunch of tests, hiding the problem.
>>>> 
>>>> - musttail behaves differently than tailcall at -O0. Some of the test
>>>> run at -O0, so add separate effective target tests for musttail.
>>>> - New effective target tests need to use unique file names
>>>> to make dejagnu caching work
>>>> - Change the tests to use new targets
>>>> - Add a external_musttail test to check for target's ability
>>>> to do tail calls between translation units. This covers some powerpc
>>>> ABIs.
>>>> 
>>>> gcc/testsuite/ChangeLog:
>>>> 
>>>>    PR testsuite/116080
>>>>    * c-c++-common/musttail1.c: Use musttail target.
>>>>    * c-c++-common/musttail12.c: Use struct_musttail target.
>>>>    * c-c++-common/musttail2.c: Use musttail target.
>>>>    * c-c++-common/musttail3.c: Likewise.
>>>>    * c-c++-common/musttail4.c: Likewise.
>>>>    * c-c++-common/musttail7.c: Likewise.
>>>>    * c-c++-common/musttail8.c: Likewise.
>>>>    * g++.dg/musttail10.C: Likewise. Replace powerpc checks with
>>>>    external_musttail.
>>>>    * g++.dg/musttail11.C: Use musttail target.
>>>>    * g++.dg/musttail6.C: Use musttail target. Replace powerpc
>>>>    checks with external_musttail.
>>>>    * g++.dg/musttail9.C: Use musttail target.
>>>>    * lib/target-supports.exp: Add musttail, struct_musttail,
>>>>    external_musttail targets. Remove optimization for musttail.
>>>>    Use unique file names for musttail.
>>>> ---
>>>> gcc/testsuite/c-c++-common/musttail1.c  |  2 +-
>>>> gcc/testsuite/c-c++-common/musttail12.c |  2 +-
>>>> gcc/testsuite/c-c++-common/musttail2.c  |  2 +-
>>>> gcc/testsuite/c-c++-common/musttail3.c  |  2 +-
>>>> gcc/testsuite/c-c++-common/musttail4.c  |  2 +-
>>>> gcc/testsuite/c-c++-common/musttail7.c  |  2 +-
>>>> gcc/testsuite/c-c++-common/musttail8.c  |  2 +-
>>>> gcc/testsuite/g++.dg/musttail10.C       |  4 ++--
>>>> gcc/testsuite/g++.dg/musttail11.C       |  2 +-
>>>> gcc/testsuite/g++.dg/musttail6.C        |  4 ++--
>>>> gcc/testsuite/g++.dg/musttail9.C        |  2 +-
>>>> gcc/testsuite/lib/target-supports.exp   | 30 ++++++++++++++++++++-----
>>>> 12 files changed, 37 insertions(+), 19 deletions(-)
>>>> 
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail1.c 
>>>> b/gcc/testsuite/c-c++-common/musttail1.c
>>>> index 74efcc2a0bc6..51549672e02a 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail1.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail1.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { musttail && { c || c++11 } } } } */
>>>> /* { dg-additional-options "-fdelayed-branch" { target sparc*-*-* } } */
>>>> 
>>>> int __attribute__((noinline,noclone,noipa))
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail12.c 
>>>> b/gcc/testsuite/c-c++-common/musttail12.c
>>>> index 4140bcd00950..475afc5af3f3 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail12.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail12.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { struct_tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { struct_musttail && { c || c++11 } } } } */
>>>> /* { dg-additional-options "-fdelayed-branch" { target sparc*-*-* } } */
>>>> 
>>>> struct str
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail2.c 
>>>> b/gcc/testsuite/c-c++-common/musttail2.c
>>>> index 86f2c3d77404..1970c4edd670 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail2.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail2.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { musttail && { c || c++11 } } } } */
>>>> 
>>>> struct box { char field[256]; int i; };
>>>> 
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail3.c 
>>>> b/gcc/testsuite/c-c++-common/musttail3.c
>>>> index ea9589c59ef2..7499fd6460b4 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail3.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail3.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { struct_musttail && { c || c++11 } } } } */
>>>> 
>>>> extern int foo2 (int x, ...);
>>>> 
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail4.c 
>>>> b/gcc/testsuite/c-c++-common/musttail4.c
>>>> index 23f4b5e1cd68..bd6effa4b931 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail4.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail4.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { musttail && { c || c++11 } } } } */
>>>> 
>>>> struct box { char field[64]; int i; };
>>>> 
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail7.c 
>>>> b/gcc/testsuite/c-c++-common/musttail7.c
>>>> index c753a3fe9b2a..d17cb71256d7 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail7.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail7.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { musttail && { c || c++11 } } } } */
>>>> /* { dg-additional-options "-fdelayed-branch" { target sparc*-*-* } } */
>>>> 
>>>> void __attribute__((noipa)) f() {}
>>>> diff --git a/gcc/testsuite/c-c++-common/musttail8.c 
>>>> b/gcc/testsuite/c-c++-common/musttail8.c
>>>> index 9fa10e0b54c4..50ca1ac0dd48 100644
>>>> --- a/gcc/testsuite/c-c++-common/musttail8.c
>>>> +++ b/gcc/testsuite/c-c++-common/musttail8.c
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call && { c || c++11 } } } } */
>>>> +/* { dg-do compile { target { musttail && { c || c++11 } } } } */
>>>> 
>>>> float f1(void);
>>>> 
>>>> diff --git a/gcc/testsuite/g++.dg/musttail10.C 
>>>> b/gcc/testsuite/g++.dg/musttail10.C
>>>> index ff7fcc7d8755..49430b1263a5 100644
>>>> --- a/gcc/testsuite/g++.dg/musttail10.C
>>>> +++ b/gcc/testsuite/g++.dg/musttail10.C
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call } } } */
>>>> +/* { dg-do compile { target { musttail } } } */
>>>> /* { dg-options "-std=gnu++11" } */
>>>> /* { dg-additional-options "-fdelayed-branch" { target sparc*-*-* } } */
>>>> 
>>>> @@ -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_musttail } } } */
>>>> 
>>>> template <class T>
>>>> __attribute__((noinline, noclone, noipa))
>>>> diff --git a/gcc/testsuite/g++.dg/musttail11.C 
>>>> b/gcc/testsuite/g++.dg/musttail11.C
>>>> index 1779e3287a93..dca87247d504 100644
>>>> --- a/gcc/testsuite/g++.dg/musttail11.C
>>>> +++ b/gcc/testsuite/g++.dg/musttail11.C
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call } } } */
>>>> +/* { dg-do compile { target { musttail } } } */
>>>> /* { dg-options "-std=gnu++11" } */
>>>> /* { dg-additional-options "-fdelayed-branch" { target sparc*-*-* } } */
>>>> 
>>>> diff --git a/gcc/testsuite/g++.dg/musttail6.C 
>>>> b/gcc/testsuite/g++.dg/musttail6.C
>>>> index 5c6f69407ddb..5dcf302139ae 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-do compile { target { struct_musttail } } } */
>>>> +/* { dg-require-effective-target external_musttail } */
>>>> /* 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/g++.dg/musttail9.C 
>>>> b/gcc/testsuite/g++.dg/musttail9.C
>>>> index fb0262e751be..85937dcdcd31 100644
>>>> --- a/gcc/testsuite/g++.dg/musttail9.C
>>>> +++ b/gcc/testsuite/g++.dg/musttail9.C
>>>> @@ -1,4 +1,4 @@
>>>> -/* { dg-do compile { target { tail_call } } } */
>>>> +/* { dg-do compile { target { musttail } } } */
>>>> /* { 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..10b2969f747a 100644
>>>> --- a/gcc/testsuite/lib/target-supports.exp
>>>> +++ b/gcc/testsuite/lib/target-supports.exp
>>>> @@ -12744,16 +12744,34 @@ proc check_effective_target_tail_call { } {
>>>>     } {-O2 -fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a 
>>>> detailed dump.
>>>> }
>>>> 
>>>> -# Return 1 if the target can perform tail-call optimizations for 
>>>> structures
>>>> +# Return 1 if the target can perform musttail optimizations of the
>>>> +# most trivial type. This is separate from tail_call because musttail
>>>> +# is supported at -O0.
>>>> +proc check_effective_target_musttail { } {
>>>> +    return [check_no_messages_and_pattern musttail ",SIBCALL" rtl-expand {
>>>> +  __attribute__((__noipa__)) void foo (void) { }
>>>> +  __attribute__((__noipa__)) void bar (void) { [[gnu::musttail]] return 
>>>> foo(); }
>>>> +    } {-fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed 
>>>> dump.
>>>> +}
>>>> +
>>>> +# Return 1 if the target can perform musttail for externals
>>>> +proc check_effective_target_external_musttail { } {
>>>> +    return [check_no_messages_and_pattern external_musttail ",SIBCALL" 
>>>> rtl-expand {
>>>> +  extern __attribute__((__noipa__)) void foo (void);
>>>> +  __attribute__((__noipa__)) void bar (void) { [[gnu::musttail]] return 
>>>> foo(); }
>>>> +    } {-fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a detailed 
>>>> dump.
>>>> +}
>>>> +
>>>> +# Return 1 if the target can perform musttail optimizations for structures
>>>> # checking with C++ because the C++ compiler has less tail call ability
>>>> # due to PR115606 on some targets
>>>> -proc check_effective_target_struct_tail_call { } {
>>>> -    return [check_no_messages_and_pattern tail_call ",SIBCALL" rtl-expand 
>>>> {
>>>> +proc check_effective_target_struct_musttail { } {
>>>> +    return [check_no_messages_and_pattern struct_musttail ",SIBCALL" 
>>>> rtl-expand {
>>>>    // C++
>>>>    struct foo { int a, b; };
>>>> -  __attribute__((__noipa__)) struct foo foo (void) { return {}; }
>>>> -  __attribute__((__noipa__)) struct foo bar (void) { return foo(); }
>>>> -    } {-O2 -fdump-rtl-expand-all}] ;# The "SIBCALL" note requires a 
>>>> detailed dump.
>>>> +  extern __attribute__((__noipa__)) struct foo foo (void);
>>>> +  __attribute__((__noipa__)) struct foo bar (void) { [[gnu::musttail]] 
>>>> return foo(); }
>>>> +    } {-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