Hi: Yeah. You are right. Here is another RTL unrecognized. It happened after reload.
(insn 749 156 147 22 (set (reg:HI 5 R5) (subreg:HI (mem/c:SI (plus:SI (reg/f:SI 15 R15) (const_int 108 [0x6c])) [19 d0+0 S4 A32]) 0)) -1 (nil)) I traced the lots of functions like: reload, reload_as_needed, emit_reload_insn, do_input_reload, emit_input_reload_insn in reload1.c file. But I couldn't get any clue. the gcc clashed in function: cleanup_subreg_operands. Because you can see the RTL seems move reg to reg, actually it load data from memory. My target didn't accept this kind of RTL. The memory area is the pseduo register.94. But the reg_renumber[i] < 0 && reg_equiv_memory_loc[i], then the pseduo register.94 was replaced with memory location. But I 've no idea about why it generates this kind of unrecognized RTL. I have been hampered this problem for a while. Any suggestion is appreciated. Thanks very much.