Re: [PATCH v4] Run tests only if the machine supports the instruction set.

2016-12-22 Thread Andreas Krebbel
> gcc/ChangeLog-archlevel
> 
>   * config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
>   __S390_ARCH_LEVEL__.
> gcc/testsuite/ChangeLog-setmem
> 
>   * gcc.target/s390/md/setmem_long-1.c: Use "s390_useable_hw".
>   * gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
>   * gcc.target/s390/md/andc-splitter-1.c: Likewise.
>   * gcc.target/s390/md/andc-splitter-2.c: Likewise.
>   * lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
>   * gcc.target/s390/s390.exp: Import torture_current_flags.
>   (check_effective_target_s390_useable_hw): New.
>   (check_effective_target_s390_z900_hw): New.
>   (check_effective_target_s390_z990_hw): New.
>   (check_effective_target_s390_z9_ec_hw): New.
>   (check_effective_target_s390_z10_hw): New.
>   (check_effective_target_s390_z196_hw): New.
>   (check_effective_target_s390_zEC12_hw): New.
>   (check_effective_target_s390_z13_hw): New.
>   (check_effective_target_z10_instructions): Removed.
>   (torture tests): Add optimization level without -march=.
>   Reorder torture tests for good cache usage.

Applied. Thanks!

-Andreas-



Re: [PATCH v4] Run tests only if the machine supports the instruction set.

2016-12-21 Thread Dominik Vogt
On Tue, Dec 20, 2016 at 10:32:26PM +0100, Jakub Jelinek wrote:
> On Tue, Dec 20, 2016 at 10:26:13PM +0100, Dominik Vogt wrote:
> > On Tue, Dec 20, 2016 at 11:57:52AM -0800, Mike Stump wrote:
> > > On Dec 20, 2016, at 6:10 AM, Dominik Vogt  wrote:
> > > > Right, it gets called even more often than one would think, and
> > > > even with empty torture_current_options.  The attached new patch
> > > > (v3) removes -Ox options and superflous whitespace and caches that
> > > > between calls if it's not empty.  There's another, permanent cache
> > > > for calls without any flags.  With proper ordering of the torture
> > > > options, the test program is built only a couple of times.
> > > 
> > > Seems fine to me, but most other cases use the postfix _hw.  Any
> > > reason not use use _hw (and not _runable) on these?  If not,
> > > could you please use _hw instead.
> > 
> > No specific reason other than lack of imagination.  "s390_hw" is a
> > bit too generic in my eyes -> the new names are:
> > 
> > v4:
> > 
> >   * Renamed "s390_runnable" to "s390_useable_hw".
> >   * Renamed "z900_runnable" to "s390_z900_hw",
> > Renamed "z10_runnable" to "s390_z10_hw",
> > etc.
> 
> Grepping for _hw in target-supports.exp reveals that usually the
> effective target predicates are called _hw or _hw_available,
> __hw only if it is too ambiguous (e.g. alpha_max_hw or
> ppc_float128_hw_available).  So I think z900_hw, z10_hw etc. is good
> enough (as long as it does not clash with some other target isa name),
> s390_usable_hw or s390_hw_available is fine.

Okay.  We usually prefix everyting with "s390_" on S/390, so I'd
say we don't make an exception here - even if there are no
potential naming collisions.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany



Re: [PATCH v4] Run tests only if the machine supports the instruction set.

