From patchwork Sun Nov 12 01:00:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xi Ruoyao X-Patchwork-Id: 164175 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp484246vqg; Sat, 11 Nov 2023 17:02:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IEkAIyuWXNhx4n8bZkiNx2hfKhtwx9waFOsRpT981c2E1J4iawoplt3ULrjqgYYmJYqE0QO X-Received: by 2002:ad4:4e49:0:b0:66d:4bfe:ad33 with SMTP id eb9-20020ad44e49000000b0066d4bfead33mr2735374qvb.33.1699750928149; Sat, 11 Nov 2023 17:02:08 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1699750928; cv=pass; d=google.com; s=arc-20160816; b=WMUQjITnjtGxgo5nohQ/XVCtY0bGutr1dD0JntOSI0NUbdi6o2+JEa4zGeWgyP/eY6 JgxDeUkqqFKqt8LAjI/67rUQECDmrVP7MMfvFDqYhnrIdLMar7oaVTXATHpvv6otNglj PxdmZHRrwdkRff0GVNAaHzjEFkDVUAiG19MdMX0ol23z/UR6LgXsq0aO8tOczQkQ03g6 UaZ2Dx09r18ZBnHYydek3fX7zBvOt1nHk6ksCFB+ibbvttQrc+GsgvMIeoYpQpr5SV3d FnD6uefnL1mEpccS1qcWx5B+5wEbEH+MIz/eAonC8cxqxEL5GeJB1yoCT2jlH9buo9HQ Uzgg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=TQHU10oj/jFROfldg8DigpYrdUUwMZUNTUmFEdpYqTc=; fh=oUCfM/eMlWtMCtZZKY1bglzxCo7b3kw9D5LTFFWuz38=; b=kysyIRgJGmo8wwoTSQvZrhR21nFZVC/DM6sNZ43THvDb48L0cMJceQUW+3Rm7hw0zZ Ue+RW9bAg5WMnXX7eFhcmmhbX0pplwVweWHK+O9xZf7Qoy+8b5KWgjffczaL+tyk4Itu yecocq2Df7kleC60DMa0kEY8YCzyfz1jnpcC9mG+jXl1zx9E3f0j7mcGFoNMXr4E5c1J TLYHj6Sou0GRHJYePOlCRx49m9H2s52Fpz8xMq183IIg+SxnRUy0yvNU3GN3hcdrhAMU Rfwen//bg9LmxVKitas11SO8+KrMINEXQSh57djqsmGb78Bg9e2NOz+suuU7qg+dCVwb FNCw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xry111.site header.s=default header.b=kGCPYZBG; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xry111.site Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id r2-20020ad44042000000b006716a905fccsi2373930qvp.69.2023.11.11.17.02.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Nov 2023 17:02:08 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@xry111.site header.s=default header.b=kGCPYZBG; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xry111.site Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E59723858CDA for ; Sun, 12 Nov 2023 01:02:07 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from xry111.site (xry111.site [89.208.246.23]) by sourceware.org (Postfix) with ESMTPS id C598F3858D1E for ; Sun, 12 Nov 2023 01:01:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C598F3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=xry111.site Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=xry111.site ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C598F3858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=89.208.246.23 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699750875; cv=none; b=TTDMMxl1RbxN20srGX+0gycatRWhj6PmVxst4wvFbHYp6gJb4qBGyHg6H0zXmI5bUyJK4qjno1KvmpUtNtyIuH0T/b2q9TQ5rY/TwnTdMr1GgOBJ/xGpyPbbNDoDtfZwSlCi04lYnQ1nSsy6jkRlbqHHdqGdoIxNwGUtgaUsae4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699750875; c=relaxed/simple; bh=RGGuYCGi/gRCGeeKR7UxM05lKCvxggiKRaLU+AXpO2A=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=IkLvlVpAK8JDl9GEVQjNhhB+1Ctdv94GD6e1EuPIGoA0sNg8CIuPSKuMImdHWdaN3cWM7RxnkszuchI8zSp82pDjcdVeFv1EdQltOAV0wg/Qco7XM1VmrdJjVLB8NxqlVOMikPeSxfq8tNoZIzR52wHHhpCfIj1uvH1VvEnCm7w= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xry111.site; s=default; t=1699750869; bh=RGGuYCGi/gRCGeeKR7UxM05lKCvxggiKRaLU+AXpO2A=; h=From:To:Cc:Subject:Date:From; b=kGCPYZBGhhHpAG5SqdqFe+VHp0MOm8kypjyFyNwYSKpCdDPeYd/kf2EsIvLh+X44l lzqYkpaqiocKb1VlH2hzeav/iS6QGc4TrAtxRH44ooDrHLINE3mrld9jlbzCWkwgZW /UroQdVhOXoXjL1E3IA6ff/3wNFOCQ1nRlG7Gc/w= Received: from stargazer.. (unknown [IPv6:240e:358:116b:6800:dc73:854d:832e:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) (Authenticated sender: xry111@xry111.site) by xry111.site (Postfix) with ESMTPSA id F0DF766A03; Sat, 11 Nov 2023 20:01:05 -0500 (EST) From: Xi Ruoyao To: gcc-patches@gcc.gnu.org Cc: chenglulu , i@xen0n.name, xuchenghua@loongson.cn, Xi Ruoyao Subject: [PATCH] LoongArch: Use simplify_gen_subreg instead of gen_rtx_SUBREG in loongarch_expand_vec_cond_mask_expr [PR112476] Date: Sun, 12 Nov 2023 09:00:13 +0800 Message-ID: <20231112010047.496937-1-xry111@xry111.site> X-Mailer: git-send-email 2.42.1 MIME-Version: 1.0 X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, LIKELY_SPAM_FROM, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782318029027452557 X-GMAIL-MSGID: 1782318029027452557 GCC internal says: 'subreg's of 'subreg's are not supported. Using 'simplify_gen_subreg' is the recommended way to avoid this problem. Unfortunately loongarch_expand_vec_cond_mask_expr might create nested subreg under certain circumstances, causing an ICE. Use simplify_gen_subreg as the internal document suggests. gcc/ChangeLog: PR target/112476 * config/loongarch/loongarch.cc (loongarch_expand_vec_cond_mask_expr): Call simplify_gen_subreg instead of gen_rtx_SUBREG. gcc/testsuite/ChangeLog: PR target/112476 * gcc.target/loongarch/pr112476-1.c: New test. * gcc.target/loongarch/pr112476-2.c: New test. --- Bootstrapped and regtested on loongarch64-linux-gnu. Ok for trunk? gcc/config/loongarch/loongarch.cc | 11 ++++++--- .../gcc.target/loongarch/pr112476-1.c | 24 +++++++++++++++++++ .../gcc.target/loongarch/pr112476-2.c | 5 ++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/pr112476-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/pr112476-2.c diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index d9b7a1076a2..0c7bafb5fb1 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -11197,7 +11197,9 @@ loongarch_expand_vec_cond_mask_expr (machine_mode mode, machine_mode vimode, if (mode != vimode) { xop1 = gen_reg_rtx (vimode); - emit_move_insn (xop1, gen_rtx_SUBREG (vimode, operands[1], 0)); + emit_move_insn (xop1, + simplify_gen_subreg (vimode, operands[1], + mode, 0)); } emit_move_insn (src1, xop1); } @@ -11214,7 +11216,9 @@ loongarch_expand_vec_cond_mask_expr (machine_mode mode, machine_mode vimode, if (mode != vimode) { xop2 = gen_reg_rtx (vimode); - emit_move_insn (xop2, gen_rtx_SUBREG (vimode, operands[2], 0)); + emit_move_insn (xop2, + simplify_gen_subreg (vimode, operands[2], + mode, 0)); } emit_move_insn (src2, xop2); } @@ -11233,7 +11237,8 @@ loongarch_expand_vec_cond_mask_expr (machine_mode mode, machine_mode vimode, gen_rtx_AND (vimode, mask, src1)); /* The result is placed back to a register with the mask. */ emit_insn (gen_rtx_SET (mask, bsel)); - emit_move_insn (operands[0], gen_rtx_SUBREG (mode, mask, 0)); + emit_move_insn (operands[0], simplify_gen_subreg (mode, mask, + vimode, 0)); } } diff --git a/gcc/testsuite/gcc.target/loongarch/pr112476-1.c b/gcc/testsuite/gcc.target/loongarch/pr112476-1.c new file mode 100644 index 00000000000..4cf133e7a26 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/pr112476-1.c @@ -0,0 +1,24 @@ +/* PR target/112476: ICE with -mlsx */ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d -mlsx" } */ + +int foo, bar; +float baz, res, a; + +void +apply_adjacent_ternary (float *dst, float *src0) +{ + do + { + __builtin_memcpy (&res, &src0, sizeof (res)); + *dst = foo ? baz : res; + dst++; + } + while (dst != src0); +} + +void +xx (void) +{ + apply_adjacent_ternary (&a, &a); +} diff --git a/gcc/testsuite/gcc.target/loongarch/pr112476-2.c b/gcc/testsuite/gcc.target/loongarch/pr112476-2.c new file mode 100644 index 00000000000..cc0dfbfc912 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/pr112476-2.c @@ -0,0 +1,5 @@ +/* PR target/112476: ICE with -mlasx */ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d -mlasx" } */ + +#include "pr112476-1.c"