From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 128139 invoked by alias); 5 Sep 2019 11:10:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 128128 invoked by uid 89); 5 Sep 2019 11:10:35 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=H*m:iii, H*MI:iii, gimple.c, gimplec X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0a-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.156.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 05 Sep 2019 11:10:33 +0000 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x85B7s8U011484 for ; Thu, 5 Sep 2019 07:10:30 -0400 Received: from e06smtp05.uk.ibm.com (e06smtp05.uk.ibm.com [195.75.94.101]) by mx0a-001b2d01.pphosted.com with ESMTP id 2utxjhqars-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 05 Sep 2019 07:10:29 -0400 Received: from localhost by e06smtp05.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 5 Sep 2019 12:10:27 +0100 Received: from b06avi18626390.portsmouth.uk.ibm.com (9.149.26.192) by e06smtp05.uk.ibm.com (192.168.101.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Thu, 5 Sep 2019 12:10:24 +0100 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x85B9xfQ40042844 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 5 Sep 2019 11:09:59 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 955BCA4040; Thu, 5 Sep 2019 11:10:22 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4D6DBA405E; Thu, 5 Sep 2019 11:10:22 +0000 (GMT) Received: from white.boeblingen.de.ibm.com (unknown [9.152.97.226]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 5 Sep 2019 11:10:22 +0000 (GMT) From: Ilya Leoshkevich To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, richard.sandiford@arm.com, segher@kernel.crashing.org, joseph@codesourcery.com, krebbel@linux.ibm.com, rdapp@linux.ibm.com, Ilya Leoshkevich Subject: [PATCH v3 0/9] S/390: Use signaling FP comparison instructions Date: Thu, 05 Sep 2019 11:10:00 -0000 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit x-cbid: 19090511-0020-0000-0000-00000368088B X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19090511-0021-0000-0000-000021BD7C57 Message-Id: <20190905111019.8951-1-iii@linux.ibm.com> X-IsSubscribed: yes X-SW-Source: 2019-09/txt/msg00270.txt.bz2 Bootstrapped and regtested on s390x-redhat-linux, x86_64-redhat-linux, ppc64le-redhat-linux. This patch series adds signaling FP comparison support (both scalar and vector) to s390 backend. Patches 1-4 make it possible to query supported vcond rtxes and make use of that for z13. Patches 5-7 are preparation cleanups. Patch 8 is an actual implementation. Path 9 contains new tests, that make sure autovectorized comparisons use proper instructions. Ilya Leoshkevich (9): Allow COND_EXPR and VEC_COND_EXPR condtions to trap Introduce rtx_alloca, alloca_raw_REG and alloca_rtx_fmt_* Introduce can_vector_compare_p function S/390: Do not use signaling vector comparisons on z13 S/390: Implement vcond expander for V1TI,V1TF S/390: Remove code duplication in vec_unordered S/390: Remove code duplication in vec_* comparison expanders S/390: Use signaling FP comparison instructions S/390: Test signaling FP comparison instructions v1->v2: Improve wording in documentation commit message. Replace hook with optabs query. Add signaling eq test. v2->v3: Allow COND_EXPR and VEC_COND_EXPR conditions to throw, while making sure that GIMPLE_COND's condition still cannot throw. Remove documentation patch (superseded by https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=275303). Add PR target/77918 reference. gcc/config/s390/2827.md | 14 +- gcc/config/s390/2964.md | 13 +- gcc/config/s390/3906.md | 17 +- gcc/config/s390/8561.md | 19 +- gcc/config/s390/s390-builtins.def | 16 +- gcc/config/s390/s390-modes.def | 8 + gcc/config/s390/s390.c | 38 ++- gcc/config/s390/s390.md | 14 + gcc/config/s390/vector.md | 283 ++++++++++++------ gcc/emit-rtl.c | 15 +- gcc/gengenrtl.c | 64 +++- gcc/gimple-expr.c | 25 +- gcc/gimple-expr.h | 11 + gcc/gimple.c | 2 + gcc/gimplify.c | 5 +- gcc/optabs-tree.c | 41 ++- gcc/optabs.c | 43 ++- gcc/optabs.h | 16 + gcc/rtl.c | 7 +- gcc/rtl.h | 12 + gcc/testsuite/gcc.target/s390/s390.exp | 8 + .../gcc.target/s390/vector/vec-scalar-cmp-1.c | 8 +- .../s390/zvector/autovec-double-quiet-eq.c | 8 + .../s390/zvector/autovec-double-quiet-ge.c | 8 + .../s390/zvector/autovec-double-quiet-gt.c | 8 + .../s390/zvector/autovec-double-quiet-le.c | 8 + .../s390/zvector/autovec-double-quiet-lt.c | 8 + .../zvector/autovec-double-quiet-ordered.c | 10 + .../s390/zvector/autovec-double-quiet-uneq.c | 10 + .../zvector/autovec-double-quiet-unordered.c | 11 + .../autovec-double-signaling-eq-z13-finite.c | 10 + .../zvector/autovec-double-signaling-eq-z13.c | 9 + .../zvector/autovec-double-signaling-eq.c | 11 + .../autovec-double-signaling-ge-z13-finite.c | 10 + .../zvector/autovec-double-signaling-ge-z13.c | 9 + .../zvector/autovec-double-signaling-ge.c | 8 + .../autovec-double-signaling-gt-z13-finite.c | 10 + .../zvector/autovec-double-signaling-gt-z13.c | 9 + .../zvector/autovec-double-signaling-gt.c | 8 + .../autovec-double-signaling-le-z13-finite.c | 10 + .../zvector/autovec-double-signaling-le-z13.c | 9 + .../zvector/autovec-double-signaling-le.c | 8 + .../autovec-double-signaling-lt-z13-finite.c | 10 + .../zvector/autovec-double-signaling-lt-z13.c | 9 + .../zvector/autovec-double-signaling-lt.c | 8 + ...autovec-double-signaling-ltgt-z13-finite.c | 9 + .../autovec-double-signaling-ltgt-z13.c | 9 + .../zvector/autovec-double-signaling-ltgt.c | 9 + .../s390/zvector/autovec-double-smax-z13.F90 | 11 + .../s390/zvector/autovec-double-smax.F90 | 8 + .../s390/zvector/autovec-double-smin-z13.F90 | 11 + .../s390/zvector/autovec-double-smin.F90 | 8 + .../s390/zvector/autovec-float-quiet-eq.c | 8 + .../s390/zvector/autovec-float-quiet-ge.c | 8 + .../s390/zvector/autovec-float-quiet-gt.c | 8 + .../s390/zvector/autovec-float-quiet-le.c | 8 + .../s390/zvector/autovec-float-quiet-lt.c | 8 + .../zvector/autovec-float-quiet-ordered.c | 10 + .../s390/zvector/autovec-float-quiet-uneq.c | 10 + .../zvector/autovec-float-quiet-unordered.c | 11 + .../s390/zvector/autovec-float-signaling-eq.c | 11 + .../s390/zvector/autovec-float-signaling-ge.c | 8 + .../s390/zvector/autovec-float-signaling-gt.c | 8 + .../s390/zvector/autovec-float-signaling-le.c | 8 + .../s390/zvector/autovec-float-signaling-lt.c | 8 + .../zvector/autovec-float-signaling-ltgt.c | 9 + .../gcc.target/s390/zvector/autovec-fortran.h | 7 + .../autovec-long-double-signaling-ge.c | 8 + .../autovec-long-double-signaling-gt.c | 8 + .../autovec-long-double-signaling-le.c | 8 + .../autovec-long-double-signaling-lt.c | 8 + .../gcc.target/s390/zvector/autovec.h | 41 +++ gcc/tree-cfg.c | 5 +- gcc/tree-eh.c | 8 + gcc/tree-ssa-forwprop.c | 7 +- gcc/tree-ssa-propagate.c | 9 +- 76 files changed, 994 insertions(+), 191 deletions(-) create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-eq.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-ge.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-gt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-le.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-lt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-ordered.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-uneq.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-quiet-unordered.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-eq-z13-finite.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-eq-z13.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-eq.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ge-z13-finite.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ge-z13.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ge.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-gt-z13-finite.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-gt-z13.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-gt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-le-z13-finite.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-le-z13.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-le.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-lt-z13-finite.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-lt-z13.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-lt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ltgt-z13-finite.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ltgt-z13.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-signaling-ltgt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smax-z13.F90 create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smax.F90 create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smin-z13.F90 create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-double-smin.F90 create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-eq.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-ge.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-gt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-le.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-lt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-ordered.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-uneq.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-quiet-unordered.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-eq.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-ge.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-gt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-le.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-lt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-float-signaling-ltgt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-fortran.h create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-ge.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-gt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-le.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec-long-double-signaling-lt.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/autovec.h -- 2.21.0