P9LE generated instruction is not worse than P8LE. mtvsrdd;xxlnot;stxv vs. not;not;std;std. Update the test case to fix failures.
v3: Define and use check_effective_target_xxx etc. pre_power8: ... power6, power7. power8: power8 only. post_power8: power8, power9 ... post_power9: power9, power10 ... gcc/testsuite/ChangeLog: 2019-11-15 Luo Xiong Hu <luo...@linux.ibm.com> testsuite/pr92398 * gcc.target/powerpc/pr72804.c: Update instruction count per platform. * lib/target-supports.exp (check_effective_target_pre_power8): New. (check_effective_target_power8): New. (check_effective_target_post_power8): New. (check_effective_target_post_power9): New. --- gcc/testsuite/gcc.target/powerpc/pr72804.c | 39 ++++++++++++++++---- gcc/testsuite/lib/target-supports.exp | 43 ++++++++++++++++++++++ 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gcc.target/powerpc/pr72804.c b/gcc/testsuite/gcc.target/powerpc/pr72804.c index 10e37caed6b..69da8942ddd 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr72804.c +++ b/gcc/testsuite/gcc.target/powerpc/pr72804.c @@ -1,7 +1,6 @@ /* { 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-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -mvsx" } */ __int128_t foo (__int128_t *src) @@ -15,11 +14,35 @@ 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 post_power9 } } } */ +/* { dg-final { scan-assembler-not "std " { target post_power9 } } } */ +/* { dg-final { scan-assembler-not "stxvd2x" { target post_power9 } } } */ +/* { dg-final { scan-assembler-not "xxpermdi" { target post_power9 } } } */ + +/* { dg-final { scan-assembler-times "not " 2 { target { {power8} && {be} } } } } */ +/* { dg-final { scan-assembler-not "std " { target { {power8} && {be} } } } } */ +/* { dg-final { scan-assembler-times "stxvd2x" 1 { target { {power8} && {be} } } } } */ +/* { dg-final { scan-assembler-times "xxpermdi" 1 { target { {power8} && {be} } } } } */ + +/* { dg-final { scan-assembler-times "not " 4 { target { {power8} && {le} } } } } */ +/* { dg-final { scan-assembler-times "std " 2 { target { {power8} && {le} } } } } */ +/* { dg-final { scan-assembler-not "stxvd2x" { target { {power8} && {le} } } } } */ +/* { dg-final { scan-assembler-not "xxpermdi" { target { {power8} && {le} } } } } */ + +/* { dg-final { scan-assembler-not "lxvd2x" { target post_power8 } } } */ + +/* { dg-final { scan-assembler-times "not " 2 { target { {pre_power8} && {be} } } } } */ +/* { dg-final { scan-assembler-not "std " { target { {pre_power8} && {be} } } } } */ +/* { dg-final { scan-assembler-times "lxvd2x" 1 { target { {pre_power8} && {be} } } } } */ +/* { dg-final { scan-assembler-times "stxvd2x" 1 { target { {pre_power8} && {be} } } } } */ + +/* { dg-final { scan-assembler-times "not " 4 { target { {pre_power8} && {le} } } } } */ +/* { dg-final { scan-assembler-times "std " 2 { target { {pre_power8} && {le} } } } } */ +/* { dg-final { scan-assembler-not "lxvd2x" { target { {pre_power8} && {le} } } } } */ +/* { dg-final { scan-assembler-not "stxvd2x" { target { {pre_power8} && {le} } } } } */ + +/* { dg-final { scan-assembler-not "xxpermdi" { target pre_power8 } } } */ + /* { 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" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 751045d4744..324ec152544 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2585,6 +2585,49 @@ proc check_effective_target_le { } { }] } +# Return 1 if we're generating code for pre-power8 platforms. +# Power8 is NOT included. + +proc check_effective_target_pre_power8 { } { + return [check_no_compiler_messages_nocache pre_power8 assembly { + #if defined(_ARCH_PWR8) + #error NO + #endif + } ""] +} + +# Return 1 if we're generating code for power8 platforms. + +proc check_effective_target_power8 { } { + return [check_no_compiler_messages_nocache power8 assembly { + #if !(!defined(_ARCH_PWR9) && defined(_ARCH_PWR8)) + #error NO + #endif + } ""] +} + +# Return 1 if we're generating code for post-power8 platforms. +# Power8 is included. + +proc check_effective_target_post_power8 { } { + return [check_no_compiler_messages_nocache post_power8 assembly { + #if !(defined(_ARCH_PWR8)) + #error NO + #endif + } ""] +} + +# Return 1 if we're generating code for post-power9 platforms. +# Power9 is included. + +proc check_effective_target_post_power9 { } { + return [check_no_compiler_messages_nocache post_power9 assembly { + #if !(defined(_ARCH_PWR9)) + #error NO + #endif + } ""] +} + # Return 1 if we're generating 32-bit code using default options, 0 # otherwise. -- 2.21.0.777.g83232e3864