From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id C1A4D385AE4E; Sat, 11 Nov 2023 16:49:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C1A4D385AE4E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1699721397; bh=+eerkX3uxA5X7OPVTd0AObrdUgJcwZK1gssTiVr6CxM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=kSB5NAo7qla7NGWkpFtwRlXyYQje/z3mx5eNBIa6oZwS93EkH3Oo6/dsKiBHjYOgd L4qgpv2tDiXpdoseyxp/1lYRDpVtb/2zFRA5FGac2WvLaDtIakewWY3LdT7VYWMLl6 5VGFA0z8erxPSweSL6iIeAEeer5As1d3CvWA6rwk= From: "xry111 at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/112476] Unrecognizable insn with -O2 -march=la464 on loongarch64 Date: Sat, 11 Nov 2023 16:49:57 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 14.0 X-Bugzilla-Keywords: ice-on-valid-code X-Bugzilla-Severity: normal X-Bugzilla-Who: xry111 at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: component bug_status Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D112476 Xi Ruoyao changed: What |Removed |Added ---------------------------------------------------------------------------- Component|rtl-optimization |target Status|NEW |ASSIGNED --- Comment #4 from Xi Ruoyao --- The buggy nested subreg RTX is generated by LoongArch specific code loongarch_expand_vec_cond_mask_expr. Draft patch: 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 m= ode, machine_mode vimode, if (mode !=3D vimode) { xop1 =3D 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 m= ode, machine_mode vimode, if (mode !=3D vimode) { xop2 =3D 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 m= ode, 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)); } }=