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/execute/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/fixed-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. > 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-error.c:108 >> 0x9a6113 assign_by_spills >> >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra-assigns.c:1457 >> 0x9a74f6 lra_assign() >> >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra-assigns.c:1643 >> 0x9a16c4 lra(_IO_FILE*) >> >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/lra.c:2451 >> 0x957659 do_reload >> >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/ira.c:5452 >> 0x957659 execute >> >> /tmp/870921_29.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/ira.c:5636 >> make[4]: *** [_mulhelperUDQ.o] Error 1 >> >> Thanks, >> >> Christophe >> >> >>> Thanks, >>> Matthew > >