From 4aaec1807f556b5b8de98cbda59cb17bdea008c4 Mon Sep 17 00:00:00 2001 From: steven Date: Thu, 15 Mar 2007 20:08:29 +0000 Subject: [PATCH] * cfglayout.c (fixup_reorder_chain): Postpone deleting dead jump tables, move the call to delete_dead_jumptables from here... (cfg_layout_finalize): ...to here. But rebuild jump labels first. * cfgrtl.c (cfg_layout_can_merge_blocks_p): When not optimizing, don't allow merging of blocks that try_redirect_by_replacing_jump also does not handle when not optimizing. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122957 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/cfglayout.c | 4 +++- gcc/cfgrtl.c | 7 ++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2567719..32724cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2007-03-15 Steven Bosscher + + PR middle-end/31159 + * cfglayout.c (fixup_reorder_chain): Postpone deleting dead + jump tables, move the call to delete_dead_jumptables from here... + (cfg_layout_finalize): ...to here. But rebuild jump labels first. + * cfgrtl.c (cfg_layout_can_merge_blocks_p): When not optimizing, + don't allow merging of blocks that try_redirect_by_replacing_jump + also does not handle when not optimizing. + 2007-03-15 Uros Bizjak Francois-Xavier Coudert diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index 545cc5d..ef085fc 100644 --- a/gcc/cfglayout.c +++ b/gcc/cfglayout.c @@ -697,7 +697,6 @@ fixup_reorder_chain (void) #ifdef ENABLE_CHECKING verify_insn_chain (); #endif - delete_dead_jumptables (); /* Now add jumps and labels as needed to match the blocks new outgoing edges. */ @@ -1193,6 +1192,9 @@ cfg_layout_finalize (void) fixup_fallthru_exit_predecessor (); fixup_reorder_chain (); + rebuild_jump_labels (get_insns ()); + delete_dead_jumptables (); + #ifdef ENABLE_CHECKING verify_insn_chain (); #endif diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 1eb75ab..9bc2b99 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2519,10 +2519,11 @@ cfg_layout_can_merge_blocks_p (basic_block a, basic_block b) /* Must be simple edge. */ && !(single_succ_edge (a)->flags & EDGE_COMPLEX) && a != ENTRY_BLOCK_PTR && b != EXIT_BLOCK_PTR - /* If the jump insn has side effects, - we can't kill the edge. */ + /* If the jump insn has side effects, we can't kill the edge. + When not optimizing, try_redirect_by_replacing_jump will + not allow us to redirect an edge by replacing a table jump. */ && (!JUMP_P (BB_END (a)) - || (reload_completed + || ((!optimize || reload_completed) ? simplejump_p (BB_END (a)) : onlyjump_p (BB_END (a))))); } -- 2.7.4