Hi, I am working on a private port and getting an ICE in valid code. This mainly is because of the following ( which is a part of the entire dump of RTL of the source file)
(insn 13 8 14 2 /fc3/testcases/reduce/testcase-min.i:8 (set (reg:SI 138) (const_int 0 [0x0])) 44 {*movsi} (expr_list:REG_LIBCALL_ID (const_int 0 [0x0]) (nil))) (insn 14 13 15 2 /fc3/testcases/reduce/testcase-min.i:8 (set (reg:SI 1 $c1) (reg/f:SI 112 *fp*)) 44 {*movsi} (expr_list:REG_LIBCALL_ID (const_int 1 [0x1]) (insn_list:REG_LIBCALL 17 (nil)))) (insn 15 14 16 2 /fc3/testcases/reduce/testcase-min.i:8 (set (reg:SI 2 $c2) (reg:SI 138)) 44 {*movsi} (expr_list:REG_LIBCALL_ID (const_int 1 [0x1]) (nil))) (call_insn 16 15 18 2 /fc3/testcases/reduce/testcase-min.i:8 (parallel [ (call (mem:SI (symbol_ref:SI ("__floatsisf") [flags 0x41]) [0 S4 A32]) (const_int 0 [0x0])) (use (const_int 0 [0x0])) (clobber (reg:SI 31 $link)) ]) 41 {*call_direct} (expr_list:REG_LIBCALL_ID (const_int 1 [0x1]) (expr_list:REG_EH_REGION (const_int -1 [0xffffffff]) (nil))) (expr_list:REG_DEP_TRUE (use (reg:SI 2 $c2)) (expr_list:REG_DEP_TRUE (use (reg:SI 1 $c1)) (nil)))) (insn 18 16 17 2 /fc3/testcases/reduce/testcase-min.i:8 (clobber (reg:SF 139)) -1 (expr_list:REG_LIBCALL_ID (const_int 1 [0x1]) (nil))) (insn 17 18 19 2 /fc3/testcases/reduce/testcase-min.i:8 (set (subreg:SI (reg:SF 139) 0) (mem/c/i:SI (reg/f:SI 112 *fp*) [2 S4 A32])) 44 {*movsi} (expr_list:REG_LIBCALL_ID (const_int 1 [0x1]) (insn_list:REG_RETVAL 14 (expr_list:REG_EQUAL (float:SF (reg:SI 138)) (nil)))) Note the REG_EQUAL note of insn 17. cse tries to replace reg:SI 138 with a constant and because of insn 13, the note becomes (float:SF (const_int 0)) which in turn cse converts into REG_EQUAL (const_double:SF 0 [0x0] 0.0 [0x0.0p+0]) and when CONST_DOUBLE_LOW is done on the above, the compiler crashes - " internal compiler error: RTL check: expected code 'const_double' and mode 'VOID', have code 'const_double' and mode 'SF' in plus_constant, at explow.c:103" i.e the compiler is crashing after converting a const_int to an SFmode value. Could this possibly be a generic issue or a problem with my backend ( as in will I need to define movsf in my backend, which isnt defined at present ) ? Regret the rather verbose post. Thanks in advance, Pranav