From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id 26CEF38493E6 for ; Mon, 20 Feb 2023 09:49:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 26CEF38493E6 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=linux.ibm.com Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pTvXl-0005Ao-SA for gcc-patches@gcc.gnu.org; Sun, 19 Feb 2023 21:04:43 -0500 Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31JMe2ll026049; Mon, 20 Feb 2023 02:04:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : to : from : subject : cc : content-type : content-transfer-encoding; s=pp1; bh=C6ckSG2A3CyTNeWBl4iuk9htUkr2vB3KqyglQG8243I=; b=Awo3ij05QWVy4SHnq5c7PyMpOkhotaQIPurjoKpTusEO117MjdhgIqe7TgiPLHOe7Dvt sQpUJhIiHUxQNHfA5ViIHgbSkz7yHg+GKDI0vJeIwnEQ7Dv6QLLP4MmIrMlaIGtVJ6Xe SspbU5D2qY5IuFY3PM7hI15r/fVIASpiXjGMVrzPd9Rh/QsWm62kqHdbLv9fR0F1UwNZ /2nZyyR1sJKAYoDp34ybbAfkHEu+O5Eqfo5wLZox9HWcofKMpaGGGV73v9h1kuu+ShHr wC0TecAHs0M6HbJaY2MtGamahAMPuVEPCAAtiSNW3AqyEk77K/8jpyzfpC0MdDiWf+XX bA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nuse5x059-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 20 Feb 2023 02:04:36 +0000 Received: from m0098417.ppops.net (m0098417.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 31K1dxk9010504; Mon, 20 Feb 2023 02:04:35 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 3nuse5x04j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 20 Feb 2023 02:04:35 +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 31JJo9CC003913; Mon, 20 Feb 2023 02:04:34 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma04ams.nl.ibm.com (PPS) with ESMTPS id 3ntpa6a1j7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 20 Feb 2023 02:04:33 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 31K24UBm22413610 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 20 Feb 2023 02:04:30 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 64C4B20043; Mon, 20 Feb 2023 02:04:30 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 946B520040; Mon, 20 Feb 2023 02:04:28 +0000 (GMT) Received: from [9.197.250.3] (unknown [9.197.250.3]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 20 Feb 2023 02:04:28 +0000 (GMT) Message-ID: <4005d148-ca54-880b-6c97-7f2fae15d8d1@linux.ibm.com> Date: Mon, 20 Feb 2023 10:04:27 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Content-Language: en-US To: gcc-patches From: HAO CHEN GUI Subject: [PATCH, rs6000] Merge two vector shift when their sources are the same Cc: Segher Boessenkool , David , "Kewen.Lin" , Peter Bergner Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: 4yGJ-u6OXTVicqAU8g5aYVKbqn9U-X3i X-Proofpoint-GUID: 00NjvMvH5f9hLpEz9DXA-nJOH-YsduPJ 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-19_15,2023-02-17_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 suspectscore=0 spamscore=0 mlxlogscore=999 adultscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302200017 Received-SPF: pass client-ip=148.163.158.5; envelope-from=guihaoc@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9,DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_EF=-0.1,RCVD_IN_MSPIKE_H2=-0.001,SPF_HELO_NONE=0.001,SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_PASS,SPF_SOFTFAIL,TXREP autolearn=unavailable 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-20 Haochen Gui gcc/ * config/rs6000/altivec.md (*altivec_vsldoi_dup_): New insn_and_split to merge two vsldoi. 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..22e9c4c1fc5 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_operand:VM 2 "register_operand" "v") + (match_operand:QI 3 "immediate_operand" "i")] + UNSPEC_VSLDOI) + (unspec:VM [(match_dup 1) + (match_dup 2) + (match_dup 3)] + UNSPEC_VSLDOI) + (match_operand:QI 4 "immediate_operand" "i")] + UNSPEC_VSLDOI))] + "TARGET_ALTIVEC" + "#" + "&& 1" + [(const_int 0)] +{ + unsigned int shift1 = UINTVAL (operands[3]); + unsigned int shift2 = UINTVAL (operands[4]); + + 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..4ea72561282 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vsldoi_merge.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -mvsx" } */ + +#include "altivec.h" + +vector signed int test1 (vector signed int a, vector signed int b) +{ + a = vec_sld (a, b, 2); + a = vec_sld (a, a, 4); + return a; +} + +vector signed int test2 (vector signed int a, vector signed int b) +{ + a = vec_sld (a, b, 14); + a = vec_sld (a, a, 2); + return a; +} + +/* { dg-final { scan-assembler-times {\mvsldoi\M} 1 } } */