https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61844
Kazumoto Kojima <kkojima at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|rtl-optimization |target
--- Comment #7 from Kazumoto Kojima <kkojima at gcc dot gnu.org> ---
> Ugh. sh64 is not so well maintained these days.
Agreed.
I don't have enough time for sh64 anymore, unfortunately.
> (insn 27 51 52 3 (set (reg:SI 1 r1 [172])
> (mem/c:SI (plus:SI (reg:SI 2 r2)
> (reg:SI 12 r12)) [0 S4 A32]))
> ../../../../gcc-4.9.0-20140702/libgcc/libgcc2.c:81 260 {*movsi_media}
> (nil))
>
> is actually a valid addressing mode for the LDX.L instruction, which
> seems to be missing in sh.md?!
It seems that the 4th alternative of *movsi_media should handle
that case.
BTW, my sh64-elf build fails with another ICE:
/exp/ldroot/dodes/xsh64-elf-combined/build/./gcc/xgcc
-B/exp/ldroot/dodes/xsh64-elf-combined/build/./gcc/
-B/exp/ldroot/dodes/xsh64-elf-combined/install/sh64-unknown-elf/bin/
-B/exp/ldroot/dodes/xsh64-elf-combined/install/sh64-unknown-elf/lib/ -isystem
/exp/ldroot/dodes/xsh64-elf-combined/install/sh64-unknown-elf/include -isystem
/exp/ldroot/dodes/xsh64-elf-combined/install/sh64-unknown-elf/sys-include
-L/exp/ldroot/dodes/xsh64-elf-combined/build/./ld -g -O2 -ml -O2 -g -O2
-DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wno-narrowing -Wwrite-strings
-Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition
-isystem ./include -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector
-Dinhibit_libc -I. -I. -I../../.././gcc
-I/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc
-I/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/.
-I/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/../gcc
-I/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/../include
-DHAVE_CC_TLS -DUSE_EMUTLS -o unwind-dw2.o -MT unwind-dw2.o -MD -MP -MF
unwind-dw2.dep -fexceptions -c
/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/unwind-dw2.c
-fvisibility=hidden -DHIDE_EXPORTS
/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/unwind-dw2.c: In function
'_Unwind_SetGR':
/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/unwind-dw2.c:293:1:
internal compiler error: in push_reload, at reload.c:1352
}
^
0x85b64f3 push_reload(rtx_def*, rtx_def*, rtx_def**, rtx_def**, reg_class,
machine_mode, machine_mode, int, int, int, reload_type)
/exp/ldroot/dodes/xsh64-elf-combined/combined/gcc/reload.c:1351
0x85b8d9f find_reloads_address_1
/exp/ldroot/dodes/xsh64-elf-combined/combined/gcc/reload.c:5974
0x85b95f5 find_reloads_address_1
/exp/ldroot/dodes/xsh64-elf-combined/combined/gcc/reload.c:5617
0x85b6b75 find_reloads_address
/exp/ldroot/dodes/xsh64-elf-combined/combined/gcc/reload.c:5270
0x85bd96c find_reloads(rtx_def*, int, int, int, short*)
/exp/ldroot/dodes/xsh64-elf-combined/combined/gcc/reload.c:2889
...
In this case, it looks that find_reloads fails for the insn
(insn 440 439 61 33 (set (mem/f/j:SI (plus:SI (reg/v/f:SI 50 r50 [orig:268
unused_rs ] [268]) (reg:SI 736)) [0 unused_rs_142->prev+0 S4 A64])
(reg/v/f:SI 34 r34 [orig:207 unused_rs ] [207]))
/exp/ldroot/dodes/xsh64-elf-combined/combined/libgcc/unwind-dw2.c:1082 261
{*movsi_media}
(expr_list:REG_DEAD (reg/v/f:SI 34 r34 [orig:207 unused_rs ] [207])
(nil)))
which shouldn't require any reloads. Perhaps it is the same issue
with this PR. I'll take a look at what is going on.