This patch is taken from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11350 jsaw =================================================================== RCS file: /cvs/gcc/gcc/gcc/ChangeLog,v retrieving revision 1.16114.2.883 retrieving revision 1.16114.2.884 diff -u -r1.16114.2.883 -r1.16114.2.884 --- gcc/gcc/ChangeLog 2004/01/15 20:21:31 1.16114.2.883 +++ gcc/gcc/ChangeLog 2004/01/16 11:06:57 1.16114.2.884 @@ -1,3 +1,10 @@ +2004-01-16 Jan Hubicka + + PR opt/11350 + * cfgcleanup.c (try_optimize_cfg): Suppress tablejump removal + after reload. + * cfgrtl.c (try_redirect_by_replacing_branch): Likewise. + 2004-01-15 J"orn Rennecke PR optimization/10392 =================================================================== RCS file: /cvs/gcc/gcc/gcc/cfgcleanup.c,v retrieving revision 1.68.2.9 retrieving revision 1.68.2.10 diff -u -r1.68.2.9 -r1.68.2.10 --- gcc/gcc/cfgcleanup.c 2004/01/01 13:19:39 1.68.2.9 +++ gcc/gcc/cfgcleanup.c 2004/01/16 11:07:16 1.68.2.10 @@ -1704,7 +1704,7 @@ /* If the jump insn has side effects, we can't kill the edge. */ && (GET_CODE (b->end) != JUMP_INSN - || (flow2_completed + || (reload_completed ? simplejump_p (b->end) : onlyjump_p (b->end))) && merge_blocks (s, b, c, mode)) =================================================================== RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v retrieving revision 1.61.2.13 retrieving revision 1.61.2.14 diff -u -r1.61.2.13 -r1.61.2.14 --- gcc/gcc/cfgrtl.c 2003/12/03 07:00:29 1.61.2.13 +++ gcc/gcc/cfgrtl.c 2004/01/16 11:07:17 1.61.2.14 @@ -688,7 +688,7 @@ if (tmp || !onlyjump_p (insn)) return false; - if (flow2_completed && JUMP_LABEL (insn) + if (reload_completed && JUMP_LABEL (insn) && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX && GET_CODE (table) == JUMP_INSN && (GET_CODE (PATTERN (table)) == ADDR_VEC