From patchwork Tue Feb 28 02:31:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: HAO CHEN GUI X-Patchwork-Id: 62231 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp2767315wrd; Mon, 27 Feb 2023 18:32:34 -0800 (PST) X-Google-Smtp-Source: AK7set8apKTOh3OHheoi1OWkdIdWOQj9+DAk5ss2jwZhBXaV7W9sKWAHWeEIrgmkFyn5hCWayxra X-Received: by 2002:a17:906:4699:b0:8d7:6699:3bae with SMTP id a25-20020a170906469900b008d766993baemr788436ejr.57.1677551553908; Mon, 27 Feb 2023 18:32:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677551553; cv=none; d=google.com; s=arc-20160816; b=kfq/EvifoVmUO3IV17x2izQThW4Zn7fXAH+/xNptixnmoQ6oPP8hbmvUzJR/a1aksh blAbBUKwCVFts9qPH61dJgEIL1gcTypC8TEMR6Qcm/uiubPbTPohtkRiXxU3H8c0IQFG 5ZjYXe2GT4V/67KLyTEH02L8Nk4cV4Fb2Xto0OkMtWLN9enTADV8WEQHkY/bGQauPTyX OwgWixoVP0eHfeuJnGtr2IJirq4Nzt06ZV8ptTXvuzjibeT0fj4PYlyqwgi9QeuR/4Cl sfJE7KPNDOfNeijNLvhzM+v35gdcpCGeJt+cmNEUrQ6RPmofKxIhMNZ4AmvgNNc08vqk bWrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:subject:cc:to:content-language:user-agent :mime-version:date:message-id:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=qWU/xgaYhaFc7CF6HZ3NQulEiHNXGgjwurCRRN+GFAg=; b=pxZ14AljpCLdhraZG3mcNTPJMKDY9Dy/ADAa8ceCwdVZRIrv+7/pwBv9hNE3AU5vFU b4eEP32jm+XIZIJlqd73DHu8znDbubZJ0E8AylO4FcxCUWEjLy8K3VDKtmaQl4+tcrOb z1VCGJdZQc0lXBTjJ+DYAOrPA9kipivQalbbCpUNr8d/frRhNLrpxzQJo74ZlFaytnXZ MhrP3rc9Z1YoUQGCA6hW4wCEB0DgsNs4qP+3k8VbLRUkNqvANzj4bxnfw+g6k6Xfl/2o dOd/m+kP+OAE8mb4ZgZzwbJ+HsUjPpWRuPLod9XazeEUhDJuwDBhGLWXlKxWm/crjUpv bwsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sVua8z7B; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id h21-20020a170906585500b008db44ebf302si1485118ejs.133.2023.02.27.18.32.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 18:32:33 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=sVua8z7B; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E051D3858407 for ; Tue, 28 Feb 2023 02:32:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E051D3858407 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1677551552; bh=qWU/xgaYhaFc7CF6HZ3NQulEiHNXGgjwurCRRN+GFAg=; h=Date:To:Cc:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=sVua8z7B0runO3IlI7Y3T+4W2POg+fjFTAZ8wetZgQKv03h86Myjl7wdGQgv6skyu EmzAWj26Stwn6AKBSq1wCLbfXRMMsWzwrjXtbJx7Cm1QdlUbQRLM7zgz/DNBC9OWKW ERifoMl96+tEZTQr9hCy0F+/FAISyEnbk4ydNx+A= 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 868323858D32 for ; Tue, 28 Feb 2023 02:31:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 868323858D32 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31S1gMtu024241; Tue, 28 Feb 2023 02:31:41 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3p1863rtwd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Feb 2023 02:31:41 +0000 Received: from m0098399.ppops.net (m0098399.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 31S2V8oH029260; Tue, 28 Feb 2023 02:31:40 GMT Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3p1863rtvu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Feb 2023 02:31:40 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 31R8iMlo026427; Tue, 28 Feb 2023 02:31:38 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma04ams.nl.ibm.com (PPS) with ESMTPS id 3nybb4jj9y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Feb 2023 02:31:38 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 31S2VYV624379946 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 28 Feb 2023 02:31:34 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C19A12004B; Tue, 28 Feb 2023 02:31:34 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8DA1D20043; Tue, 28 Feb 2023 02:31:32 +0000 (GMT) Received: from [9.197.235.111] (unknown [9.197.235.111]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 28 Feb 2023 02:31:32 +0000 (GMT) Message-ID: <1d7afca5-9434-6698-e695-d3e7b44fe562@linux.ibm.com> Date: Tue, 28 Feb 2023 10:31:31 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Content-Language: en-US To: gcc-patches Cc: Segher Boessenkool , David , "Kewen.Lin" , Peter Bergner Subject: [PATCHv2, rs6000] Merge two vector shift when their sources are the same X-TM-AS-GCONF: 00 X-Proofpoint-GUID: RvBeIYjWnpc1GK5z0sZsdUXW1bkdRE7G X-Proofpoint-ORIG-GUID: sIqEg5HXN_VvQYZcGAFoR_wJ_zPibzTO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-27_19,2023-02-27_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 spamscore=0 clxscore=1011 mlxscore=0 mlxlogscore=986 phishscore=0 bulkscore=0 adultscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302280014 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: HAO CHEN GUI via Gcc-patches From: HAO CHEN GUI Reply-To: HAO CHEN GUI Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759040298126956600?= X-GMAIL-MSGID: =?utf-8?q?1759040298126956600?= Hi, This patch merges two "vsldoi" insns when their sources are the same. Particularly, it is simplified to be one move if the total shift is multiples of 16 bytes. Bootstrapped and tested on powerpc64-linux BE and LE with no regressions. Thanks Gui Haochen ChangeLog 2023-02-28 Haochen Gui gcc/ * config/rs6000/altivec.md (*altivec_vsldoi_dup_): New insn_and_split to merge two vsldoi when the sources are the same. gcc/testsuite/ * gcc.target/powerpc/vsldoi_merge.c: New. patch.diff diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index 84660073f32..fae8ec2b2e8 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -2529,6 +2529,35 @@ (define_insn "altivec_vsldoi_" "vsldoi %0,%1,%2,%3" [(set_attr "type" "vecperm")]) +(define_insn_and_split "*altivec_vsldoi_dup_" + [(set (match_operand:VM 0 "register_operand" "=v") + (unspec:VM [(unspec:VM [(match_operand:VM 1 "register_operand" "v") + (match_dup 1) + (match_operand:QI 2 "immediate_operand" "i")] + UNSPEC_VSLDOI) + (unspec:VM [(match_dup 1) + (match_dup 1) + (match_dup 2)] + UNSPEC_VSLDOI) + (match_operand:QI 3 "immediate_operand" "i")] + UNSPEC_VSLDOI))] + "TARGET_ALTIVEC" + "#" + "&& 1" + [(const_int 0)] +{ + unsigned int shift1 = UINTVAL (operands[2]); + unsigned int shift2 = UINTVAL (operands[3]); + + unsigned int shift = (shift1 + shift2) % 16; + if (shift) + emit_insn (gen_altivec_vsldoi_ (operands[0], operands[1], + operands[1], GEN_INT (shift))); + else + emit_move_insn (operands[0], operands[1]); + DONE; +}) + (define_insn "altivec_vupkhs" [(set (match_operand:VP 0 "register_operand" "=v") (unspec:VP [(match_operand: 1 "register_operand" "v")] diff --git a/gcc/testsuite/gcc.target/powerpc/vsldoi_merge.c b/gcc/testsuite/gcc.target/powerpc/vsldoi_merge.c new file mode 100644 index 00000000000..eebd7b4d382 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vsldoi_merge.c @@ -0,0 +1,59 @@ +/* { dg-do run } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -mvsx -save-temps" } */ + +#include "altivec.h" + +#ifdef DEBUG +#include +#endif + +void abort (void); + +__attribute__ ((noipa)) vector signed int +test1 (vector signed int a) +{ + a = vec_sld (a, a, 2); + a = vec_sld (a, a, 6); + return a; +} + +__attribute__ ((noipa)) vector signed int +test2 (vector signed int a) +{ + a = vec_sld (a, a, 14); + a = vec_sld (a, a, 2); + return a; +} + +int main (void) +{ + vector signed int a = {1,2,3,4}; + vector signed int result_a; + int i; + + result_a = test1 (a); + vector signed int expect_a = {3,4,1,2}; + + for (i = 0; i< 4; i++) + if (result_a[i] != expect_a[i]) +#ifdef DEBUG + printf("ERROR: test1 result[%d] = %d, not expected[%d] = %d\n", + i, result_a[i], i, expect_a[i]); +#else + abort (); +#endif + + result_a = test2 (a); + + for (i = 0; i< 4; i++) + if (result_a[i] != a[i]) +#ifdef DEBUG + printf("ERROR: test2 result[%d] = %d, not expected[%d] = %d\n", + i, result_a[i], i, a[i]); +#else + abort (); +#endif +} + +/* { dg-final { scan-assembler-times {\mvsldoi\M} 1 } } */