http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59780
Bug ID: 59780 Summary: ICE in aarch64_split_128bit_move Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: vries at gcc dot gnu.org when building r206565 with target aarch64-linux-gnu I run into several ICEs like this: ... /home/vries/gcc_versions/devel/src/libgcc/soft-fp/negtf2.c: In function ‘__negtf2’: /home/vries/gcc_versions/devel/src/libgcc/soft-fp/negtf2.c:46:1: internal compiler error: RTL check: expected code 'reg', have 'const_int' in rhs_regno, at rtl.h:1125 } ^ 0xbde5de rtl_check_failed_code1(rtx_def const*, rtx_code, char const*, int, char const*) /home/vries/gcc_versions/devel/src/gcc/rtl.c:773 0xfe4c1d rhs_regno /home/vries/gcc_versions/devel/src/gcc/rtl.h:1125 0xfe62a1 aarch64_split_128bit_move(rtx_def*, rtx_def*) /home/vries/gcc_versions/devel/src/gcc/config/aarch64/aarch64.c:688 0x1048a60 gen_split_2245(rtx_def*, rtx_def**) /home/vries/gcc_versions/devel/src/gcc/config/aarch64/aarch64.md:752 b0x13fc389 split_1 /home/vries/gcc_versions/devel/src/gcc/config/aarch64/aarch64.md:751 0x1475285 split_insns(rtx_def*, rtx_def*) /home/vries/gcc_versions/devel/src/gcc/config/aarch64/aarch64.md:352 0x7ec8f6 try_split(rtx_def*, rtx_def*, int) /home/vries/gcc_versions/devel/src/gcc/emit-rtl.c:3471 0xb535ea split_insn /home/vries/gcc_versions/devel/src/gcc/recog.c:2850 0xb545f2 split_all_insns() /home/vries/gcc_versions/devel/src/gcc/recog.c:2940 0xb573f6 rest_of_handle_split_after_reload /home/vries/gcc_versions/devel/src/gcc/recog.c:3889 0xb57440 execute /home/vries/gcc_versions/devel/src/gcc/recog.c:3918 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. ... Investigating one of them shows: ... (gdb) down #6 0x0000000000fe62a2 in aarch64_split_128bit_move (dst=0x7ffff66fa0e0, src=0x7ffff687c470) at /home/vries/gcc_versions/devel/src/gcc/config/aarch64/aarch64.c:688 688 int src_regno = REGNO (src); (gdb) call debug_rtx (src) (const_int 0 [0]) (gdb) call debug_rtx (dst) (reg/v:TI 2 x2 [orig:80 _flo ] [80]) ... ... void aarch64_split_128bit_move (rtx dst, rtx src) { rtx low_dst; enum machine_mode src_mode = GET_MODE (src); enum machine_mode dst_mode = GET_MODE (dst); int src_regno = REGNO (src); int dst_regno = REGNO (dst); ... We're doing REGNO (src) while src == (const_int 0).