2016-12-20 Thread Jakub Jelinek
On Tue, Dec 20, 2016 at 10:26:13PM +0100, Dominik Vogt wrote:
> On Tue, Dec 20, 2016 at 11:57:52AM -0800, Mike Stump wrote:
> > On Dec 20, 2016, at 6:10 AM, Dominik Vogt  wrote:
> > > Right, it gets called even more often than one would think, and
> > > even with empty torture_current_options.  The attached new patch
> > > (v3) removes -Ox options and superflous whitespace and caches that
> > > between calls if it's not empty.  There's another, permanent cache
> > > for calls without any flags.  With proper ordering of the torture
> > > options, the test program is built only a couple of times.
> > 
> > Seems fine to me, but most other cases use the postfix _hw.  Any
> > reason not use use _hw (and not _runable) on these?  If not,
> > could you please use _hw instead.
> 
> No specific reason other than lack of imagination.  "s390_hw" is a
> bit too generic in my eyes -> the new names are:
> 
> v4:
> 
>   * Renamed "s390_runnable" to "s390_useable_hw".
>   * Renamed "z900_runnable" to "s390_z900_hw",
> Renamed "z10_runnable" to "s390_z10_hw",
> etc.

Grepping for _hw in target-supports.exp reveals that usually the
effective target predicates are called _hw or _hw_available,
__hw only if it is too ambiguous (e.g. alpha_max_hw or
ppc_float128_hw_available).  So I think z900_hw, z10_hw etc. is good
enough (as long as it does not clash with some other target isa name),
s390_usable_hw or s390_hw_available is fine.

Jakub


Re: [PATCH v4] Run tests only if the machine supports the instruction set.

2016-12-20 Thread Dominik Vogt
On Tue, Dec 20, 2016 at 11:57:52AM -0800, Mike Stump wrote:
> On Dec 20, 2016, at 6:10 AM, Dominik Vogt  wrote:
> > Right, it gets called even more often than one would think, and
> > even with empty torture_current_options.  The attached new patch
> > (v3) removes -Ox options and superflous whitespace and caches that
> > between calls if it's not empty.  There's another, permanent cache
> > for calls without any flags.  With proper ordering of the torture
> > options, the test program is built only a couple of times.
> 
> Seems fine to me, but most other cases use the postfix _hw.  Any
> reason not use use _hw (and not _runable) on these?  If not,
> could you please use _hw instead.

No specific reason other than lack of imagination.  "s390_hw" is a
bit too generic in my eyes -> the new names are:

v4:

  * Renamed "s390_runnable" to "s390_useable_hw".
  * Renamed "z900_runnable" to "s390_z900_hw",
Renamed "z10_runnable" to "s390_z10_hw",
etc.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany
gcc/ChangeLog-archlevel

* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
__S390_ARCH_LEVEL__.
gcc/testsuite/ChangeLog-setmem

* gcc.target/s390/md/setmem_long-1.c: Use "s390_useable_hw".
* gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
* gcc.target/s390/md/andc-splitter-1.c: Likewise.
* gcc.target/s390/md/andc-splitter-2.c: Likewise.
* lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
* gcc.target/s390/s390.exp: Import torture_current_flags.
(check_effective_target_s390_useable_hw): New.
(check_effective_target_s390_z900_hw): New.
(check_effective_target_s390_z990_hw): New.
(check_effective_target_s390_z9_ec_hw): New.
(check_effective_target_s390_z10_hw): New.
(check_effective_target_s390_z196_hw): New.
(check_effective_target_s390_zEC12_hw): New.
(check_effective_target_s390_z13_hw): New.
(check_effective_target_z10_instructions): Removed.
(torture tests): Add optimization level without -march=.
Reorder torture tests for good cache usage.
>From 8ae8d6f48fbede4188a7e02c835fcf9d0b535da7 Mon Sep 17 00:00:00 2001
From: Dominik Vogt 
Date: Tue, 13 Dec 2016 10:21:08 +0100
Subject: [PATCH] S/390: Run md tests only if the machine supports the
 instruction set.

---
 gcc/config/s390/s390-c.c   |  17 +++
 gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c |  19 +--
 gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c |  19 +--
 gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c  |   4 +-
 gcc/testsuite/gcc.target/s390/md/setmem_long-1.c   |   7 +-
 gcc/testsuite/gcc.target/s390/s390.exp | 170 ++---
 gcc/testsuite/lib/gcc-dg.exp   |   2 +
 7 files changed, 198 insertions(+), 40 deletions(-)

