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 868323858D32 for ; Tue, 28 Feb 2023 02:31:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 868323858D32 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 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : to : cc : from : subject : content-type : content-transfer-encoding; s=pp1; bh=qWU/xgaYhaFc7CF6HZ3NQulEiHNXGgjwurCRRN+GFAg=; b=HfCspWc+iGnzexghfPce4Hmxv6johuvY0iKaEMYzy4cVbYEqmkYsYq3/GmDNWXU+RF6Y LoS4SjSHf+PpG7ZYhZAccRNYXwCF1JbpDv5wTN+1/1x8TwaRRQB4vNoY7c748rto/ix2 TJuvprILnEnYD6CSxfinG9rB+fdvxQ5jc4ge06G3ELQjBOFiqQFZuFlk7Q5Snw0O8KVw wS1fXWIRbh1/U9MFivPp/cEmu11rGjRfcmgdDGTcbL6Eftvejth+w0629Onz/7+E0+TF pe+qG9jVX8CG8RWclEdwM0vZ6RcK4P45MKL19UjpyQqYuSPUwlRW3L518JwdT04J8Y0q ZQ== 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 From: HAO CHEN GUI Subject: [PATCHv2, rs6000] Merge two vector shift when their sources are the same Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 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 List-Id: 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 } } */