On Wed, Dec 02, 2015 at 10:11:54AM +0100, Dominik Vogt wrote: > On Wed, Dec 02, 2015 at 09:59:10AM +0100, Andreas Krebbel wrote: > > On 11/30/2015 03:45 PM, Dominik Vogt wrote: > > > On Mon, Nov 09, 2015 at 01:33:23PM +0100, Andreas Krebbel wrote: > > >> On 11/04/2015 02:39 AM, Dominik Vogt wrote: > > >>> On Tue, Nov 03, 2015 at 06:47:28PM +0100, Ulrich Weigand wrote: > > >>>> Dominik Vogt wrote: > > > +++ b/gcc/testsuite/gcc.target/s390/md/movstr-1.c > > > @@ -0,0 +1,11 @@ > > > +/* Machine description pattern tests. */ > > > + > > > +/* { dg-do assemble } */ > > > +/* { dg-options "-dP -save-temps" } */ > > > > -save-temps is not necessary for a dg-do assemble test. > > It *is* necessary for "assemble", but not for "compile" which > should be used here. Anyway, I want to upgrade the test to a > "run" test that also veryfies whether the generated code does the > right thing. > > > > +# Additional md torture tests. > > > +torture-init > > > +set MD_TEST_OPTS [list \ > > > + {-Os -march=z900} {-Os -march=z13} \ > > > + {-O0 -march=z900} {-O0 -march=z13} \ > > > + {-O1 -march=z900} {-O1 -march=z13} \ > > > + {-O2 -march=z900} {-O2 -march=z13} \ > > > + {-O3 -march=z900} {-O3 -march=z13}] > > > +set-torture-options $MD_TEST_OPTS > > > +gcc-dg-runtest [lsort [glob -nocomplain $md_tests]] "" $DEFAULT_CFLAGS > > > torture-finish > > > > Does it really make sense to use different -march options for the > > md/ tests? Whether a certain pattern will match usually depends on > > the -march level. I would say the -march option needs to be part > > of testcase. > > Agreed, but I think with "run" tests various -march= and -O > options are useful.
Version 4 of the patch attached (enhanced test case). Ciao Dominik ^_^ ^_^ -- Dominik Vogt IBM Germany
gcc/ChangeLog * config/s390/s390.md ("movstr", "*movstr"): Fix warning. ("movstr<P:mode>"): New indirect expanders used by "movstr". testsuite/ChangeLog * gcc.target/s390/md/movstr-1.c: New test. * gcc.target/s390/s390.exp: Add subdir md. Do not run hotpatch tests twice.
>From 552c1d416ef33acaa2a119149238666a171cbb1b Mon Sep 17 00:00:00 2001 From: Dominik Vogt <v...@linux.vnet.ibm.com> Date: Tue, 3 Nov 2015 18:03:02 +0100 Subject: [PATCH] S/390: Fix warning in "*movstr" pattern. --- gcc/config/s390/s390.md | 20 +++++++++++++++++--- gcc/testsuite/gcc.target/s390/md/movstr-1.c | 29 +++++++++++++++++++++++++++++ gcc/testsuite/gcc.target/s390/s390.exp | 25 ++++++++++++++++++++----- 3 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.target/s390/md/movstr-1.c diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index e5db537..7eca315 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -2910,13 +2910,27 @@ ; (define_expand "movstr" + ;; The pattern is never generated. + [(match_operand 0 "" "") + (match_operand 1 "" "") + (match_operand 2 "" "")] + "" +{ + if (TARGET_64BIT) + emit_insn (gen_movstrdi (operands[0], operands[1], operands[2])); + else + emit_insn (gen_movstrsi (operands[0], operands[1], operands[2])); + DONE; +}) + +(define_expand "movstr<P:mode>" [(set (reg:SI 0) (const_int 0)) (parallel [(clobber (match_dup 3)) (set (match_operand:BLK 1 "memory_operand" "") (match_operand:BLK 2 "memory_operand" "")) - (set (match_operand 0 "register_operand" "") - (unspec [(match_dup 1) + (set (match_operand:P 0 "register_operand" "") + (unspec:P [(match_dup 1) (match_dup 2) (reg:SI 0)] UNSPEC_MVST)) (clobber (reg:CC CC_REGNUM))])] @@ -2937,7 +2951,7 @@ (set (mem:BLK (match_operand:P 1 "register_operand" "0")) (mem:BLK (match_operand:P 3 "register_operand" "2"))) (set (match_operand:P 0 "register_operand" "=d") - (unspec [(mem:BLK (match_dup 1)) + (unspec:P [(mem:BLK (match_dup 1)) (mem:BLK (match_dup 3)) (reg:SI 0)] UNSPEC_MVST)) (clobber (reg:CC CC_REGNUM))] diff --git a/gcc/testsuite/gcc.target/s390/md/movstr-1.c b/gcc/testsuite/gcc.target/s390/md/movstr-1.c new file mode 100644 index 0000000..2fce743 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/md/movstr-1.c @@ -0,0 +1,29 @@ +/* Machine description pattern tests. */ + +/* { dg-do run } */ +/* { dg-options "-dP" } */ + +void test(char *dest, const char *src) +{ + __builtin_stpcpy (dest, src); +} + +/* { dg-final { scan-assembler-times {{[*]movstr}} 1 } } */ + +#include <string.h> +#include <stdio.h> + +#define LEN 200 +char buf[LEN]; + +int main(void) +{ + memset(buf, 0, LEN); + test(buf, "hello world!"); + if (strcmp(buf, "hello world!") != 0) + { + fprintf(stderr, "error: test() failed\n"); + return 1; + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp index 0b8f80ed..0d7a7eb 100644 --- a/gcc/testsuite/gcc.target/s390/s390.exp +++ b/gcc/testsuite/gcc.target/s390/s390.exp @@ -61,20 +61,35 @@ if ![info exists DEFAULT_CFLAGS] then { # Initialize `dg'. dg-init -set hotpatch_tests $srcdir/$subdir/hotpatch-\[0-9\]*.c +set md_tests $srcdir/$subdir/md/*.c # Main loop. dg-runtest [lsort [prune [glob -nocomplain $srcdir/$subdir/*.\[cS\]] \ - $hotpatch_tests]] "" $DEFAULT_CFLAGS + $md_tests]] "" $DEFAULT_CFLAGS dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*vector*/*.\[cS\]]] \ "" $DEFAULT_CFLAGS +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/md/*.\[cS\]]] \ + "" $DEFAULT_CFLAGS + # Additional hotpatch torture tests. torture-init -set HOTPATCH_TEST_OPTS [list -Os -O0 -O1 -O2 -O3] -set-torture-options $HOTPATCH_TEST_OPTS -gcc-dg-runtest [lsort [glob -nocomplain $hotpatch_tests]] "" $DEFAULT_CFLAGS +set-torture-options [list -Os -O0 -O1 -O2 -O3] +gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/hotpatch-\[0-9\]*.c]] \ + "" $DEFAULT_CFLAGS +torture-finish + +# Additional md torture tests. +torture-init +set MD_TEST_OPTS [list \ + {-Os -march=z900} {-Os -march=z13} \ + {-O0 -march=z900} {-O0 -march=z13} \ + {-O1 -march=z900} {-O1 -march=z13} \ + {-O2 -march=z900} {-O2 -march=z13} \ + {-O3 -march=z900} {-O3 -march=z13}] +set-torture-options $MD_TEST_OPTS +gcc-dg-runtest [lsort [glob -nocomplain $md_tests]] "" $DEFAULT_CFLAGS torture-finish # All done. -- 2.3.0