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.
This commit is contained in:
Haochen Gui 2024-01-25 14:54:42 +08:00
parent 73f0a1a70c
commit 464de9c283
4 changed files with 18 additions and 6 deletions

View file

@ -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. */

View file

@ -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

View file

@ -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. */

View file

@ -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"