From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 24AEC3860769 for ; Thu, 9 Nov 2023 08:27:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 24AEC3860769 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 24AEC3860769 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699518453; cv=none; b=nsVG1pOfum+d7HgQF1eD+9j3zfQKBZFfmOLJwKo6MJDSrzsoIfJ7T4yQfCSNrz0IUv80aVNPv6GqX0mxejp+1HEIuCkbiSDULKj7WtyDmt1KDI/4PGsESAkoaNxIjrcmDdoEss15KzKjtboEprCfB7QYyaZrQtmSGEduNjW1WAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699518453; c=relaxed/simple; bh=Nh9yHAHR8ibKXWmJMmRTBUJGEy8eGRz2k3ZSURtUliQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=CQ2C/4tDdtfVClYnvyg6NeO22EJBQXkWGFCs4prg8WWER9sCQY9BVyIVxELM6KBFiQwjD3/tDOOT7mThwdihA6d0Efhcx5fc9smAhZJR3t+Qfq5SgE29f4WuxQ8AquNpsnoNF7Z2Xytkw47q10zrtg3KVr9broewIjqqiFj2iyQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0353728.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3A98I9hp028923 for ; Thu, 9 Nov 2023 08:27:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=NZVmrHaTHMK6MJ/QNXWHS+l+hqbe+I9X5e845fQQ81E=; b=G0E4g/8seKhXxFa73jz71fzM2ehJ625SCzJY5ixecuwo+78tIjRpuymfR4oZitAkDV0f TGSmrORDVHl6f0kDjW8lX4ydlGiB924stLR77IFgUH4rbIprajsEA24lBT+Bz1Aj2JcC 4jHpcwcWFD/SMZl8Glsf0ufizRhfgNYgrfdzPKcWNIACeqvaqTMX8LmzsC/s//4Tf20Y EuixXxW6HzC/BHbmBeBavoVPliTzWKom8dWjdyEey5yLI2s7mx1jDlYyKzasL0ccwsjJ r8XNj/xgateYfP90cX/dhVJGv9QUhIiFu0CiG7mMMqWF2SGklhNhG9yPNksgA3LTdkoo jQ== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3u8usp8b1e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 09 Nov 2023 08:27:28 +0000 Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3A97wQB8014346 for ; Thu, 9 Nov 2023 08:22:27 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 3u7w222kch-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 09 Nov 2023 08:22:27 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3A98MOHb18612978 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 9 Nov 2023 08:22:24 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4E05120049; Thu, 9 Nov 2023 08:22:24 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2D4F320040; Thu, 9 Nov 2023 08:22:24 +0000 (GMT) Received: from a8345010.lnxne.boe (unknown [9.152.108.100]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTPS; Thu, 9 Nov 2023 08:22:24 +0000 (GMT) From: Stefan Schulze Frielinghaus To: krebbel@linux.ibm.com, gcc-patches@gcc.gnu.org Cc: Stefan Schulze Frielinghaus Subject: [PATCH 2/3] s390: Add expand_perm_reverse_elements Date: Thu, 9 Nov 2023 09:22:10 +0100 Message-ID: <20231109082211.2505-2-stefansf@linux.ibm.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109082211.2505-1-stefansf@linux.ibm.com> References: <20231109082211.2505-1-stefansf@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 9ckMG4zs0q150vtibX_HvCzm1nqo-4uO X-Proofpoint-ORIG-GUID: 9ckMG4zs0q150vtibX_HvCzm1nqo-4uO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-09_07,2023-11-08_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 bulkscore=0 clxscore=1015 impostorscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311090068 X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Replace expand_perm_with_rot, expand_perm_with_vster, and expand_perm_with_vstbrq with a general implementation expand_perm_reverse_elements. Bootstrapped and regtested on s390. Ok for mainline? gcc/ChangeLog: * config/s390/s390.cc (expand_perm_with_rot): Remove. (expand_perm_reverse_elements): New. (expand_perm_with_vster): Remove. (expand_perm_with_vstbrq): Remove. (vectorize_vec_perm_const_1): Replace removed functions with new one. --- gcc/config/s390/s390.cc | 88 ++++++++--------------------------------- 1 file changed, 16 insertions(+), 72 deletions(-) diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 185eb59f8b8..e36efec8ddc 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -17693,78 +17693,28 @@ is_reverse_perm_mask (const struct expand_vec_perm_d &d) return true; } -/* The case of reversing a four-element vector [0, 1, 2, 3] - can be handled by first permuting the doublewords - [2, 3, 0, 1] and subsequently rotating them by 32 bits. */ static bool -expand_perm_with_rot (const struct expand_vec_perm_d &d) +expand_perm_reverse_elements (const struct expand_vec_perm_d &d) { - if (d.nelt != 4) + if (d.op0 != d.op1 || !is_reverse_perm_mask (d)) return false; - if (d.op0 == d.op1 && is_reverse_perm_mask (d)) - { - if (d.testing_p) - return true; - - rtx tmp = gen_reg_rtx (d.vmode); - rtx op0_reg = force_reg (GET_MODE (d.op0), d.op0); - - emit_insn (gen_vpdi4_2 (d.vmode, tmp, op0_reg, op0_reg)); - if (d.vmode == V4SImode) - emit_insn (gen_rotlv4si3_di (d.target, tmp)); - else if (d.vmode == V4SFmode) - emit_insn (gen_rotlv4sf3_di (d.target, tmp)); - - return true; - } - - return false; -} + if (d.testing_p) + return true; -/* If we just reverse the elements, emit an eltswap if we have - vler/vster. */ -static bool -expand_perm_with_vster (const struct expand_vec_perm_d &d) -{ - if (TARGET_VXE2 && d.op0 == d.op1 && is_reverse_perm_mask (d) - && (d.vmode == V2DImode || d.vmode == V2DFmode - || d.vmode == V4SImode || d.vmode == V4SFmode - || d.vmode == V8HImode)) + switch (d.vmode) { - if (d.testing_p) - return true; - - if (d.vmode == V2DImode) - emit_insn (gen_eltswapv2di (d.target, d.op0)); - else if (d.vmode == V2DFmode) - emit_insn (gen_eltswapv2df (d.target, d.op0)); - else if (d.vmode == V4SImode) - emit_insn (gen_eltswapv4si (d.target, d.op0)); - else if (d.vmode == V4SFmode) - emit_insn (gen_eltswapv4sf (d.target, d.op0)); - else if (d.vmode == V8HImode) - emit_insn (gen_eltswapv8hi (d.target, d.op0)); - return true; + case V1TImode: emit_move_insn (d.target, d.op0); break; + case V2DImode: emit_insn (gen_eltswapv2di (d.target, d.op0)); break; + case V4SImode: emit_insn (gen_eltswapv4si (d.target, d.op0)); break; + case V8HImode: emit_insn (gen_eltswapv8hi (d.target, d.op0)); break; + case V16QImode: emit_insn (gen_eltswapv16qi (d.target, d.op0)); break; + case V2DFmode: emit_insn (gen_eltswapv2df (d.target, d.op0)); break; + case V4SFmode: emit_insn (gen_eltswapv4sf (d.target, d.op0)); break; + default: gcc_unreachable(); } - return false; -} -/* If we reverse a byte-vector this is the same as - byte reversing it which can be done with vstbrq. */ -static bool -expand_perm_with_vstbrq (const struct expand_vec_perm_d &d) -{ - if (TARGET_VXE2 && d.op0 == d.op1 && is_reverse_perm_mask (d) - && d.vmode == V16QImode) - { - if (d.testing_p) - return true; - - emit_insn (gen_eltswapv16qi (d.target, d.op0)); - return true; - } - return false; + return true; } /* Try to emit vlbr/vstbr. Note, this is only a candidate insn since @@ -17826,21 +17776,15 @@ expand_perm_as_a_vlbr_vstbr_candidate (const struct expand_vec_perm_d &d) static bool vectorize_vec_perm_const_1 (const struct expand_vec_perm_d &d) { - if (expand_perm_with_merge (d)) - return true; - - if (expand_perm_with_vster (d)) + if (expand_perm_reverse_elements (d)) return true; - if (expand_perm_with_vstbrq (d)) + if (expand_perm_with_merge (d)) return true; if (expand_perm_with_vpdi (d)) return true; - if (expand_perm_with_rot (d)) - return true; - if (expand_perm_as_a_vlbr_vstbr_candidate (d)) return true; -- 2.41.0