http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59477
--- Comment #2 from Vladimir Makarov <vmakarov at gcc dot gnu.org> --- Reload pass gives b.i: In function ‘void test1(_Bit_iterator)’: b.i:90:1: error: unable to find a register to spill in class ‘CREG’ } ^ b.i:90:1: error: this is the insn: (insn 29 43 30 2 (parallel [ (set (reg:DI 37 r8) (ashift:DI (reg:DI 37 r8 [92]) (subreg:QI (reg:SI 90 [ _M_offset ]) 0))) (clobber (reg:CC 17 flags)) ]) b.i:54 528 {*ashldi3_1} (expr_list:REG_DEAD (reg:DI 37 r8 [92]) (expr_list:REG_DEAD (reg:SI 90 [ _M_offset ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) b.i:90:1: internal compiler error: in spill_failure, at reload1.c:2106 0xaf796a _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /home/cygnus/vmakarov/build1/trunk2/gcc/gcc/rtl-error.c:109 0xaf63d3 spill_failure /home/cygnus/vmakarov/build1/trunk2/gcc/gcc/reload1.c:2106 0xaf63d3 find_reload_regs /home/cygnus/vmakarov/build1/trunk2/gcc/gcc/reload1.c:2032 0xaf63d3 select_reload_regs ... Before combiner we have: 28: cx:DI=0 29: r8:SI=r97:DI#0 REG_DEAD r97:DI 30: dx:DI=r103:DI REG_DEAD r103:DI REG_EQUAL frame:DI-0x2 31: si:DI=r104:DI REG_DEAD r104:DI REG_EQUAL frame:DI-0x1 32: di:DI=r98:DI REG_DEAD r98:DI REG_EQUAL frame:DI-0x20 33: call [`_Z9__find_ifI16reverse_iteratorI13_Bit_iteratorE17_Iter_equals_iterIS2_EET_S5_S5_T0_'] argc:0 REG_DEAD r8:SI REG_DEAD di:DI REG_DEAD si:DI REG_DEAD cx:DI REG_DEAD dx:DI After combiner we have: 28: cx:DI=0 29: {r8:DI=r92:DI<<r90:SI#0;clobber flags:CC;} REG_UNUSED flags:CC REG_DEAD r90:SI REG_DEAD r92:DI 30: dx:DI=r103:DI REG_DEAD r103:DI REG_EQUAL frame:DI-0x2 31: si:DI=r104:DI REG_DEAD r104:DI REG_EQUAL frame:DI-0x1 32: di:DI=r98:DI REG_DEAD r98:DI REG_EQUAL frame:DI-0x20 33: call [`_Z9__find_ifI16reverse_iteratorI13_Bit_iteratorE17_Iter_equals_iterIS2_EET_S5_S5_T0_'] argc:0 REG_DEAD r8:SI REG_DEAD di:DI REG_DEAD si:DI REG_DEAD cx:DI REG_DEAD dx:DI As r90 in inns 29 needs to be in cx and cx is already alive, neither reload nor LRA can do anything. I'll still investigate what can be done in LRA to fix it but I am not sure I'll succeed.