On Fri, 2013-10-18 at 09:59 +0200, Christian Bruel wrote:
> On 10/18/2013 01:05 AM, Oleg Endo wrote:
> > I was wondering, in file sh-mem.c, the new function
> > 'sh4_expand_cmpstr' ... why is it SH4-something? It's a bit confusing,
> > since cmp/str has been around since ever (i.e. since SH1). Maybe just
> > rename it to 'sh_expand_cmpstr' instead?
>
> Just historical. (SH4* are our primary SH platforms). The code is
> enabled/tested for all SH1 of course, I will rename. Thanks .
>
> > Maybe just
> > rename it to 'sh_expand_cmpstr' instead? The function always returns
> > 'true', so maybe just make it return 'void'?
>
> yes, it's for genericity as I plan to reuse/specialize the code based on
> the count parameter for strncmp to be contributed next.
I already assumed so :)
> >
> > Also, in the expander ...
> >
> > + [(set (match_operand:SI 0 "register_operand" "")
> > + (compare:SI (match_operand:BLK 1 "memory_operand" "")
> >
> > ... no need to use empty "" constraints
>
> OK, thanks
Could you also please remove the quotes around the preparation block:
"
{
if (! optimize_insn_for_size_p () && sh4_expand_cmpstr(operands))
DONE;
else FAIL;
}")
I've attached two test cases, tested with
make -k check-gcc RUNTESTFLAGS="sh.exp=strcmp* --target_board=sh-sim
\{-m2/-ml,-m2/-mb,-m2a/-mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}"
Could you please include them?
Cheers,
Oleg
Index: gcc/testsuite/gcc.target/sh/strcmp-2.c
===================================================================
--- gcc/testsuite/gcc.target/sh/strcmp-2.c (revision 0)
+++ gcc/testsuite/gcc.target/sh/strcmp-2.c (revision 0)
@@ -0,0 +1,13 @@
+/* Check that the __builtin_strcmp function is not inlined when optimizing
+ for size. */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-Os" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
+/* { dg-final { scan-assembler-not "cmp/str" } } */
+/* { dg-final { scan-assembler "jsr|jmp|bsr|bra" } } */
+
+int
+test00 (const char* a, const char* b)
+{
+ return __builtin_strcmp (a, b);
+}
Index: gcc/testsuite/gcc.target/sh/strcmp-1.c
===================================================================
--- gcc/testsuite/gcc.target/sh/strcmp-1.c (revision 0)
+++ gcc/testsuite/gcc.target/sh/strcmp-1.c (revision 0)
@@ -0,0 +1,12 @@
+/* Check that the __builtin_strcmp function is inlined utilizing cmp/str insn
+ when optimizing for speed. */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-O2" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
+/* { dg-final { scan-assembler "cmp/str" } } */
+
+int
+test00 (const char* a, const char* b)
+{
+ return __builtin_strcmp (a, b);
+}