From patchwork Thu Sep 11 13:55:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: jeevitha X-Patchwork-Id: 120088 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 B163F3858C62 for ; Thu, 11 Sep 2025 13:57:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B163F3858C62 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=Y/lTi/UW X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 736F538560B2 for ; Thu, 11 Sep 2025 13:55:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 736F538560B2 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 736F538560B2 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1757598958; cv=none; b=ampPPubgTu5tP+rBn4shdQ8D7vtw8W1wM7QGzRUBbVzy3GzTv/bcehY6tdc+WVLXkwPMVyIj/PVDj3wiskrKkDxUeiorGdsdGLqt+AispRIFTYvj21qyRUGP7VJgRQyBVinnHdRbTnnr/w8tNSWFnT2rhVzTdAP8FiT/eWsrRAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1757598958; c=relaxed/simple; bh=UnGTUtDteztNolqO+P8sA2Lti4eJNrqOewHgZ8ewmLk=; h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject:To; b=xPuWG9QTvqZQaW3drMUC9eAwS9RHEdtyLcMyUgxus2GDBcndRY0AzUfzbTCI9KWW2YcC15Qpl6UdVzqCHc0W2Pu+rTQXghY55WnyxsBBL4DdCyV/AL2Wy/kBe5Mr89LJKY7muLjsx53cTvHL25e69Jl098+IuE8QBj61GSWn51o= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 736F538560B2 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B9X4KV009812; Thu, 11 Sep 2025 13:55:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h= content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=pp1; bh=i/FU6JjwrqMj2Fo4h7jhscJEYwPp GF3TvTc2IEYbWdw=; b=Y/lTi/UWosPr/KGGpFRL9YeIqexk6/UjPD/R1S8pRBs/ bkncNB25SYc4CWc0j+bs9IYRgZuO4wpJmS3t5UI01vvQnuIEAw1cmUdro0NPEbBH 2gOWKoQpR58nK4x/zULBnQCWhHpNSWP/3EzQRc2MdFYLNFC+Ljt17hToJOitAgA7 QPzhh8wV2fNe2HqYsdbRsowMi7TKnSBX9BSCwA4DxJgLTsu5MKXXkwYf3U0mQBtE 63eGA/6cGZAUQpidFqFmPme5mVWTpvDrmLEZuwkQKA727CpW/As0a6fbIgiFfPaJ g7jCUX5rFp1Sqg2wovN7UEO9CoVWvN8ETPYmGDx1GA== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 490ukesre2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 11 Sep 2025 13:55:52 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 58BAsVEH001156; Thu, 11 Sep 2025 13:55:52 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 491203ntw8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 11 Sep 2025 13:55:51 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 58BDtoev4457184 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 11 Sep 2025 13:55:51 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B82FA58045; Thu, 11 Sep 2025 13:55:50 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4FE1958050; Thu, 11 Sep 2025 13:55:48 +0000 (GMT) Received: from [9.61.248.35] (unknown [9.61.248.35]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Thu, 11 Sep 2025 13:55:47 +0000 (GMT) Message-ID: Date: Thu, 11 Sep 2025 19:25:45 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: jeevitha Subject: [PATCH]rs6000: Enable GIMPLE folding for constant shift in vec_sl [PR121867] To: GCC Patches , Segher Boessenkool , jskumari@linux.ibm.com, Michael Meissner Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTA2MDE5NSBTYWx0ZWRfX9L8/Jlu5z/yz m7POwb52rL56QVnQcP+NuESEV0tJCU6ujz38n2pxTIeFgL8uWRUETU9jDQ3hzW8QRyb9rDg3xHd Owc/6qFyjzbeOsI0oakW5RA7+MJMO4pE76T9/dZLpaAasZA+7G9PljyGi8OV2HEoloZsCej2F1s eI51ATbFC46Y11yCIgJI8aOTOc8Y6fYDLLIph+OaKCWCBlZpNt4+7DgOy4q4W3L73dXLa32YJQ2 hHtSMqJOys/2i8UD+yWWeu87aWD9S3voBs2QRR5kji3GmtbnnqmPA/cmJmGeZFoP2a0zHzg27ra dgdrKX0tm9GmDphwsEu0mqgKB1fu0+KrxE/UAJzZhmeBgLuewrGX7Ac32uiNRHl2050ePEf1hNE kRySU486 X-Proofpoint-ORIG-GUID: 1FPe-j8v_xzto3ZHn4uRdcobe0AU4lbo X-Proofpoint-GUID: 1FPe-j8v_xzto3ZHn4uRdcobe0AU4lbo X-Authority-Analysis: v=2.4 cv=StCQ6OO0 c=1 sm=1 tr=0 ts=68c2d4e8 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=IkcTkHD0fZMA:10 a=yJojWOMRYYMA:10 a=VnNF1IyMAAAA:8 a=DG6tDk-He3ifwhkcq0gA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-11_01,2025-09-11_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509060195 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org Hi All, The following patch has been bootstrapped and regtested on powerpc64le-linux. PowerPC vector shift left instructions (vslb, vslh, vslw, etc.) implement modulo semantics: only the low N bits of the shift amount are considered (3 for bytes, 4 for halfwords and 5 for words). Higher bits can be ignored safely. Previously, rs6000_gimple_fold_builtin() restricted folding due to a type check when the first argument was a signed vector. This blocked modulo reduction and caused constant shifts to fall back to memory loads instead of using immediate splat instructions. This patch removes the overflow check on the first argument. Since the shift amount (second argument) is always unsigned, modulo reduction is correct regardless of whether the data being shifted is signed or unsigned. As a result, constant shift amounts are now folded into splat instructions, improving code generation and avoiding unnecessary memory accesses. 2025-09-11 Jeevitha Palanisamy gcc/ PR target/121867 * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_builtin): Remove overflow type check on shift input. gcc/testsuite/ PR target/121867 * gcc.target/powerpc/pr86731-longlong.c: Adjust test to handle the failed case. * gcc.target/powerpc/pr121867.c: New test. diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc index bc1580f051b..5c964403257 100644 --- a/gcc/config/rs6000/rs6000-builtin.cc +++ b/gcc/config/rs6000/rs6000-builtin.cc @@ -1710,10 +1710,6 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi) location_t loc; gimple_seq stmts = NULL; arg0 = gimple_call_arg (stmt, 0); - tree arg0_type = TREE_TYPE (arg0); - if (INTEGRAL_TYPE_P (TREE_TYPE (arg0_type)) - && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0_type))) - return false; arg1 = gimple_call_arg (stmt, 1); tree arg1_type = TREE_TYPE (arg1); tree unsigned_arg1_type = unsigned_type_for (TREE_TYPE (arg1)); diff --git a/gcc/testsuite/gcc.target/powerpc/pr121867.c b/gcc/testsuite/gcc.target/powerpc/pr121867.c new file mode 100644 index 00000000000..0c8f3f8372c --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr121867.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-maltivec -mdejagnu-cpu=power8 -O2 -mvsx " } */ + +/* This test ensures that we use GIMPLE folding when the element value exceeds + the element bit width. It performs modulo reduction and uses vspltis[bhw] + to broadcast the value, instead of storing it in memory and performing a + shift operation. */ + +#include + +vector unsigned char shlb(vector unsigned char in) +{ + return vec_sl(in, vec_splats((unsigned char)35)); +} + +vector unsigned short shlh(vector unsigned short in) +{ + return vec_sl(in, vec_splats((unsigned short)18)); +} + +vector unsigned int shlw(vector unsigned int in) +{ + return vec_sl(in, vec_splats((unsigned int)34)); +} + +/* { dg-final { scan-assembler-times {\mvspltis[bhw]\M} 3 } } */ +/* { dg-final { scan-assembler-times {\mvsl[bhw]\M} 3 } } */ +/* { dg-final { scan-assembler-times {\mlvx\M} 0 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr86731-longlong.c b/gcc/testsuite/gcc.target/powerpc/pr86731-longlong.c index c97cb49de8c..77cb328d3c2 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr86731-longlong.c +++ b/gcc/testsuite/gcc.target/powerpc/pr86731-longlong.c @@ -21,10 +21,9 @@ vector signed long long splats4(void) } /* Codegen will consist of splat and shift instructions for most types. - Noted variations: if gimple folding is disabled, or if -fwrapv is not - specified, the long long tests will generate a vspltisw+vsld pair, - versus generating a single lvx. */ -/* { dg-final { scan-assembler-times {\mvspltis[bhw]\M|\mxxspltib\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mvsl[bhwd]\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mlvx\M} 0 } } */ + Now folding is enabled, the vec_sl tests using vector long long type will + generate a lvx instead of a vspltisw+vsld pair. */ +/* { dg-final { scan-assembler-times {\mvspltis[bhw]\M} 0 } } */ +/* { dg-final { scan-assembler-times {\mvsl[bhwd]\M} 0 } } */ +/* { dg-final { scan-assembler-times {\mlvx\M} 2 } } */