------- Comment #15 from ubizjak at gmail dot com 2007-12-18 18:20 ------- (In reply to comment #7)
> mull %ebx > leal (%ecx,%edx), %esi ; what the heck, a simple addl could do! > movl %esi, %edx Something disturbs RA to emit two DImode moves: (insn:HI 10 36 37 2 m.c:2 (parallel [ (set (reg:DI 0 ax) (mult:DI (zero_extend:DI (reg:SI 0 ax)) (zero_extend:DI (reg:SI 3 bx [orig:64 a ] [64])))) (clobber (reg:CC 17 flags)) ]) 304 {*umulsidi3_insn} (nil)) (insn 37 10 11 2 m.c:2 (set (reg:DI 3 bx [61]) (reg:DI 0 ax)) 88 {*movdi_2} (nil)) (note:HI 11 37 12 2 NOTE_INSN_DELETED) (insn:HI 12 11 18 2 m.c:2 (parallel [ (set (reg:SI 4 si [+4 ]) (plus:SI (reg:SI 2 cx [62]) (reg:SI 4 si [+4 ]))) (clobber (reg:CC 17 flags)) ]) 249 {*addsi_1} (nil)) (insn:HI 18 12 24 2 m.c:4 (set (reg/i:DI 0 ax [ <result> ]) (reg:DI 3 bx [61])) 88 {*movdi_2} (nil)) (insn 24 18 33 2 m.c:4 (use (reg/i:DI 0 ax [ <result> ])) -1 (nil)) Note two moves [(insn 36) and (insn 37)] around (insn 12). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17236