diff --git a/gcc/config/s390/s390-c.c b/gcc/config/s390/s390-c.c
index fcf7477..e841365 100644
--- a/gcc/config/s390/s390-c.c
+++ b/gcc/config/s390/s390-c.c
@@ -320,6 +320,8 @@ s390_cpu_cpp_builtins_internal (cpp_reader *pfile,
 {
   s390_def_or_undef_macro (pfile, MASK_OPT_HTM, old_opts, opts,
   "__HTM__", "__HTM__");
+  s390_def_or_undef_macro (pfile, MASK_OPT_VX, old_opts, opts,
+  "__S390_VX__", "__S390_VX__");
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
   "__VEC__=10301", "__VEC__");
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
@@ -328,6 +330,21 @@ s390_cpu_cpp_builtins_internal (cpp_reader *pfile,
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
   "__bool=__attribute__((s390_vector_bool)) unsigned",
   "__bool");
+  {
+char macro_def[64];
+int arch_level;
+gcc_assert (s390_arch != PROCESSOR_NATIVE);
+arch_level = (int)s390_arch + 3;
+if (s390_arch >= PROCESSOR_2094_Z9_EC)
+  /* Z9_EC has the same level as Z9_109.  */
+  arch_level--;
+/* Review when a new arch is added and increase the value.  */
+char dummy[23 - 2 * PROCESSOR_max] __attribute__((unused));
+sprintf (macro_def, "__S390_ARCH_LEVEL__=%d", arch_level);
+cpp_undef (pfile, "__S390_ARCH_LEVEL__");
+cpp_define (pfile, macro_def);
+  }
+
   if (!flag_iso)
 {
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
diff --git a/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c 
b/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
index ed78921..3f0677c 100644
--- a/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
+++ b/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
@@ -1,7 +1,8 @@
 /* Machine description pattern tests.  */
 
-/* { dg-do run { target { lp64 } } } */
+/* { dg-do compile { target { lp64 } } } */
 /* { dg-options "-mzarch -save-temps -dP" } */
+/* { dg-do run { target { lp64 && s390_useable_hw } } } */
 /* 

Re: [PATCH v3] Run tests only if the machine supports the instruction set.

2016-12-20 Thread Mike Stump
On Dec 20, 2016, at 6:10 AM, Dominik Vogt  wrote:
> Right, it gets called even more often than one would think, and
> even with empty torture_current_options.  The attached new patch
> (v3) removes -Ox options and superflous whitespace and caches that
> between calls if it's not empty.  There's another, permanent cache
> for calls without any flags.  With proper ordering of the torture
> options, the test program is built only a couple of times.

Seems fine to me, but most other cases use the postfix _hw.  Any reason not use 
use _hw (and not _runable) on these?  If not, could you please use _hw instead.



Re: [PATCH v3] Run tests only if the machine supports the instruction set.

2016-12-20 Thread Dominik Vogt
On Tue, Dec 20, 2016 at 11:32:58AM +0100, Jakub Jelinek wrote:
> On Tue, Dec 20, 2016 at 11:22:47AM +0100, Dominik Vogt wrote:
> > On Mon, Dec 19, 2016 at 06:00:21PM +0100, Jakub Jelinek wrote:
> > > On Mon, Dec 19, 2016 at 05:50:40PM +0100, Dominik Vogt wrote:
> > > > * config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
> > > > __S390_ARCH_LEVEL__.
> > > > gcc/testsuite/ChangeLog-setmem
> > > > 
> > > > * gcc.target/s390/md/setmem_long-1.c: Use "runnable".
> > > > * gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
> > > > * gcc.target/s390/md/andc-splitter-1.c: Likewise.
> > > > * gcc.target/s390/md/andc-splitter-2.c: Likewise.
> > > > * lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
> > > > * gcc.target/s390/s390.exp: Import torture_current_flags.
> > > > (check_effective_target_runnable): New.
> > > 
> > > Unless you want to add support for all targets in the runnable
> > > effective target, I think it would be better to call it less generically,
> > > s390_runnable or similar.

Done.

> > What do you think about the change in gcc-dg.exp?
> > 
> > We couldn't
> > decide whether it's a valid way of retrieving the flags needed for
> > compiling s390_check_runnable or not.  It would be nice to get all
> > options that are relevant for the test case, including the ones
> > from "dg-options" (etc.), but that probably requires larger
> > changes to lib/*.exp.  (The target specific check functions could
> > be removed then.)
> 
> I'm not a testsuite maintainer nor very good in tcl, so I think you want a
> testsuite maintainer to ack it in any case.
> But, I'd say you want something that will not be terribly expensive.
> If you have an effective target that happens to get flags from the
> current test, then that is necessarily non-cacheable, which would mean
> in addition to compiling every test you also compile another proglet for it.
> I think your current patch does that too, there is no caching, so it would
> be desirable to cache the results; you should invalidate those caches when
> torture_current_flags change.  See e.g. et_cache uses in
> target-supports.exp.  You want to remember torture_current_flags for which
> you've computed the s390_runnable et and if it changes, reset the cache.
> The other *_runnable flags can be probably just normally cached (and you do,
> by using check_runtime rather than check_runtime_nocache).

Right, it gets called even more often than one would think, and
even with empty torture_current_options.  The attached new patch
(v3) removes -Ox options and superflous whitespace and caches that
between calls if it's not empty.  There's another, permanent cache
for calls without any flags.  With proper ordering of the torture
options, the test program is built only a couple of times.

v3:

  * Cache test results.
  * Reorder torture tests for better caching.
  * Add ".machinemode zarch" to assembly file because the $flags
are overridden by the board options.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany
gcc/ChangeLog-archlevel

* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
__S390_ARCH_LEVEL__.
gcc/testsuite/ChangeLog-setmem

* gcc.target/s390/md/setmem_long-1.c: Use "s390_runnable".
* gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
* gcc.target/s390/md/andc-splitter-1.c: Likewise.
* gcc.target/s390/md/andc-splitter-2.c: Likewise.
* lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
* gcc.target/s390/s390.exp: Import torture_current_flags.
(check_effective_target_s390_runnable): New.
(check_effective_target_z900_runnable): New.
(check_effective_target_z990_runnable): New.
(check_effective_target_z9_ec_runnable): New.
(check_effective_target_z10_runnable): New.
(check_effective_target_z196_runnable): New.
(check_effective_target_zEC12_runnable): New.
(check_effective_target_z13_runnable): New.
(check_effective_target_z10_instructions): Removed.
(MD_TEST_OPTS): Add optimization level without -march=.
>From 4bd55b91b0487590bc9c9bde60664e5d94d2dc08 Mon Sep 17 00:00:00 2001
From: Dominik Vogt 
Date: Tue, 13 Dec 2016 10:21:08 +0100
Subject: [PATCH] S/390: Run md tests only if the machine supports the
 instruction set.

---
 gcc/config/s390/s390-c.c   |  17 +++
 gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c |  19 +--
 gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c |  19 +--
 gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c  |   4 +-
 gcc/testsuite/gcc.target/s390/md/setmem_long-1.c   |   7 +-
 gcc/testsuite/gcc.target/s390/s390.exp | 170 ++---
 gcc/testsuite/lib/gcc-dg.exp   |   2 +
 7 files changed, 198 insertions(+), 40 deletions(-)

diff --git a/gcc/config/s390/s390-c.c b/gcc/config/s390/s390-c.c
index 

Re: [PATCH v2] Run tests only if the machine supports the instruction set.

2016-12-20 Thread Jakub Jelinek
On Tue, Dec 20, 2016 at 11:22:47AM +0100, Dominik Vogt wrote:
> On Mon, Dec 19, 2016 at 06:00:21PM +0100, Jakub Jelinek wrote:
> > On Mon, Dec 19, 2016 at 05:50:40PM +0100, Dominik Vogt wrote:
> > >   * config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
> > >   __S390_ARCH_LEVEL__.
> > > gcc/testsuite/ChangeLog-setmem
> > > 
> > >   * gcc.target/s390/md/setmem_long-1.c: Use "runnable".
> > >   * gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
> > >   * gcc.target/s390/md/andc-splitter-1.c: Likewise.
> > >   * gcc.target/s390/md/andc-splitter-2.c: Likewise.
> > >   * lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
> > >   * gcc.target/s390/s390.exp: Import torture_current_flags.
> > >   (check_effective_target_runnable): New.
> > 
> > Unless you want to add support for all targets in the runnable
> > effective target, I think it would be better to call it less generically,
> > s390_runnable or similar.
> 
> Fair enough.
> 
> What do you think about the change in gcc-dg.exp?
> 
> We couldn't
> decide whether it's a valid way of retrieving the flags needed for
> compiling s390_check_runnable or not.  It would be nice to get all
> options that are relevant for the test case, including the ones
> from "dg-options" (etc.), but that probably requires larger
> changes to lib/*.exp.  (The target specific check functions could
> be removed then.)

I'm not a testsuite maintainer nor very good in tcl, so I think you want a
testsuite maintainer to ack it in any case.
But, I'd say you want something that will not be terribly expensive.
If you have an effective target that happens to get flags from the
current test, then that is necessarily non-cacheable, which would mean
in addition to compiling every test you also compile another proglet for it.
I think your current patch does that too, there is no caching, so it would
be desirable to cache the results; you should invalidate those caches when
torture_current_flags change.  See e.g. et_cache uses in
target-supports.exp.  You want to remember torture_current_flags for which
you've computed the s390_runnable et and if it changes, reset the cache.
The other *_runnable flags can be probably just normally cached (and you do,
by using check_runtime rather than check_runtime_nocache).

Jakub


Re: [PATCH v2] Run tests only if the machine supports the instruction set.

2016-12-20 Thread Dominik Vogt
On Mon, Dec 19, 2016 at 06:00:21PM +0100, Jakub Jelinek wrote:
> On Mon, Dec 19, 2016 at 05:50:40PM +0100, Dominik Vogt wrote:
> > * config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
> > __S390_ARCH_LEVEL__.
> > gcc/testsuite/ChangeLog-setmem
> > 
> > * gcc.target/s390/md/setmem_long-1.c: Use "runnable".
> > * gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
> > * gcc.target/s390/md/andc-splitter-1.c: Likewise.
> > * gcc.target/s390/md/andc-splitter-2.c: Likewise.
> > * lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
> > * gcc.target/s390/s390.exp: Import torture_current_flags.
> > (check_effective_target_runnable): New.
> 
> Unless you want to add support for all targets in the runnable
> effective target, I think it would be better to call it less generically,
> s390_runnable or similar.

Fair enough.

What do you think about the change in gcc-dg.exp?

We couldn't
decide whether it's a valid way of retrieving the flags needed for
compiling s390_check_runnable or not.  It would be nice to get all
options that are relevant for the test case, including the ones
from "dg-options" (etc.), but that probably requires larger
changes to lib/*.exp.  (The target specific check functions could
be removed then.)

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany



Re: [PATCH v2] Run tests only if the machine supports the instruction set.

2016-12-19 Thread Jakub Jelinek
On Mon, Dec 19, 2016 at 05:50:40PM +0100, Dominik Vogt wrote:
>   * config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
>   __S390_ARCH_LEVEL__.
> gcc/testsuite/ChangeLog-setmem
> 
>   * gcc.target/s390/md/setmem_long-1.c: Use "runnable".
>   * gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
>   * gcc.target/s390/md/andc-splitter-1.c: Likewise.
>   * gcc.target/s390/md/andc-splitter-2.c: Likewise.
>   * lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
>   * gcc.target/s390/s390.exp: Import torture_current_flags.
>   (check_effective_target_runnable): New.

Unless you want to add support for all targets in the runnable
effective target, I think it would be better to call it less generically,
s390_runnable or similar.

Jakub


Re: [PATCH v2] Run tests only if the machine supports the instruction set.

2016-12-19 Thread Dominik Vogt
On Mon, Dec 19, 2016 at 03:28:06PM +0100, Dominik Vogt wrote:
> The attached patch is specific to S/390 but contains a small
> common code change in gcc-dg.exp.  It fixes the notorious problem
> of md tests running on an S/390 machine that does not support the
> z13 instruction set.
> 
> Bootstrapped and tested on s390x biarch.

Version 2 with results of internal discussion:

 * Renamed __s390_arh_level__ to upper case.
 * Replaced __VECTOR__ with new macro __S390_VX__.
 * Added individual (but currently unused) effective-target
   functions for the various architectures.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany
gcc/ChangeLog-archlevel

* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
__S390_ARCH_LEVEL__.
gcc/testsuite/ChangeLog-setmem

* gcc.target/s390/md/setmem_long-1.c: Use "runnable".
* gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
* gcc.target/s390/md/andc-splitter-1.c: Likewise.
* gcc.target/s390/md/andc-splitter-2.c: Likewise.
* lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
* gcc.target/s390/s390.exp: Import torture_current_flags.
(check_effective_target_runnable): New.
(check_effective_target_z900_runnable): New.
(check_effective_target_z990_runnable): New.
(check_effective_target_z9_ec_runnable): New.
(check_effective_target_z10_runnable): New.
(check_effective_target_z196_runnable): New.
(check_effective_target_zEC12_runnable): New.
(check_effective_target_z13_runnable): New.
(check_effective_target_z10_instructions): Removed.
(MD_TEST_OPTS): Add optimization level without -march=.
>From 7c74ce8212fa85272e1928b2d2df44b74cba5d0a Mon Sep 17 00:00:00 2001
From: Dominik Vogt 
Date: Tue, 13 Dec 2016 10:21:08 +0100
Subject: [PATCH] S/390: Run md tests only if the machine supports the
 instruction set.

---
 gcc/config/s390/s390-c.c   |  17 +++
 gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c |  19 ++--
 gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c |  19 ++--
 gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c  |   4 +-
 gcc/testsuite/gcc.target/s390/md/setmem_long-1.c   |   7 +-
 gcc/testsuite/gcc.target/s390/s390.exp | 126 ++---
 gcc/testsuite/lib/gcc-dg.exp   |   2 +
 7 files changed, 155 insertions(+), 39 deletions(-)

diff --git a/gcc/config/s390/s390-c.c b/gcc/config/s390/s390-c.c
index fcf7477..e841365 100644
--- a/gcc/config/s390/s390-c.c
+++ b/gcc/config/s390/s390-c.c
@@ -320,6 +320,8 @@ s390_cpu_cpp_builtins_internal (cpp_reader *pfile,
 {
   s390_def_or_undef_macro (pfile, MASK_OPT_HTM, old_opts, opts,
   "__HTM__", "__HTM__");
+  s390_def_or_undef_macro (pfile, MASK_OPT_VX, old_opts, opts,
+  "__S390_VX__", "__S390_VX__");
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
   "__VEC__=10301", "__VEC__");
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
@@ -328,6 +330,21 @@ s390_cpu_cpp_builtins_internal (cpp_reader *pfile,
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
   "__bool=__attribute__((s390_vector_bool)) unsigned",
   "__bool");
+  {
+char macro_def[64];
+int arch_level;
+gcc_assert (s390_arch != PROCESSOR_NATIVE);
+arch_level = (int)s390_arch + 3;
+if (s390_arch >= PROCESSOR_2094_Z9_EC)
+  /* Z9_EC has the same level as Z9_109.  */
+  arch_level--;
+/* Review when a new arch is added and increase the value.  */
+char dummy[23 - 2 * PROCESSOR_max] __attribute__((unused));
+sprintf (macro_def, "__S390_ARCH_LEVEL__=%d", arch_level);
+cpp_undef (pfile, "__S390_ARCH_LEVEL__");
+cpp_define (pfile, macro_def);
+  }
+
   if (!flag_iso)
 {
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
diff --git a/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c 
b/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
index ed78921..9c41ac4 100644
--- a/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
+++ b/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
@@ -1,7 +1,8 @@
 /* Machine description pattern tests.  */
 
-/* { dg-do run { target { lp64 } } } */
+/* { dg-do compile { target { lp64 } } } */
 /* { dg-options "-mzarch -save-temps -dP" } */
+/* { dg-do run { target { lp64 && runnable } } } */
 /* Skip test if -O0 is present on the command line:
 
 { dg-skip-if "" { *-*-* } { "-O0" } { "" } }
@@ -13,26 +14,26 @@
 __attribute__ ((noinline))
 unsigned long andc_vv(unsigned long a, unsigned long b)
 { return ~b & a; }
-/* { dg-final { scan-assembler ":15 .\* \{\\*anddi3\}" } } */
-/* { dg-final { scan-assembler ":15 .\* \{\\*xordi3\}" } } */
+/* { dg-final { scan-assembler ":16 .\* \{\\*anddi3\}" } } */
+/* { dg-final { scan-assembler ":16 .\* \{\\*xordi3\}" } } */
 
 

Run tests only if the machine supports the instruction set.

2016-12-19 Thread Dominik Vogt
The attached patch is specific to S/390 but contains a small
common code change in gcc-dg.exp.  It fixes the notorious problem
of md tests running on an S/390 machine that does not support the
z13 instruction set.

Bootstrapped and tested on s390x biarch.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany
gcc/ChangeLog-archlevel

* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
__s390_arch_level__.
gcc/testsuite/ChangeLog-setmem

* gcc.target/s390/md/setmem_long-1.c: Use "runnable".
* gcc.target/s390/md/rXsbg_mode_sXl.c: Likewise.
* gcc.target/s390/md/andc-splitter-1.c: Likewise.
* gcc.target/s390/md/andc-splitter-2.c: Likewise.
* lib/gcc-dg.exp (gcc-dg-runtest): Export torture_current_flags.
* gcc.target/s390/s390.exp: Import torture_current_flags.
(check_effective_target_runnable): New.
(check_effective_target_z10_instructions): Removed.
(MD_TEST_OPTS): Add optimization level without -march=.
>From 21e99fb09c5e8350892d99e6c351515333594aae Mon Sep 17 00:00:00 2001
From: Dominik Vogt 
Date: Tue, 13 Dec 2016 10:21:08 +0100
Subject: [PATCH] S/390: Run md tests only if the machine supports the
 instruction set.

---
 gcc/config/s390/s390-c.c   | 15 ++
 gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c | 19 +++
 gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c | 19 +++
 gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c  |  4 +-
 gcc/testsuite/gcc.target/s390/md/setmem_long-1.c   |  7 +--
 gcc/testsuite/gcc.target/s390/s390.exp | 60 --
 gcc/testsuite/lib/gcc-dg.exp   |  2 +
 7 files changed, 87 insertions(+), 39 deletions(-)

diff --git a/gcc/config/s390/s390-c.c b/gcc/config/s390/s390-c.c
index fcf7477..8a9ea79 100644
--- a/gcc/config/s390/s390-c.c
+++ b/gcc/config/s390/s390-c.c
@@ -328,6 +328,21 @@ s390_cpu_cpp_builtins_internal (cpp_reader *pfile,
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
   "__bool=__attribute__((s390_vector_bool)) unsigned",
   "__bool");
+  {
+char macro_def[64];
+int arch_level;
+gcc_assert (s390_arch != PROCESSOR_NATIVE);
+arch_level = (int)s390_arch + 3;
+if (s390_arch >= PROCESSOR_2094_Z9_EC)
+  /* Z9_EC has the same level as Z9_109.  */
+  arch_level--;
+/* Review when a new arch is added and increase the value.  */
+char dummy[23 - 2 * PROCESSOR_max] __attribute__((unused));
+sprintf (macro_def, "__s390_arch_level__=%d", arch_level);
+cpp_undef (pfile, "__s390_arch_level__");
+cpp_define (pfile, macro_def);
+  }
+
   if (!flag_iso)
 {
   s390_def_or_undef_macro (pfile, MASK_ZVECTOR, old_opts, opts,
diff --git a/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c 
b/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
index ed78921..9c41ac4 100644
--- a/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
+++ b/gcc/testsuite/gcc.target/s390/md/andc-splitter-1.c
@@ -1,7 +1,8 @@
 /* Machine description pattern tests.  */
 
-/* { dg-do run { target { lp64 } } } */
+/* { dg-do compile { target { lp64 } } } */
 /* { dg-options "-mzarch -save-temps -dP" } */
+/* { dg-do run { target { lp64 && runnable } } } */
 /* Skip test if -O0 is present on the command line:
 
 { dg-skip-if "" { *-*-* } { "-O0" } { "" } }
@@ -13,26 +14,26 @@
 __attribute__ ((noinline))
 unsigned long andc_vv(unsigned long a, unsigned long b)
 { return ~b & a; }
-/* { dg-final { scan-assembler ":15 .\* \{\\*anddi3\}" } } */
-/* { dg-final { scan-assembler ":15 .\* \{\\*xordi3\}" } } */
+/* { dg-final { scan-assembler ":16 .\* \{\\*anddi3\}" } } */
+/* { dg-final { scan-assembler ":16 .\* \{\\*xordi3\}" } } */
 
 __attribute__ ((noinline))
 unsigned long andc_pv(unsigned long *a, unsigned long b)
 { return ~b & *a; }
-/* { dg-final { scan-assembler ":21 .\* \{\\*anddi3\}" } } */
-/* { dg-final { scan-assembler ":21 .\* \{\\*xordi3\}" } } */
+/* { dg-final { scan-assembler ":22 .\* \{\\*anddi3\}" } } */
+/* { dg-final { scan-assembler ":22 .\* \{\\*xordi3\}" } } */
 
 __attribute__ ((noinline))
 unsigned long andc_vp(unsigned long a, unsigned long *b)
 { return ~*b & a; }
-/* { dg-final { scan-assembler ":27 .\* \{\\*anddi3\}" } } */
-/* { dg-final { scan-assembler ":27 .\* \{\\*xordi3\}" } } */
+/* { dg-final { scan-assembler ":28 .\* \{\\*anddi3\}" } } */
+/* { dg-final { scan-assembler ":28 .\* \{\\*xordi3\}" } } */
 
 __attribute__ ((noinline))
 unsigned long andc_pp(unsigned long *a, unsigned long *b)
 { return ~*b & *a; }
-/* { dg-final { scan-assembler ":33 .\* \{\\*anddi3\}" } } */
-/* { dg-final { scan-assembler ":33 .\* \{\\*xordi3\}" } } */
+/* { dg-final { scan-assembler ":34 .\* \{\\*anddi3\}" } } */
+/* { dg-final { scan-assembler ":34 .\* \{\\*xordi3\}" } } */
 
 /* { dg-final { scan-assembler-times "\tngr\?k\?\t" 4 } } */
 /* { dg-final { scan-assembler-times