[Bug rtl-optimization/34849] Missed autoincrement opportunities due to a different basic block structure.

steven at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Fri May 1 22:28:00 GMT 2009



------- 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



More information about the Gcc-bugs mailing list