Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2225407/?format=api
{ "id": 2225407, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2225407/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/aebWwPa8zMfHIhui@cowardly-lion.the-meissners.org/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/1.1/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null }, "msgid": "<aebWwPa8zMfHIhui@cowardly-lion.the-meissners.org>", "date": "2026-04-21T01:45:36", "name": "GCC 17.0 PowerPC: PR 99293: Optimize splat of a V2DF/V2DI extract with a constant element", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "0865264d1e18391df12eb6816f2e915f52381b73", "submitter": { "id": 73991, "url": "http://patchwork.ozlabs.org/api/1.1/people/73991/?format=api", "name": "Michael Meissner", "email": "meissner@linux.ibm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/aebWwPa8zMfHIhui@cowardly-lion.the-meissners.org/mbox/", "series": [ { "id": 500703, "url": "http://patchwork.ozlabs.org/api/1.1/series/500703/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=500703", "date": "2026-04-21T01:45:36", "name": "GCC 17.0 PowerPC: PR 99293: Optimize splat of a V2DF/V2DI extract with a constant element", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/500703/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2225407/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2225407/checks/", "tags": {}, "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=VlTcQZbz;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=VlTcQZbz", "sourceware.org;\n dmarc=none (p=none dis=none) header.from=linux.ibm.com", "sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=148.163.158.5" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g04vT1JWbz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 11:46:13 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 1891D4BA2E3C\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 01:46:11 +0000 (GMT)", "from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com\n [148.163.158.5])\n by sourceware.org (Postfix) with ESMTPS id AA2964BA2E12\n for <gcc-patches@gcc.gnu.org>; Tue, 21 Apr 2026 01:45:42 +0000 (GMT)", "from pps.filterd (m0360072.ppops.net [127.0.0.1])\n by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63KJgptP1536075; Tue, 21 Apr 2026 01:45:41 GMT", "from ppma23.wdc07v.mail.ibm.com\n (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93])\n by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4dm2k6hjqt-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Tue, 21 Apr 2026 01:45:41 +0000 (GMT)", "from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1])\n by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id\n 63L1ZHZo023049;\n Tue, 21 Apr 2026 01:45:41 GMT", "from smtprelay03.wdc07v.mail.ibm.com ([172.16.1.70])\n by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4dmnsgxvh9-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Tue, 21 Apr 2026 01:45:41 +0000 (GMT)", "from smtpav05.dal12v.mail.ibm.com (smtpav05.dal12v.mail.ibm.com\n [10.241.53.104])\n by smtprelay03.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 63L1jCc327656842\n (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Tue, 21 Apr 2026 01:45:12 GMT", "from smtpav05.dal12v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id 6C82B5805D;\n Tue, 21 Apr 2026 01:45:38 +0000 (GMT)", "from smtpav05.dal12v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id C45F158065;\n Tue, 21 Apr 2026 01:45:37 +0000 (GMT)", "from cowardly-lion.the-meissners.org (unknown [9.61.149.99])\n by smtpav05.dal12v.mail.ibm.com (Postfix) with ESMTPS;\n Tue, 21 Apr 2026 01:45:37 +0000 (GMT)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 1891D4BA2E3C", "OpenDKIM Filter v2.11.0 sourceware.org AA2964BA2E12" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org AA2964BA2E12", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org AA2964BA2E12", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776735942; cv=none;\n b=xAcUv+kxdqIGiKFHd2BW4PKuo1TdHw68eWDFN1Vs+wzfiEa4Jq4x8K6FM/hCO3qxuL5uvowItKCiVMHhXwPdxpK5nBEFcjkBhMCyFwusSW93sbvCBkBAvLpH5Ph7jw7pdkb94H7yN9HL3mbyGttFgyhSjj/PrRUwv5sXX/pD8b8=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776735942; c=relaxed/simple;\n bh=o/xXajrAAQsYa0kiXPn9zv92WtEqbz9Jqw3Opb5OqKs=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=UDI6bJMfNi0VcO/bqtkhbUjsERNVJ+Fux+sK3fRkTpkOlukT12BjG80UibZq6B8p7H7pyXRuLBLqQvJjOJEtuZXNBYswaGywUlA/8q9YXWB1PuxWq0GI2MuDYhEGZayCcVASmXTneXSkDrCe4Bsmelo6vde1e9fmycKTHPAty0I=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=\n content-type:date:from:in-reply-to:message-id:mime-version\n :references:subject:to; s=pp1; bh=xPE8Z+BZBTtfRi1U4SLUzLyhF6MW+h\n MDO1+v6qO6uXI=; b=VlTcQZbzPE4yvDxUSf+5dxYEfdrdHhfZi/LZFb8SRyi5l6\n bHQL9AQLY2nJO3Dj8mHmpNnPxV54NaPe3T1ALHcFKUrFAB2XWxwc7FW89ukVAu8w\n 1kW/WlQ2XZjglTi7XUrPIN7iU73UFQMFjJMwMIlZIYV672z8GaMou+rXhYirFiZR\n nKC3DhDuunto3g/rWQj6kN9gtFd01WwANB7MuY/1hhku01TyfFjCIO7s2LAV8cfy\n HSKFVzjWHcZReAPP9YEUTIs4M2mDrR48C4oFaVbhcoqzarxLzhUMGAwWKuDTC5LO\n ym37ZUTaiBCP/PBEySeTPPXDsSlW+OTF6ly7Sa1w==", "Date": "Mon, 20 Apr 2026 21:45:36 -0400", "From": "Michael Meissner <meissner@linux.ibm.com>", "To": "Michael Meissner <meissner@linux.ibm.com>, gcc-patches@gcc.gnu.org,\n Segher Boessenkool <segher@kernel.crashing.org>,\n jeevitha <jeevitha@linux.ibm.com>,\n Surya Kumari Jangala <jskumari@linux.ibm.com>,\n Kishan Parmar <kishan@linux.ibm.com>,\n Avinash Jayakar <avinashd@linux.ibm.com>,\n Ayappan Perumal <ayappap2@in.ibm.com>,\n Juergen Christ <jchrist@linux.ibm.com>", "Subject": "GCC 17.0 PowerPC: PR 99293: Optimize splat of a V2DF/V2DI extract\n with a constant element", "Message-ID": "<aebWwPa8zMfHIhui@cowardly-lion.the-meissners.org>", "Mail-Followup-To": "Michael Meissner <meissner@linux.ibm.com>,\n gcc-patches@gcc.gnu.org,\n Segher Boessenkool <segher@kernel.crashing.org>,\n jeevitha <jeevitha@linux.ibm.com>,\n Surya Kumari Jangala <jskumari@linux.ibm.com>,\n Kishan Parmar <kishan@linux.ibm.com>,\n Avinash Jayakar <avinashd@linux.ibm.com>,\n Ayappan Perumal <ayappap2@in.ibm.com>,\n Juergen Christ <jchrist@linux.ibm.com>", "References": "<aebT1QQbPenBOFeH@cowardly-lion.the-meissners.org>\n <aebVA81k-W4V5Z3w@cowardly-lion.the-meissners.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=us-ascii", "Content-Disposition": "inline", "In-Reply-To": "<aebVA81k-W4V5Z3w@cowardly-lion.the-meissners.org>", "X-TM-AS-GCONF": "00", "X-Authority-Analysis": "v=2.4 cv=L78theT8 c=1 sm=1 tr=0 ts=69e6d6c5 cx=c_pps\n a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17\n a=kj9zAlcOel0A:10 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8\n a=5mWH-O7kP_1KcUu_2NIA:9 a=CjuIK1q_8ugA:10", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDIxMDAxMSBTYWx0ZWRfX1msl7dDmJBhZ\n AAqWsMUJWZf3Jk63s4JLI1MmKyPpfpcP6L62nsK+JhN93rUkB3c2EBHl8Hi6gjcsT6YQQ9BeC7r\n efyPvvPAP1laaFbcyn2OMxCcE9R2uKM8s+lIiWsIQRt9YDH2A6ducr6FNcFIoxQKI96ndrxLxmg\n FxcuImSiLrflWgcgxcfe60SfMf3znWwBc6V6J/mZz0SUjtHtpc25aL0nmkFCyxngobtwSYPVzS0\n 7VBYDLWkv0dVhKz0sy2zq/krg2IuOkIupbgTCVfdQeR0eqnvza6u/veUj/037Jezv+rCeL0+PP1\n yFazzPkwwMfNXdO5ZH03PP+E6YU8ddBb3hYclRg1RyHIHMqJUCDiPdUK+wfHPoFIlGX05BJgD/u\n TLasSHoCCy/WtTfHduvs8SFrtQWszAze4eWE95YSEWnYyh5wk9FXMiavJr4RfP6JLuaaR83sjGm\n RKF0TlAf8i5y2CoIv0w==", "X-Proofpoint-GUID": "sCQcZlbWTxE7Z2FNcZtyGdFO4-p5ebFB", "X-Proofpoint-ORIG-GUID": "sCQcZlbWTxE7Z2FNcZtyGdFO4-p5ebFB", "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-20_05,2026-04-20_02,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n priorityscore=1501 impostorscore=0 spamscore=0 bulkscore=0 suspectscore=0\n lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 phishscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604210011", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "We had optimizations for splat of a vector extract for the other vector\ntypes, but we missed having one for V2DI and V2DF. This patch adds a\ncombiner insn to do this optimization.\n\nIn looking at the source, we had similar optimizations for V4SI and V4SF\nextract and splats, but we missed doing V2DI/V2DF.\n\nThis patch has been bootstrap tested on both little endian and big\nendian PowerPC systems, and there were no regressions. Can I check\nthis into the trunk when GCC 17 opens up? I intend to backport it to\nat least GCC 16.2 and other branches that are still active.\n\nWithout the patch for the code:\n\n\tvector long long splat_dup_l_0 (vector long long v)\n\t{\n\t return __builtin_vec_splats (__builtin_vec_extract (v, 0));\n\t}\n\nthe compiler generates (on a little endian power9):\n\n\tsplat_dup_l_0:\n\t\tmfvsrld 9,34\n\t mtvsrdd 34,9,9\n\t\tblr\n\nNow it generates:\n\n\tsplat_dup_l_0:\n\t\txxpermdi 34,34,34,3\n\t blr\n\n2026-04-20 Michael Meissner <meissner@linux.ibm.com>\n\ngcc/\n\n\tPR target/99293\n\t* config/rs6000/vsx.md (vsx_splat_extract_<mode>): New insn.\n\ngcc/testsuite/\n\n\tPR target/99293\n\t* gcc.target/powerpc/pr99293.c: New test.\n---\n gcc/config/rs6000/vsx.md | 18 ++++++++++++++++++\n gcc/testsuite/gcc.target/powerpc/pr99293.c | 22 ++++++++++++++++++++++\n 2 files changed, 40 insertions(+)\n create mode 100644 gcc/testsuite/gcc.target/powerpc/pr99293.c", "diff": "diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md\nindex 504f86e0ba8..2ffb0e4b5c8 100644\n--- a/gcc/config/rs6000/vsx.md\n+++ b/gcc/config/rs6000/vsx.md\n@@ -4798,6 +4798,24 @@ (define_insn \"vsx_splat_<mode>_mem\"\n \"lxvdsx %x0,%y1\"\n [(set_attr \"type\" \"vecload\")])\n \n+;; Optimize SPLAT of an extract from a V2DF/V2DI vector with a constant element\n+(define_insn \"*vsx_splat_extract_<mode>\"\n+ [(set (match_operand:VSX_D 0 \"vsx_register_operand\" \"=wa\")\n+\t(vec_duplicate:VSX_D\n+\t (vec_select:<VEC_base>\n+\t (match_operand:VSX_D 1 \"vsx_register_operand\" \"wa\")\n+\t (parallel [(match_operand 2 \"const_0_to_1_operand\" \"n\")]))))]\n+ \"VECTOR_MEM_VSX_P (<MODE>mode)\"\n+{\n+ int which_word = INTVAL (operands[2]);\n+ if (!BYTES_BIG_ENDIAN)\n+ which_word = 1 - which_word;\n+\n+ operands[3] = GEN_INT (which_word ? 3 : 0);\n+ return \"xxpermdi %x0,%x1,%x1,%3\";\n+}\n+ [(set_attr \"type\" \"vecperm\")])\n+\n ;; V4SI splat support\n (define_insn \"vsx_splat_v4si\"\n [(set (match_operand:V4SI 0 \"vsx_register_operand\" \"=wa,wa\")\ndiff --git a/gcc/testsuite/gcc.target/powerpc/pr99293.c b/gcc/testsuite/gcc.target/powerpc/pr99293.c\nnew file mode 100644\nindex 00000000000..20adc1f27f6\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/powerpc/pr99293.c\n@@ -0,0 +1,22 @@\n+/* { dg-do compile { target powerpc*-*-* } } */\n+/* { dg-require-effective-target powerpc_vsx_ok } */\n+/* { dg-options \"-O2 -mvsx\" } */\n+\n+/* Test for PR 99263, which wants to do:\n+\t__builtin_vec_splats (__builtin_vec_extract (v, n))\n+\n+ where v is a V2DF or V2DI vector and n is either 0 or 1. Previously the\n+ compiler would do a direct move to the GPR registers to select the item and a\n+ direct move from the GPR registers to do the splat. */\n+\n+vector long long splat_dup_l_0 (vector long long v)\n+{\n+ return __builtin_vec_splats (__builtin_vec_extract (v, 0));\n+}\n+\n+vector long long splat_dup_l_1 (vector long long v)\n+{\n+ return __builtin_vec_splats (__builtin_vec_extract (v, 1));\n+}\n+\n+/* { dg-final { scan-assembler-times \"xxpermdi\" 2 } } */\n", "prefixes": [] }