------- Comment #9 from steven at gcc dot gnu dot org 2009-05-01 22:27 ------- FWIW, early crossjumping (after ce1) doesn't work either.
The code before trying to crossjump looks like this: 44 pc={(cc:CC=0x0)?L50:pc} REG_DEAD: cc:CC REG_BR_PROB: 0x1388 45 NOTE_INSN_BASIC_BLOCK 46 r170:SI=0x1234 47 [r168:SI+r164:SI]=r170:SI REG_DEAD: r170:SI REG_EQUAL: 0x1234 L50: 51 NOTE_INSN_BASIC_BLOCK 52 r171:SI=0x9876 53 [r168:SI+r164:SI]=r171:SI REG_DEAD: r171:SI REG_EQUAL: 0x1234 L54: 55 NOTE_INSN_BASIC_BLOCK 56 r162:SI=r162:SI+0x1 57 r164:SI=r164:SI+0x4 Note that we're in cfglayout mode: we fall through to insn 55 from insn 53 and insn 47 too. The reason that crossjumping fails, is the difference in input registers (r170 and r171), i.e. the usual problem with the RTL crossjumping pass. The reason why I keep coming back to crossjumping, is that I am 99% sure we would have an autoincrement if we crossjumped the two stores. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34849