]> git.ipfire.org Git - thirdparty/gcc.git/commit
LoongArch: Add constraints for bit string operation define_insn_and_split's [PR114861]
authorXi Ruoyao <xry111@xry111.site>
Fri, 26 Apr 2024 07:59:11 +0000 (15:59 +0800)
committerXi Ruoyao <xry111@xry111.site>
Sat, 27 Apr 2024 03:59:14 +0000 (11:59 +0800)
commit140124ad54eef88ca87909f63aedc8aaeacefc65
tree665a84e65df97dc9192082056f2012cd84caab45
parent50c218e3ffe57860591a987ecf44fcc0abb31f2c
LoongArch: Add constraints for bit string operation define_insn_and_split's [PR114861]

Without the constrants, the compiler attempts to use a stack slot as the
target, causing an ICE building the kernel with -Os:

    drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c:3144:1:
    error: could not split insn
    (insn:TI 1764 67 1745
      (set (mem/c:DI (reg/f:DI 3 $r3) [707 %sfp+-80 S8 A64])
           (and:DI (reg/v:DI 28 $r28 [orig:422 raster_config ] [422])
                   (const_int -50331649 [0xfffffffffcffffff])))
      "drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c":1386:21 111
      {*bstrins_di_for_mask}
      (nil))

Add these constrants to fix the issue.

gcc/ChangeLog:

PR target/114861
* config/loongarch/loongarch.md (bstrins_<mode>_for_mask): Add
constraints for operands.
(bstrins_<mode>_for_ior_mask): Likewise.

gcc/testsuite/ChangeLog:

PR target/114861
* gcc.target/loongarch/pr114861.c: New test.
gcc/config/loongarch/loongarch.md
gcc/testsuite/gcc.target/loongarch/pr114861.c [new file with mode: 0644]