------- Comment #1 from law at redhat dot com 2010-02-26 01:04 ------- Trunk produces:
mid_pred: movem.l #14336,-(%sp) move.l 16(%sp),%d1 move.l 20(%sp),%d0 move.l %d1,%d3 sub.l %d0,%d3 move.l %d3,%d2 add.l %d2,%d2 subx.l %d2,%d2 and.l %d3,%d2 add.l %d2,%d0 move.l %d0,%d4 sub.l 24(%sp),%d4 move.l %d4,%d3 add.l %d3,%d3 subx.l %d3,%d3 and.l %d4,%d3 sub.l %d3,%d0 sub.l %d2,%d1 sub.l %d0,%d1 move.l %d1,%d2 add.l %d2,%d2 subx.l %d2,%d2 and.l %d1,%d2 add.l %d2,%d0 movem.l (%sp)+,#28 rts Note the two unwanted move insns are gone. Likely due to IRA work as it eliminated part of regmove and generally gives better register allocations. -- law at redhat dot com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41204