From patchwork Mon Dec 19 14:28:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominik Vogt X-Patchwork-Id: 707103 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tj3Ds1GJJz9vDw for ; Tue, 20 Dec 2016 01:28:27 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="N/Ws5CUP"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:reply-to:mime-version:content-type :message-id; q=dns; s=default; b=CaC1S7UrbhnaXJ8CdKoNyKiPYogPWM9 5q+lNTyIBBQfZo2z96nX2PdHtBGW17woxXrVzyuyBNBdNnkQew+iscXknGIOF83b GEzugma9kkihLH9I07kLHTsd8YWzxVtse0IyfLytNFyVz7BY2vv3HxNentdG02/T cNAaNTh/A2SU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:reply-to:mime-version:content-type :message-id; s=default; bh=ozGl09gd6qAZAGosHIeJ+IYTC1s=; b=N/Ws5 CUPBG6YocHx6QX7PZK/goK7xeVNc3LICH8PMGayJ7BMpHgSQFD8xo5mXCyOZJNCO Ut577uyBF5yYbkLVgL1g7W3OrWkZb+rA0eQgfzmSXbHNK8Y0lRhkq1Oo75pD76lO RFZWOyAWT4eOwlu20KjdKhvBjt/CRnEjs2yaw4= Received: (qmail 1493 invoked by alias); 19 Dec 2016 14:28:15 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1359 invoked by uid 89); 19 Dec 2016 14:28:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=Testing, s390x, tam, Review X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 19 Dec 2016 14:28:12 +0000 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id uBJENWiw111689 for ; Mon, 19 Dec 2016 09:28:10 -0500 Received: from e06smtp09.uk.ibm.com (e06smtp09.uk.ibm.com [195.75.94.105]) by mx0b-001b2d01.pphosted.com with ESMTP id 27efv4wmxj-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 19 Dec 2016 09:28:10 -0500 Received: from localhost by e06smtp09.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 19 Dec 2016 14:28:07 -0000 Received: from d06dlp01.portsmouth.uk.ibm.com (9.149.20.13) by e06smtp09.uk.ibm.com (192.168.101.139) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 19 Dec 2016 14:28:04 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id C5D3B17D805D for ; Mon, 19 Dec 2016 14:30:43 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id uBJES46d18219502; Mon, 19 Dec 2016 14:28:04 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 359FFAE057; Mon, 19 Dec 2016 13:26:14 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BEF08AE045; Mon, 19 Dec 2016 13:26:13 +0000 (GMT) Received: from oc5510024614.ibm.com (unknown [9.145.12.151]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTP; Mon, 19 Dec 2016 13:26:13 +0000 (GMT) Received: by oc5510024614.ibm.com (Postfix, from userid 500) id 07A29C70E; Mon, 19 Dec 2016 15:28:06 +0100 (CET) Date: Mon, 19 Dec 2016 15:28:06 +0100 From: Dominik Vogt To: gcc-patches@gcc.gnu.org Cc: Andreas Krebbel Subject: Run tests only if the machine supports the instruction set. Reply-To: vogt@linux.vnet.ibm.com Mail-Followup-To: vogt@linux.vnet.ibm.com, gcc-patches@gcc.gnu.org, Andreas Krebbel MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-12-10) X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16121914-0036-0000-0000-00000279F3B8 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16121914-0037-0000-0000-000013B01851 Message-Id: <20161219142806.GA23636@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-12-19_11:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1612050000 definitions=main-1612190192 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 ^_^ ^_^ 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 "\txgr\?\t" 4 } } */ diff --git a/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c b/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c index d88da4d..3d4170a 100644 --- a/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c +++ b/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c @@ -1,7 +1,8 @@ /* Machine description pattern tests. */ -/* { dg-do run } */ +/* { dg-do compile } */ /* { dg-options "-save-temps -dP" } */ +/* { dg-do run { target { runnable } } } */ /* Skip test if -O0 is present on the command line: { dg-skip-if "" { *-*-* } { "-O0" } { "" } } @@ -13,26 +14,26 @@ __attribute__ ((noinline)) unsigned int andc_vv(unsigned int a, unsigned int b) { return ~b & a; } -/* { dg-final { scan-assembler ":15 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ -/* { dg-final { scan-assembler ":15 .\* \{\\*xorsi3\}" } } */ +/* { dg-final { scan-assembler ":16 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ +/* { dg-final { scan-assembler ":16 .\* \{\\*xorsi3\}" } } */ __attribute__ ((noinline)) unsigned int andc_pv(unsigned int *a, unsigned int b) { return ~b & *a; } -/* { dg-final { scan-assembler ":21 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ -/* { dg-final { scan-assembler ":21 .\* \{\\*xorsi3\}" } } */ +/* { dg-final { scan-assembler ":22 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ +/* { dg-final { scan-assembler ":22 .\* \{\\*xorsi3\}" } } */ __attribute__ ((noinline)) unsigned int andc_vp(unsigned int a, unsigned int *b) { return ~*b & a; } -/* { dg-final { scan-assembler ":27 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ -/* { dg-final { scan-assembler ":27 .\* \{\\*xorsi3\}" } } */ +/* { dg-final { scan-assembler ":28 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ +/* { dg-final { scan-assembler ":28 .\* \{\\*xorsi3\}" } } */ __attribute__ ((noinline)) unsigned int andc_pp(unsigned int *a, unsigned int *b) { return ~*b & *a; } -/* { dg-final { scan-assembler ":33 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ -/* { dg-final { scan-assembler ":33 .\* \{\\*xorsi3\}" } } */ +/* { dg-final { scan-assembler ":34 .\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ +/* { dg-final { scan-assembler ":34 .\* \{\\*xorsi3\}" } } */ /* { dg-final { scan-assembler-times "\tnr\?k\?\t" 4 } } */ /* { dg-final { scan-assembler-times "\txr\?k\?\t" 4 } } */ diff --git a/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c b/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c index ad442da..3a61e60 100644 --- a/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c +++ b/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c @@ -7,8 +7,8 @@ always wins, even if the condition is false. If this test is run on hardware older than z10 with a buggy dejagnu release, the execution part will fail. - { dg-do assemble { target { ! z10_instructions } } } - { dg-do run { target { z10_instructions } } } + { dg-do assemble } + { dg-do run { target { runnable } } } Skip test if -O0, -march=z900, -march=z9-109 or -march=z9-ec is present on the command line: diff --git a/gcc/testsuite/gcc.target/s390/md/setmem_long-1.c b/gcc/testsuite/gcc.target/s390/md/setmem_long-1.c index bd0c594..ceb9244 100644 --- a/gcc/testsuite/gcc.target/s390/md/setmem_long-1.c +++ b/gcc/testsuite/gcc.target/s390/md/setmem_long-1.c @@ -1,7 +1,8 @@ /* Machine description pattern tests. */ -/* { dg-do run } */ +/* { dg-do compile } */ /* { dg-options "-mmvcle -dP -save-temps" } */ +/* { dg-do run { target { runnable } } } */ __attribute__ ((noinline)) void test(char *p, char c, int len) @@ -16,8 +17,8 @@ void test2(char *p, int c, int len) } /* Check that the right patterns are used. */ -/* { dg-final { scan-assembler-times {c"?:9 .*{[*]setmem_long_?3?1?z?}} 1 } } */ -/* { dg-final { scan-assembler-times {c"?:15 .*{[*]setmem_long_and_?3?1?z?}} 1 { xfail *-*-* } } } */ +/* { dg-final { scan-assembler-times {c"?:10 .*{[*]setmem_long_?3?1?z?}} 1 } } */ +/* { dg-final { scan-assembler-times {c"?:16 .*{[*]setmem_long_and_?3?1?z?}} 1 { xfail *-*-* } } } */ #define LEN 500 char buf[LEN + 2]; diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp index 450dcaf..719dad6 100644 --- a/gcc/testsuite/gcc.target/s390/s390.exp +++ b/gcc/testsuite/gcc.target/s390/s390.exp @@ -16,6 +16,9 @@ # GCC testsuite that uses the `dg.exp' driver. +global torture_current_flags +set torture_current_flags "" + # Exit immediately if this isn't a s390 target. if ![istarget s390*-*-*] then { return @@ -24,17 +27,6 @@ if ![istarget s390*-*-*] then { # Load support procs. load_lib gcc-dg.exp -# Return 1 if z10 instructions work. -proc check_effective_target_z10_instructions { } { - if { ![check_runtime s390_check_z10_instructions [subst { - int main (void) - { - asm ("rosbg %%r2,%%r2,0,0,0" : : ); - return 0; - } - }] "-march=z10 -mzarch" ] } { return 0 } else { return 1 } -} - # Return 1 if the the assembler understands .machine and .machinemode. The # target attribute needs that feature to work. proc check_effective_target_target_attribute { } { @@ -78,6 +70,42 @@ proc check_effective_target_vector { } { }] "-march=z13 -mzarch" ] } { return 0 } else { return 1 } } +# Return 1 if a program using the full instruction set allowed by +# the compiler option can be executed. +proc check_effective_target_runnable { } { + global torture_current_flags + if { ![check_runtime_nocache s390_check_runnable [subst { + int main (void) + { + #if __s390_arch_level__ >= 11 + asm ("lcbb %%r2,0(%%r15),0" : : ); + #elif __s390_arch_level__ >= 10 + asm ("risbgn %%r2,%%r2,0,0,0" : : ); + #elif __s390_arch_level__ >= 9 + asm ("sgrk %%r2,%%r2,%%r2" : : ); + #elif __s390_arch_level__ >= 8 + asm ("rosbg %%r2,%%r2,0,0,0" : : ); + #elif __s390_arch_level__ >= 7 + asm ("nilf %%r2,0" : : ); + #elif __s390_arch_level__ >= 6 + asm ("lay %%r2,0(%%r15)" : : ); + #elif __s390_arch_level__ >= 5 + asm ("tam" : : ); + #endif + #ifdef __HTM__ + { + unsigned int nd; + asm ("etnd %0" : "=d" (nd)); + } + #endif + #ifdef __VEC__ + asm ("vzero %%v0" : : ); + #endif + return 0; + } + }] "$torture_current_flags -m64 -mzarch" ] } { return 0 } else { return 1 } +} + # If a testcase doesn't have special options, use these. global DEFAULT_CFLAGS if ![info exists DEFAULT_CFLAGS] then { @@ -112,11 +140,11 @@ 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}] + {-Os -march=z900} {-Os -march=z13} {-Os} \ + {-O0 -march=z900} {-O0 -march=z13} {-O0} \ + {-O1 -march=z900} {-O1 -march=z13} {-O1} \ + {-O2 -march=z900} {-O2 -march=z13} {-O2} \ + {-O3 -march=z900} {-O3 -march=z13} {-O3}] set-torture-options $MD_TEST_OPTS gcc-dg-runtest [lsort [glob -nocomplain $md_tests]] "" $DEFAULT_CFLAGS torture-finish diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index 6217272..d9681b1 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -533,6 +533,8 @@ proc gcc-dg-runtest { testcases flags default-extra-flags } { set nshort [file tail [file dirname $test]]/[file tail $test] foreach flags_t $option_list { + global torture_current_flags + set torture_current_flags "$flags_t" verbose "Testing $nshort, $flags $flags_t" 1 dg-test $test "$flags $flags_t" ${default-extra-flags} }