https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69773
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ra Target| |x86_64-*-*, i?86-*-* Status|UNCONFIRMED |NEW Last reconfirmed| |2016-02-12 CC| |uros at gcc dot gnu.org, | |vmakarov at gcc dot gnu.org Component|tree-optimization |target Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- With 4.7 reload fails in a similar way: t.i:12:1: error: unable to find a register to spill in class ‘DREG’ t.i:12:1: error: this is the insn: (insn 8 7 9 2 (parallel [ (set (reg:SI 2 cx [64]) (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (reg:SI 4 si [orig:65 p1_1(D)->k ] [65])) (sign_extend:DI (reg:SI 2 cx [67]))) (const_int 32 [0x20])))) (clobber (scratch:SI)) (clobber (reg:CC 17 flags)) ]) t.i:8 334 {*smulsi3_highpart_1} (expr_list:REG_DEAD (reg:SI 2 cx [67]) (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_EQUAL (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (reg:SI 4 si [orig:65 p1_1(D)->k ] [65])) (const_int 1374389535 [0x51eb851f])) (const_int 32 [0x20]))) (nil))))) t.i:12:1: internal compiler error: in spill_failure, at reload1.c:2120 I think you are simply unlucky in using dx as a fixed register as that's a special one for the division instruction.