diff options
author | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-24 21:59:49 +0000 |
---|---|---|
committer | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-24 21:59:49 +0000 |
commit | c38b28e7f0876414e2ac8cbd06272f78169a3c68 (patch) | |
tree | 79fcd005a08d6ca51e2a25820e9ad881a4dc0e2c /gcc/cfgrtl.c | |
parent | 0b3f0f444150a9e3b64cc963ad1ef6bd44d7a70e (diff) | |
download | gcc-c38b28e7f0876414e2ac8cbd06272f78169a3c68.tar.gz |
PR bootstrap/59279
Revert previous commit.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205338 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r-- | gcc/cfgrtl.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 4ce7273834c..63f44afbbae 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -3696,10 +3696,10 @@ fixup_reorder_chain (void) #endif /* Now add jumps and labels as needed to match the blocks new - outgoing edges. Fixup missing or redundant BARRIERs. */ + outgoing edges. */ - for (bb = ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb; bb ; - bb = (basic_block) bb->aux) + for (bb = ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb; bb ; bb = (basic_block) + bb->aux) { edge e_fall, e_taken, e; rtx bb_end_insn; @@ -3853,26 +3853,13 @@ fixup_reorder_chain (void) relink_block_chain (/*stay_in_cfglayout_mode=*/false); - /* Annoying special case - stray barriers left in the code. This happens - if a tablejump is transformed to a simpe or confitional jump, or if a - basic block ending in a tablejump is removed but the jump table itself - is not. */ + /* Annoying special case - jump around dead jumptables left in the code. */ FOR_EACH_BB (bb) { edge e = find_fallthru_edge (bb->succs); - if (e && e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)) - { - rtx insn, next; - for (insn = NEXT_INSN (BB_END (e->src)); - insn != BB_HEAD (e->dest); - insn = next) - { - next = NEXT_INSN (insn); - if (BARRIER_P (insn)) - remove_insn (insn); - } - } + if (e && !can_fallthru (e->src, e->dest)) + force_nonfallthru (e); } /* Ensure goto_locus from edges has some instructions with that locus @@ -4286,7 +4273,7 @@ break_superblocks (void) } /* Finalize the changes: reorder insn list according to the sequence specified - by aux pointers, enter compensation code. */ + by aux pointers, enter compensation code, rebuild scope forest. */ void cfg_layout_finalize (void) @@ -4294,7 +4281,6 @@ cfg_layout_finalize (void) #ifdef ENABLE_CHECKING verify_flow_info (); #endif - delete_dead_jumptables (); force_one_exit_fallthru (); rtl_register_cfg_hooks (); if (reload_completed @@ -4305,6 +4291,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 (); verify_flow_info (); |