summaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-24 21:59:49 +0000
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-24 21:59:49 +0000
commitc38b28e7f0876414e2ac8cbd06272f78169a3c68 (patch)
tree79fcd005a08d6ca51e2a25820e9ad881a4dc0e2c /gcc/cfgrtl.c
parent0b3f0f444150a9e3b64cc963ad1ef6bd44d7a70e (diff)
downloadgcc-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.c31
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 ();