http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50751
--- Comment #8 from Kazumoto Kojima <kkojima at gcc dot gnu.org> 2011-10-27 02:31:35 UTC --- (In reply to comment #7) > Created attachment 25622 [details] > asmcons and ira pass log for the reload failure of "z" insn constraint The original insn 13 was (insn 13 12 14 3 (set (reg:SI 193) (plus:SI (subreg:SI (reg:QI 191 [ MEM[(char *)buf1_4(D) + 4B] ]) 0) (subreg:SI (reg:QI 192 [ MEM[(char *)buf0_1(D) + 5B] ]) 0))) and RA chooses r1 and r0 as the registers to where memories will be loaded. The problem is we have no direct way to load buf1[4] to r1. In such situation, a secondary reload is needed. See the description of TARGET_SECONDARY_RELOAD in the gcc manual. Here is a trial: --- ORIG/trunk/gcc/config/sh/sh.c 2011-10-16 10:18:53.000000000 +0900 +++ trunk/gcc/config/sh/sh.c 2011-10-27 10:13:21.000000000 +0900 @@ -12430,6 +12453,10 @@ sh_secondary_reload (bool in_p, rtx x, r if (rclass != GENERAL_REGS && REG_P (x) && TARGET_REGISTER_P (REGNO (x))) return GENERAL_REGS; + if (rclass == GENERAL_REGS && mode == QImode + && MEM_P (x) && GET_CODE (XEXP (x, 0)) == PLUS + && CONST_INT_P (XEXP (XEXP (x, 0), 1))) + return R0_REGS; return NO_REGS; } The ICE for your testcase went away with it, though I've got ../../../INTEST/trunk/zlib/trees.c: In function 'send_tree': ../../../INTEST/trunk/zlib/trees.c:797:1: error: unable to find a register to spill in class 'R0_REGS' ../../../INTEST/trunk/zlib/trees.c:797:1: error: this is the insn: (insn 415 414 416 28 (set (mem:QI (plus:SI (reg/f:SI 6 r6 [orig:742 s_34(D)->pending_buf ] [742]) (reg:SI 7 r7 [orig:307 D.4248 ] [307])) [0 *D.4249_209+0 S1 A8]) (reg:QI 746 [ s_34(D)->bi_buf ])) ../../../INTEST/trunk/zlib/trees.c:780 206 {*movqi_m_reg_reg_store} (expr_list:REG_DEAD (reg:QI 746 [ s_34(D)->bi_buf ]) (expr_list:REG_DEAD (reg/f:SI 6 r6 [orig:742 s_34(D)->pending_buf ] [742]) (expr_list:REG_DEAD (reg:SI 7 r7 [orig:307 D.4248 ] [307]) (nil))))) ../../../INTEST/trunk/zlib/trees.c:797:1: internal compiler error: in spill_failure, at reload1.c:2118 when bootstrapping.