Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2230917/?format=api
{ "id": 2230917, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230917/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260430082121.15562-1-chenglulu@loongson.cn/", "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": "<20260430082121.15562-1-chenglulu@loongson.cn>", "date": "2026-04-30T08:21:21", "name": "LoongArch: Fix ICE caused by incomplete split conditions [PR125057].", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d36e878576c307db8acd07474ba4b8b8b6ec3a99", "submitter": { "id": 82960, "url": "http://patchwork.ozlabs.org/api/1.1/people/82960/?format=api", "name": "Lulu Cheng", "email": "chenglulu@loongson.cn" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260430082121.15562-1-chenglulu@loongson.cn/mbox/", "series": [ { "id": 502231, "url": "http://patchwork.ozlabs.org/api/1.1/series/502231/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=502231", "date": "2026-04-30T08:21:21", "name": "LoongArch: Fix ICE caused by incomplete split conditions [PR125057].", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502231/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2230917/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2230917/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 spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.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 dmarc=none (p=none dis=none) header.from=loongson.cn", "sourceware.org; spf=pass smtp.mailfrom=loongson.cn", "server2.sourceware.org;\n arc=none smtp.remote-ip=114.242.206.163" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 4g5nDX1Kz2z1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 18:20:42 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id E27344310D5A\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 08:20:40 +0000 (GMT)", "from mail.loongson.cn (mail.loongson.cn [114.242.206.163])\n by sourceware.org (Postfix) with ESMTP id 83EAC4BA9039\n for <gcc-patches@gcc.gnu.org>; Thu, 30 Apr 2026 08:20:11 +0000 (GMT)", "from loongson.cn (unknown [10.20.4.107])\n by gateway (Coremail) with SMTP id _____8CxQ_C2EPNp1m4FAA--.18571S3;\n Thu, 30 Apr 2026 16:20:07 +0800 (CST)", "from loongson-pc.loongson.cn (unknown [10.20.4.107])\n by front1 (Coremail) with SMTP id qMiowJDx6+CsEPNp7fx3AA--.32713S2;\n Thu, 30 Apr 2026 16:19:56 +0800 (CST)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org E27344310D5A", "OpenDKIM Filter v2.11.0 sourceware.org 83EAC4BA9039" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 83EAC4BA9039", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 83EAC4BA9039", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777537212; cv=none;\n b=NJcZdbwfr1gwsilKjHk16GHq7KAlVTLRYPPUrNPvlXsf8c9cvKvKs5iFdXkxswcKM63wt7E4jMADWyKp2hmuhy1IDdwIItnTFF+i6YwR9KzcWfEFBx1CRcLvGU83bp2zd925Mfv7W73ZZyBPPH5qm/UebqPinVx3nxkDTo0Nt3Y=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777537212; c=relaxed/simple;\n bh=FRut+XTNqa1J4pbgLB/oCOHJkeUO/2C1Gyj87ioBEcI=;\n h=From:To:Subject:Date:Message-Id:MIME-Version;\n b=XvUrNAZSWwRNpwPx+PlLwEfniKFIZCR4G9EWcJ8whFEnufsS9gYM+F/XSeEIz3wE+fJroxKoKekD6CZQ1ixK7IpH3IzaBjP3Fhal7HiIqISOaKF2Xo2lG5K2f1/b1g65WEBoOKaYH/zij/YjETuQ96WmVB0qPbp+QuZqnC8sIeA=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "From": "Lulu Cheng <chenglulu@loongson.cn>", "To": "gcc-patches@gcc.gnu.org,\n\tchenglulu@loongson.cn", "Cc": "xry111@xry111.site,\n\ti@xen0n.name,\n\txuchenghua@loongson.cn", "Subject": "[PATCH] LoongArch: Fix ICE caused by incomplete split conditions\n [PR125057].", "Date": "Thu, 30 Apr 2026 16:21:21 +0800", "Message-Id": "<20260430082121.15562-1-chenglulu@loongson.cn>", "X-Mailer": "git-send-email 2.20.1", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-CM-TRANSID": "qMiowJDx6+CsEPNp7fx3AA--.32713S2", "X-CM-SenderInfo": "xfkh0wpoxo3qxorr0wxvrqhubq/", "X-Coremail-Antispam": "1Uk129KBj93XoWxKF4DKF4fuF43AFy5KFWkZrc_yoW7Ar1UpF\n y7uwnxtF48JFn3Xr17Ga4rXF43tF97Wr42va4Syw10kFZrGryqg3ZYyr9xWF13XayF9rW2\n qrnY9w15u3WUXwbCm3ZEXasCq-sJn29KB7ZKAUJUUUU5529EdanIXcx71UUUUU7KY7ZEXa\n sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU\n 0xBIdaVrnRJUUUkFb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2\n IYs7xG6rWj6s0DM7CIcVAFz4kK6r106r15M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v\n e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI\n 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK\n xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx\n 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1Y6r17McIj6I8E87Iv\n 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2\n Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s02\n 6x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0x\n vE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE\n 42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6x\n kF7I0E14v26r1j6r4UYxBIdaVFxhVjvjDU0xZFpf9x07j1YL9UUUUU=", "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": "Since the split conditions in loongarch_split_vector_move are incomplete,\nthe following RTL:\n\n\t(set (reg:V4DI 32 $f0) (subreg:V4DI (reg:V2DI 32 $f0) 0))\n\nis incorrectly split, leading to an ICE.\n\nThis patch fixes the issue by completing the split conditions.\n\n\tPR target/125057\n\ngcc/ChangeLog:\n\n\t* config/loongarch/loongarch.cc\n\t(loongarch_split_vector_move): Complete the split condition.\n\t* config/loongarch/loongarch.h (LSX_REG_RTX_P): Delete.\n\t(LASX_REG_RTX_P): Delete.\n\t(GP_REG_RTX_P): Define macro.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.target/loongarch/vector/lasx/pr125057.c: New test.\n\t* gcc.target/loongarch/vector/lsx/lsx-mov-2.c: New test.\n\n---\n gcc/config/loongarch/loongarch.cc | 41 +++++++++++++++++--\n gcc/config/loongarch/loongarch.h | 3 +-\n .../loongarch/vector/lasx/pr125057.c | 25 +++++++++++\n .../loongarch/vector/lsx/lsx-mov-2.c | 13 ++++++\n 4 files changed, 76 insertions(+), 6 deletions(-)\n create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lasx/pr125057.c\n create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mov-2.c", "diff": "diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc\nindex 134ed47afdf..4a0a9bafa81 100644\n--- a/gcc/config/loongarch/loongarch.cc\n+++ b/gcc/config/loongarch/loongarch.cc\n@@ -5108,8 +5108,37 @@ loongarch_split_vector_move (rtx dest, rtx src)\n machine_mode mode = GET_MODE (dest);\n bool lsx_p = LSX_SUPPORTED_MODE_P (mode);\n \n- if (FP_REG_RTX_P (dest))\n- {\n+ if (FP_REG_RTX_P (dest) && GP_REG_RTX_P (src))\n+ {\n+ /* Since the LoongArch architecture has not yet implemented vector\n+ parameter passing, the following operations are required when\n+ a function returns a vector type that needs to be passed to a\n+ vector register.\n+\n+ As shown in the following instruction sequence:\n+\n+ (call_insn 5 6 12 2 (parallel [\n+\t (set (reg:V2DI 4 $r4)\n+\t\t (call (mem:SI (symbol_ref:DI (\"bar\"))\n+\t\t\t\t(const_int 0 [0])))\n+\t\t (clobber (reg:SI 1 $r1)))]))\n+ (insn 12 5 7 2 (set (reg:V2DI 32 $f0)\n+\t\t\t (reg:V2DI 4 $r4)))\n+\n+ insn 12 will be split here as follows:\n+ (insn 15 5 16 2 (set (reg:V2DI 32 $f0)\n+\t\t\t (vec_merge:V2DI\n+\t\t\t\t(vec_duplicate:V2DI (reg:DI 4 $r4))\n+\t\t\t\t(reg:V2DI 32 $f0)\n+\t\t\t\t(const_int 1 [0x1]))))\n+ (insn 16 15 7 2 (set (reg:V2DI 32 $f0)\n+\t\t\t (vec_merge:V2DI\n+\t\t\t\t(vec_duplicate:V2DI (reg:DI 5 $r5 [+8 ]))\n+\t\t\t\t(reg:V2DI 32 $f0)\n+\t\t\t\t(const_int 2 [0x2]))))\n+\n+ This can be reproduced with the test case lsx-mov-2.c.\n+ */\n gcc_assert (!MEM_P (src));\n \n rtx (*gen_vinsgr2vr_d) (rtx, rtx, rtx, rtx);\n@@ -5138,8 +5167,12 @@ loongarch_split_vector_move (rtx dest, rtx src)\n \t\t\t\t\t GEN_INT (1 << index)));\n \t}\n }\n- else if (FP_REG_RTX_P (src))\n+ else if (FP_REG_RTX_P (src) && GP_REG_RTX_P (dest))\n {\n+ /* Transfer vector data from vector registers to GPRs, generally\n+\t for vector argument handling.\n+\t This can be reproduced with the test case lsx-mov-1.c.\n+ */\n gcc_assert (!MEM_P (dest));\n \n rtx (*gen_vpickve2gr_d) (rtx, rtx, rtx);\n@@ -5166,7 +5199,7 @@ loongarch_split_vector_move (rtx dest, rtx src)\n \t emit_insn (gen_vpickve2gr_d (d, new_src, GEN_INT (index)));\n \t}\n }\n- else\n+ else if (GP_REG_RTX_P (src) && GP_REG_RTX_P (dest))\n {\n /* This part of the code is designed to handle the following situations:\n \t (set (reg:V2DI 4 $r4)\ndiff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h\nindex b2a3def11ad..1059eee37ca 100644\n--- a/gcc/config/loongarch/loongarch.h\n+++ b/gcc/config/loongarch/loongarch.h\n@@ -368,8 +368,7 @@ along with GCC; see the file COPYING3. If not see\n ((unsigned int) ((int) (REGNO) - LASX_REG_FIRST) < LASX_REG_NUM)\n \n #define FP_REG_RTX_P(X) (REG_P (X) && FP_REG_P (REGNO (X)))\n-#define LSX_REG_RTX_P(X) (REG_P (X) && LSX_REG_P (REGNO (X)))\n-#define LASX_REG_RTX_P(X) (REG_P (X) && LASX_REG_P (REGNO (X)))\n+#define GP_REG_RTX_P(X) (REG_P (X) && GP_REG_P (REGNO (X)))\n \n /* Select a register mode required for caller save of hard regno REGNO. */\n #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \\\ndiff --git a/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr125057.c b/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr125057.c\nnew file mode 100644\nindex 00000000000..698bddd8d08\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr125057.c\n@@ -0,0 +1,25 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-mlasx -O2\" } */\n+\n+#include <lasxintrin.h>\n+#include <lsxintrin.h>\n+\n+#define TEST(to, from)\t\t\t\t\t\t\t\t\\\n+__m256i\t\t\t\t\t\t\t\t\t\t\\\n+vext2xv_##to##_##from (const short *p)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\t\\\n+ return __lasx_vext2xv_##to##_##from (__lasx_cast_128 (__lsx_vld (p, 0)));\t\\\n+}\n+\n+TEST (h, b)\n+TEST (w, b)\n+TEST (d, b)\n+TEST (w, h)\n+TEST (d, h)\n+TEST (d, w)\n+TEST (hu, bu)\n+TEST (wu, bu)\n+TEST (du, bu)\n+TEST (wu, hu)\n+TEST (du, hu)\n+TEST (du, wu)\ndiff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mov-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mov-2.c\nnew file mode 100644\nindex 00000000000..9b3ac47fad6\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mov-2.c\n@@ -0,0 +1,13 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-mlsx -O2\" } */\n+\n+#include <lsxintrin.h>\n+\n+extern __m128i bar (void);\n+extern int *p;\n+\n+void\n+foo ()\n+{\n+ __lsx_vst (bar(), (void *)p, 0);\n+}\n", "prefixes": [] }