Christophe Lyon <christophe.l...@linaro.org> writes: > On 21 February 2017 at 11:59, Kyrill Tkachov > <kyrylo.tkac...@foss.arm.com> wrote: > > > > On 21/02/17 10:54, Christophe Lyon wrote: > >> > >> Hi, > >> > >> On 20 February 2017 at 13:08, Matthew Fortune > >> <matthew.fort...@imgtec.com> wrote: > >>> > >>> Vladimir Makarov <vmaka...@redhat.com> writes: > >>>> > >>>> On 02/07/2017 09:08 AM, Matthew Fortune wrote: > >>>>> > >>>>> Hi, > >>>>> > >>>>> This change deals with reloading a subreg(reg) using the inner > >>>>> mode to prevent partial spilling of data like in the case > described here: > >>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78660#c8 > >>>>> > >>>>> No test case for now but I am investigating a targeted test using > >>>>> the RTL frontend for later submission. > >>>>> > >>>>> > >>>>> gcc/ > >>>>> PR target/78660 > >>>>> * lra-constraints.c (curr_insn_transform): Handle > >>>>> WORD_REGISTER_OPERATIONS requirements when reloading SUBREGs. > >>>>> > >>>> The patch is OK. So all 5 patches can be committed to the trunk. > >>>> I hope Eric's test of the patches on SPARC will be successful. > >>>> Thank you again for your efforts. > >>> > >>> Committed as r245598. > >>> > >> This patch is causing ICEs on arm-none-linux-gnueabi > >> FAIL: gcc.c-torture/execute/simd-2.c -O1 (internal compiler error) > >> > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c- > torture/execute/simd-2.c: > >> In function 'main': > >> > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c- > torture/execute/simd-2.c:72:1: > >> error: unable to find a register to spill > >> > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c- > torture/execute/simd-2.c:72:1: > >> error: this is the insn: > >> (insn 276 2123 2129 2 (set (subreg:SI (reg:TI 886 [362]) 0) > >> (and:SI (subreg:SI (reg:TI 567 [orig:111 j.1_2 ] [111]) 0) > >> (subreg:SI (reg:TI 568 [orig:110 i.0_1 ] [110]) 0))) > >> > >> "/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c-torture/exec > >> ute/simd-2.c":47 > >> 82 {*arm_andsi3_insn} > >> (expr_list:REG_DEAD (reg:TI 568 [orig:110 i.0_1 ] [110]) > >> (expr_list:REG_DEAD (reg:TI 567 [orig:111 j.1_2 ] [111]) > >> (nil)))) > >> > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/testsuite/gcc.c- > torture/execute/simd-2.c:72:1: > >> internal compiler error: in assign_by_spills, at lra-assigns.c:1457 > >> 0xacc9d3 _fatal_insn(char const*, rtx_def const*, char const*, int, > >> char > >> const*) > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/rtl-error.c:108 > >> 0x9a6123 assign_by_spills > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra-assigns.c:1457 > >> 0x9a7506 lra_assign() > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra-assigns.c:1643 > >> 0x9a16d4 lra(_IO_FILE*) > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra.c:2451 > >> 0x957669 do_reload > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/ira.c:5452 > >> 0x957669 execute > >> /aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/ira.c:5636 > >> > >> > >> > >> I've also noticed that --target arm-none-eabi with default > >> --with-mode and --with-cpu fails to build libgcc (it may be easier to > >> reproduce): > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc- > fsf/gccsrc/libgcc/fixed-bit.c: > >> In function '__gnu_mulhelperudq': > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc- > fsf/gccsrc/libgcc/fixed-bit.c:371:1: > >> error: unable to find a register to spill > >> } > >> ^ > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc- > fsf/gccsrc/libgcc/fixed-bit.c:371:1: > >> error: this is the insn: > >> (insn 286 296 287 2 (set (reg:SI 232) > >> (neg:SI (ltu:SI (subreg:SI (reg:DI 238 [orig:119 _10 ] > [119]) 4) > >> (subreg:SI (reg/v:DI 149 [ temp1 ]) 4)))) > >> > >> "/tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libgcc/fixe > >> d-bit.c":314 > >> 849 {cstor > >> esi_nltu_thumb1} > >> (expr_list:REG_DEAD (reg:DI 238 [orig:119 _10 ] [119]) > >> (nil))) > > > > > > This looks like PR 79660 that Richard just filed. > > Indeed, thanks.
Thanks for reporting. I'll take a brief look first but revert if the issue isn't something that vaguely makes sense to me. Sorry for the hassle. Matthew > > > Kyrill > > > > > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc- > fsf/gccsrc/libgcc/fixed-bit.c:371:1: > >> internal compiler error: in assign_by_spills, at lra-assigns.c:1457 > >> 0xacc9c3 _fatal_insn(char const*, rtx_def const*, char const*, int, > >> char > >> const*) > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/rtl-erro > >> r.c:108 > >> 0x9a6113 assign_by_spills > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra-assi > >> gns.c:1457 > >> 0x9a74f6 lra_assign() > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra-assi > >> gns.c:1643 > >> 0x9a16c4 lra(_IO_FILE*) > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra.c:24 > >> 51 > >> 0x957659 do_reload > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/ira.c:54 > >> 52 > >> 0x957659 execute > >> > >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/ira.c:56 > >> 36 > >> make[4]: *** [_mulhelperUDQ.o] Error 1 > >> > >> Thanks, > >> > >> Christophe > >> > >> > >>> Thanks, > >>> Matthew > > > >