http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56148
Steven Bosscher <steven at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |steven at gcc dot gnu.org --- Comment #7 from Steven Bosscher <steven at gcc dot gnu.org> 2013-02-12 16:24:39 UTC --- (in my previous post I of course mean inputs and constraints...) Breaking down the insn once more in something that's more readable to me at least: (parallel [ (set (reg:DI 63 [ a ]) (asm_in[0] (reg:SI 67) "0")) (set (reg:DI 64 [ c ]) (asm_in[1] (reg:DI 65) "mr")) (set (reg:DI 65 [ d ]) (asm_in[2] (reg:SI 69) "1")) (set (reg:DI 66 [ b ]) (asm_in[3] (reg:DI 65) "2")) (asm_in[4] (reg:SI 67) "3")]) so - r67:SI must match r63:DI - r69:SI must match r64:DI - r65:DI must match r65:DI - r67:SI must match r66:DI The last constraint comes from CSE, which transforms: [ (reg:SI 67) (reg:DI 68) (reg:SI 69) (reg:DI 70) (reg:SI 71) ] to [ (reg:SI 67) (reg/f:DI 68) (reg:SI 69) (reg/f:DI 68) (reg:SI 67) ] because r70 and r68 have the same value before CSE: 6: {r68:DI=frame:DI-0x10;clobber flags:CC;} 8: {r70:DI=frame:DI-0x10;clobber flags:CC;} and CSE cleans that up: 6: {r68:DI=frame:DI-0x10;clobber flags:CC;} 8: r70:DI=r68:DI Disabling or undoing that transformation makes the ICE disappear. This is also in effect what old reload does with reload insn 21.