]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
LoongArch: Fix invalid subregs in xorsign [PR118501]
authorXi Ruoyao <xry111@xry111.site>
Wed, 22 Jan 2025 09:16:29 +0000 (17:16 +0800)
committerXi Ruoyao <xry111@xry111.site>
Thu, 23 Jan 2025 03:38:17 +0000 (11:38 +0800)
The test case added in r15-7073 now triggers an ICE, indicating we need
the same fix as AArch64.

gcc/ChangeLog:

PR target/118501
* config/loongarch/loongarch.md (@xorsign<mode>3): Use
force_lowpart_subreg.

gcc/config/loongarch/loongarch.md

index 1392325038cd3a0ce6157071bab461f268e46aeb..701f31fbb17c3320dd81548df51874af0c179edf 100644 (file)
   machine_mode lsx_mode
     = <MODE>mode == SFmode ? V4SFmode : V2DFmode;
   rtx tmp = gen_reg_rtx (lsx_mode);
-  rtx op1 = lowpart_subreg (lsx_mode, operands[1], <MODE>mode);
-  rtx op2 = lowpart_subreg (lsx_mode, operands[2], <MODE>mode);
+  rtx op1 = force_lowpart_subreg (lsx_mode, operands[1], <MODE>mode);
+  rtx op2 = force_lowpart_subreg (lsx_mode, operands[2], <MODE>mode);
   emit_insn (gen_xorsign3 (lsx_mode, tmp, op1, op2));
   emit_move_insn (operands[0],
           lowpart_subreg (<MODE>mode, tmp, lsx_mode));