diff options
author | Haochen Gui <guihaoc@gcc.gnu.org> | 2024-01-25 14:54:42 +0800 |
---|---|---|
committer | Haochen Gui <guihaoc@gcc.gnu.org> | 2024-01-25 14:57:39 +0800 |
commit | 464de9c283f7f4717280c515a192e479d7a840a3 (patch) | |
tree | 2a37c9d04d31d6ae7c0c34463cceae76c9861100 /gcc | |
parent | 73f0a1a70c22e4d117ece7ddfa53661bb74137d4 (diff) | |
download | gcc-464de9c283f7f4717280c515a192e479d7a840a3.zip gcc-464de9c283f7f4717280c515a192e479d7a840a3.tar.gz gcc-464de9c283f7f4717280c515a192e479d7a840a3.tar.bz2 |
rs6000: Enable block compare expand on P9 with m32 and mpowerpc64
gcc/
* config/rs6000/rs6000-string.cc (expand_block_compare): Enable
P9 with m32 and mpowerpc64.
gcc/testsuite/
* gcc.target/powerpc/block-cmp-1.c: Exclude m32 and mpowerpc64.
* gcc.target/powerpc/block-cmp-4.c: Likewise.
* gcc.target/powerpc/block-cmp-8.c: New.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/rs6000/rs6000-string.cc | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/block-cmp-1.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/block-cmp-4.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/block-cmp-8.c | 8 |
4 files changed, 18 insertions, 6 deletions
diff --git a/gcc/config/rs6000/rs6000-string.cc b/gcc/config/rs6000/rs6000-string.cc index f707bb2..917f557 100644 --- a/gcc/config/rs6000/rs6000-string.cc +++ b/gcc/config/rs6000/rs6000-string.cc @@ -1950,11 +1950,13 @@ expand_block_compare (rtx operands[]) /* TARGET_POPCNTD is already guarded at expand cmpmemsi. */ gcc_assert (TARGET_POPCNTD); - /* This case is complicated to handle because the subtract - with carry instructions do not generate the 64-bit - carry and so we must emit code to calculate it ourselves. - We choose not to implement this yet. */ - if (TARGET_32BIT && TARGET_POWERPC64) + /* For P8, this case is complicated to handle because the subtract + with carry instructions do not generate the 64-bit carry and so + we must emit code to calculate it ourselves. We skip it on P8 + but setb works well on P9. */ + if (TARGET_32BIT + && TARGET_POWERPC64 + && !TARGET_P9_MISC) return false; /* Allow this param to shut off all expansion. */ diff --git a/gcc/testsuite/gcc.target/powerpc/block-cmp-1.c b/gcc/testsuite/gcc.target/powerpc/block-cmp-1.c index bcf0cb2..cd076cf 100644 --- a/gcc/testsuite/gcc.target/powerpc/block-cmp-1.c +++ b/gcc/testsuite/gcc.target/powerpc/block-cmp-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mdejagnu-cpu=power8 -mno-vsx" } */ +/* { dg-skip-if "" { has_arch_ppc64 && ilp32 } } */ /* { dg-final { scan-assembler-not {\mb[l]? memcmp\M} } } */ /* Test that it still can do expand for memcmpsi instead of calling library diff --git a/gcc/testsuite/gcc.target/powerpc/block-cmp-4.c b/gcc/testsuite/gcc.target/powerpc/block-cmp-4.c index c86feba..ee9a015 100644 --- a/gcc/testsuite/gcc.target/powerpc/block-cmp-4.c +++ b/gcc/testsuite/gcc.target/powerpc/block-cmp-4.c @@ -1,6 +1,7 @@ /* { dg-do compile { target be } } */ /* { dg-options "-O2 -mdejagnu-cpu=power7" } */ -/* { dg-final { scan-assembler-not {\mb[l]? memcmp\M} } } */ +/* { dg-skip-if "" { has_arch_ppc64 && ilp32 } } */ +/* { dg-final { scan-assembler-not {\mb[l]? memcmp\M} } } */ /* Test that it does expand for memcmpsi instead of calling library on P7 BE when length is less than 32 bytes. */ diff --git a/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c b/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c new file mode 100644 index 0000000..22a48c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c @@ -0,0 +1,8 @@ +/* { dg-do run { target ilp32 } } */ +/* { dg-options "-O2 -mpowerpc64" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-timeout-factor 2 } */ + +/* Verify memcmp on m32 mpowerpc64 */ + +#include "../../gcc.dg/memcmp-1.c" |