From patchwork Wed Oct 20 08:34:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 46425 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 283143857C42 for ; Wed, 20 Oct 2021 08:35:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 283143857C42 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1634718916; bh=1o/GutuBGq9Y1auThdVUKB3nR37me2i/uxEADK43vwo=; h=Subject:To:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=g2m5C2GNx1v+VLtq72+hFJao11+ETxMgNP1shm/fjKKdURotGMJA5lV9GGyu+h0vb GytSk9sprxa1zDl8+T3cVxehwGHC8onj86FvJUZuELIYyslqSzjwLwI9RC7uR7g064 4zeanYg5rh8krN97QcEK6lIb5Ob/x638JGfog5o0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id EAEB43858C3A for ; Wed, 20 Oct 2021 08:34:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EAEB43858C3A Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 19K8MAUY020218 for ; Wed, 20 Oct 2021 04:34:46 -0400 Received: from ppma05fra.de.ibm.com (6c.4a.5195.ip4.static.sl-reverse.com [149.81.74.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 3btfhv06wu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 20 Oct 2021 04:34:45 -0400 Received: from pps.filterd (ppma05fra.de.ibm.com [127.0.0.1]) by ppma05fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 19K8XXBb009517 for ; Wed, 20 Oct 2021 08:34:43 GMT Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by ppma05fra.de.ibm.com with ESMTP id 3bqpc9yw5x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 20 Oct 2021 08:34:42 +0000 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 19K8Yd5q62849312 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 20 Oct 2021 08:34:39 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 247C911C066; Wed, 20 Oct 2021 08:34:39 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0969B11C052; Wed, 20 Oct 2021 08:34:39 +0000 (GMT) Received: from li-926bd7cc-2dd1-11b2-a85c-f6adc0f5efec.ibm.com (unknown [9.171.64.225]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 20 Oct 2021 08:34:38 +0000 (GMT) Subject: [RFC] Partial vectors for s390 To: GCC Patches Message-ID: Date: Wed, 20 Oct 2021 10:34:38 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-GUID: AZiGFuxnn_JdRGHS562u7t_ubz0cngBG X-Proofpoint-ORIG-GUID: AZiGFuxnn_JdRGHS562u7t_ubz0cngBG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-10-20_04,2021-10-19_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=999 spamscore=0 suspectscore=0 mlxscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 phishscore=0 priorityscore=1501 clxscore=1015 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2109230001 definitions=main-2110200047 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Robin Dapp via Gcc-patches From: Robin Dapp Reply-To: Robin Dapp Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi, I have been playing around with making Kewen's partial vector changes workable with s390: We have a vll instruction that can be passed the highest byte to load. The rather unfortunate consequence of this is that a length of zero cannot be specified. The partial vector framework, however, relies a lot on the fact that a len_load can be made a NOP using a length of zero. After confirming an additional zero-check before each vll is definitely too slow across SPEC and some discussion with Kewen we figured the easiest way forward is to exclude loops with multiple VFs (despite giving up vectorization possibilities). These are prone to len_loads with zero while the regular induction variable check prevents them in single-VF loops. So, as a quick hack, I went with whether we are guaranteed not to emit len_load with zero now. On top, I subtract 1 from the passed length in the expander, which, supposedly, is also not ideal. There are some regressions that I haven't fully analyzed yet but whether and when to actually enable this feature could be a backend decision with the necessary middle-end checks already in place. Any ideas on how to properly check for the zero condition and exclude the cases that cause it? Kewen suggested enriching the len_load optabs with a separate parameter. Regards Robin diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 75f24e7c4f6..f79222daeb6 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -1170,6 +1170,9 @@ vect_verify_loop_lens (loop_vec_info loop_vinfo) if (LOOP_VINFO_LENS (loop_vinfo).is_empty ()) return false; + if (LOOP_VINFO_LENS (loop_vinfo).length () > 1) + return false; + which could be made a hook, eventually. FWIW this is sufficient to make bootstrap, regtest and compiling the SPEC suites succeed. I'm unsure