[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