aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHaochen Gui <guihaoc@gcc.gnu.org>2023-12-27 10:30:56 +0800
committerHaochen Gui <guihaoc@gcc.gnu.org>2023-12-27 10:35:14 +0800
commitdaea7777cee46549b8a43624f32ec66b4e783f3f (patch)
tree087b05915e5e9a05c83e1ce64ab7e3fcdc17621d /gcc
parent78bd9e25601a2b7162ad71f714861a05cf994488 (diff)
downloadgcc-daea7777cee46549b8a43624f32ec66b4e783f3f.zip
gcc-daea7777cee46549b8a43624f32ec66b4e783f3f.tar.gz
gcc-daea7777cee46549b8a43624f32ec66b4e783f3f.tar.bz2
rs6000: Call library for block memory compare when optimizing for size
gcc/ * config/rs6000/rs6000.md (cmpmemsi): Fail when optimizing for size. gcc/testsuite/ * gcc.target/powerpc/block-cmp-3.c: New.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.md3
-rw-r--r--gcc/testsuite/gcc.target/powerpc/block-cmp-3.c8
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 5812662..37e427b 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -10146,6 +10146,9 @@
(use (match_operand:SI 4))])]
"TARGET_POPCNTD"
{
+ if (optimize_insn_for_size_p ())
+ FAIL;
+
if (expand_block_compare (operands))
DONE;
else
diff --git a/gcc/testsuite/gcc.target/powerpc/block-cmp-3.c b/gcc/testsuite/gcc.target/powerpc/block-cmp-3.c
new file mode 100644
index 0000000..c7e853a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/block-cmp-3.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+/* { dg-final { scan-assembler-times {\mb[l]? memcmp\M} 1 } } */
+
+int foo (const char* s1, const char* s2)
+{
+ return __builtin_memcmp (s1, s2, 4);
+}