Hi, On 2019/11/15 18:17, Segher Boessenkool wrote: > Hi! > > On Thu, Nov 14, 2019 at 09:12:32PM -0600, Xiong Hu Luo wrote: >> P9LE generated instruction is not worse than P8LE. >> mtvsrdd;xxlnot;stxv vs. not;not;std;std. >> Update the test case to fix failures. > > So this no longer runs it for p7, and it also doesn't run it for cpus > after p9 anymore. Could you change it to be a test for p9 and above, > and one for before p9? Does that work? Since one test file could not support multiple dg do-compile or dg-options, it seems not feasible to build both power7, power8 and power9 option in one source file, I added check_effective_target_power[7,8,9] and add_options_for_power[7,8,9] in target-supports.exp for each cpu configure.
> >> --- /dev/null >> +++ b/gcc/testsuite/gcc.target/powerpc/pr72804.p8.c >> @@ -0,0 +1,16 @@ >> +/* { dg-do compile { target lp64 } } */ >> +/* { dg-skip-if "" { powerpc*-*-darwin* } } */ >> +/* { dg-require-effective-target powerpc_vsx_ok } */ >> +/* { dg-options "-O2 -mvsx -mdejagnu-cpu=power8" } */ > > -mvsx is implied by power8 (or power7, already). > > You don't need the test for Darwin: Darwin never has VSX, already (and > if it somehow would ever get support for it, we'd want this test to run > for it). OK. > >> +/* { dg-final { scan-assembler-times "std " 0 } } */ > > We usually write this as scan-assembler-not, but this works just fine > as well. Whichever you prefer. Updated. > > > Segher > V2 patch as below, Thanks: P9LE generated instruction is not worse than P8LE. mtvsrdd;xxlnot;stxv vs. not;not;std;std. Update the test case to fix failures. gcc/testsuite/ChangeLog: 2019-11-15 Luo Xiong Hu <luo...@linux.ibm.com> testsuite/pr92398 * gcc.target/powerpc/pr72804.h: New. * gcc.target/powerpc/pr72804.p7.c: New. * gcc.target/powerpc/pr72804.p8.c: New. * gcc.target/powerpc/pr72804.c: Rename to ... * gcc.target/powerpc/pr72804.p9.c: ... this one. * lib/target-supports.exp (check_effective_target_power7): New. (add_options_for_power7): New. (check_effective_target_power8): New. (add_options_for_power9): New. (check_effective_target_power9): New. (add_options_for_power8): New. --- gcc/testsuite/gcc.target/powerpc/pr72804.h | 17 +++++++ gcc/testsuite/gcc.target/powerpc/pr72804.p7.c | 16 +++++++ gcc/testsuite/gcc.target/powerpc/pr72804.p8.c | 16 +++++++ .../powerpc/{pr72804.c => pr72804.p9.c} | 23 +++------- gcc/testsuite/lib/target-supports.exp | 45 +++++++++++++++++++ 5 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr72804.h create mode 100644 gcc/testsuite/gcc.target/powerpc/pr72804.p7.c create mode 100644 gcc/testsuite/gcc.target/powerpc/pr72804.p8.c rename gcc/testsuite/gcc.target/powerpc/{pr72804.c => pr72804.p9.c} (52%) diff --git a/gcc/testsuite/gcc.target/powerpc/pr72804.h b/gcc/testsuite/gcc.target/powerpc/pr72804.h new file mode 100644 index 00000000000..8a5ea93cc17 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr72804.h @@ -0,0 +1,17 @@ +/* This test code is included into pr72804.p8.c and pr72804.p9.c + The two files have the tests for the number of instructions generated for + P8LE versus P9LE. */ + +__int128_t +foo (__int128_t *src) +{ + return ~*src; +} + +void +bar (__int128_t *dst, __int128_t src) +{ + *dst = ~src; +} + + diff --git a/gcc/testsuite/gcc.target/powerpc/pr72804.p7.c b/gcc/testsuite/gcc.target/powerpc/pr72804.p7.c new file mode 100644 index 00000000000..f78a8557c9f --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr72804.p7.c @@ -0,0 +1,16 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2" } */ +/* { dg-add-options power7 } */ + +/* { dg-final { scan-assembler-times "not " 4 {xfail be} } } */ +/* { dg-final { scan-assembler-times "std " 2 } } */ +/* { dg-final { scan-assembler-times "ld " 2 } } */ +/* { dg-final { scan-assembler-not "lxvd2x" {xfail be} } } */ +/* { dg-final { scan-assembler-not "stxvd2x" {xfail be} } } */ +/* { dg-final { scan-assembler-not "xxpermdi" } } */ +/* { dg-final { scan-assembler-not "mfvsrd" } } */ +/* { dg-final { scan-assembler-not "mfvsrd" } } */ + +/* Source code for the test in pr72804.h */ +#include "pr72804.h" diff --git a/gcc/testsuite/gcc.target/powerpc/pr72804.p8.c b/gcc/testsuite/gcc.target/powerpc/pr72804.p8.c new file mode 100644 index 00000000000..1efc0691809 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr72804.p8.c @@ -0,0 +1,16 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2" } */ +/* { dg-add-options power8 } */ + +/* { dg-final { scan-assembler-times "not " 4 {xfail be} } } */ +/* { dg-final { scan-assembler-times "std " 2 {xfail be} } } */ +/* { dg-final { scan-assembler-times "ld " 2 } } */ +/* { dg-final { scan-assembler-not "lxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" {xfail be} } } */ +/* { dg-final { scan-assembler-not "xxpermdi" {xfail be} } } */ +/* { dg-final { scan-assembler-not "mfvsrd" } } */ +/* { dg-final { scan-assembler-not "mfvsrd" } } */ + +/* Source code for the test in pr72804.h */ +#include "pr72804.h" diff --git a/gcc/testsuite/gcc.target/powerpc/pr72804.c b/gcc/testsuite/gcc.target/powerpc/pr72804.p9.c similarity index 52% rename from gcc/testsuite/gcc.target/powerpc/pr72804.c rename to gcc/testsuite/gcc.target/powerpc/pr72804.p9.c index 10e37caed6b..27c59d419f3 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr72804.c +++ b/gcc/testsuite/gcc.target/powerpc/pr72804.p9.c @@ -1,25 +1,16 @@ /* { dg-do compile { target { lp64 } } } */ -/* { dg-skip-if "" { powerpc*-*-darwin* } } */ /* { dg-require-effective-target powerpc_vsx_ok } */ -/* { dg-options "-O2 -mvsx -fno-inline-functions --param max-inline-insns-single-O2=200" } */ +/* { dg-options "-O2 -mvsx" } */ +/* { dg-add-options power9 } */ -__int128_t -foo (__int128_t *src) -{ - return ~*src; -} - -void -bar (__int128_t *dst, __int128_t src) -{ - *dst = ~src; -} - -/* { dg-final { scan-assembler-times "not " 4 } } */ -/* { dg-final { scan-assembler-times "std " 2 } } */ +/* { dg-final { scan-assembler-times "not " 2 { target power9 } } } */ +/* { dg-final { scan-assembler-not "std " { target power9 } } } */ /* { dg-final { scan-assembler-times "ld " 2 } } */ /* { dg-final { scan-assembler-not "lxvd2x" } } */ /* { dg-final { scan-assembler-not "stxvd2x" } } */ /* { dg-final { scan-assembler-not "xxpermdi" } } */ /* { dg-final { scan-assembler-not "mfvsrd" } } */ /* { dg-final { scan-assembler-not "mfvsrd" } } */ + +/* Source code for the test in pr72804.h */ +#include "pr72804.h" diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 751045d4744..af76ce6e1b9 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2585,6 +2585,51 @@ proc check_effective_target_le { } { }] } +proc check_effective_target_power7 { } { + return [check_no_compiler_messages_nocache power7 assembly { + #if !(!defined(_ARCH_PWR8) && defined(_ARCH_PWR7)) + #error !_ARCH_PWR7 + #endif + } "-mdejagnu-cpu=power7"] +} + +proc add_options_for_power7 { flags } { + if { [istarget powerpc*-*-*] } { + return "$flags -mdejagnu-cpu=power7" + } + return "$flags" +} + +proc check_effective_target_power8 { } { + return [check_no_compiler_messages_nocache power8 assembly { + #if !(!defined(_ARCH_PWR9) && defined(_ARCH_PWR8)) + #error !_ARCH_PWR8 + #endif + } "-mdejagnu-cpu=power8"] +} + +proc add_options_for_power8 { flags } { + if { [istarget powerpc*-*-*] } { + return "$flags -mdejagnu-cpu=power8" + } + return "$flags" +} + +proc check_effective_target_power9 { } { + return [check_no_compiler_messages_nocache power9 assembly { + #if !(!defined(_ARCH_PWR10) && defined(_ARCH_PWR9)) + #error !_ARCH_PWR9 + #endif + } [add_options_for_power9 ""]] +} + +proc add_options_for_power9 { flags } { + if { [istarget powerpc*-*-*] } { + return "$flags -mdejagnu-cpu=power9" + } + return "$flags" +} + # Return 1 if we're generating 32-bit code using default options, 0 # otherwise. -- 2.21.0.777.g83232e3864