diff options
author | Jan Hubicka <jh@suse.cz> | 2003-06-06 11:24:26 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2003-06-06 09:24:26 +0000 |
commit | 9ee634e345c67ea1aa84591aa91c7e18020c19ae (patch) | |
tree | 366519e64f386e83f2c89bfffb438c340d608e78 /gcc/cfgloopmanip.c | |
parent | 7654db1b6667c4bb7fa927c3628cf661ca8465d9 (diff) | |
download | gcc-9ee634e345c67ea1aa84591aa91c7e18020c19ae.tar.gz |
function.c (FLOOR_ROUND, CEIL_ROUND): Fix.
* function.c (FLOOR_ROUND, CEIL_ROUND): Fix.
* i386.md (gen_pro_epilogue_adjust_stack): Deal with gigantic stack frames.
(pro_epilogue_adjust_stack_rex64_2): New pattern
* cfghooks.h, cfghooks.c: New files.
* Makefile.in (BASIC_BLOCK_H): Depends on cfghooks.h.
(OBJS): Add cfghooks.o.
(cfghooks.o): New rule.
* basic-block.h (split_edge): Rename to rtl_split_edge.
(verify_flow_info): Rename to rtl_verify_flow_info.
(cfghooks.h): Included here.
* cfgrtl.c (split_edge): Renamed rtl_split_edge.
(verify_flow_info): Renamed rtl_verify_flow_info.
* toplev.c (rest_of_compilation): Call rtl_register_cfg_hooks.
* basic-block.h (split_block, split_edge, flow_delete_block,
redirect_edge_and_branch, redirect_edge_and_branch_force): Delete.
(flow_delete_block_noexpunge): Return void.
* cfg.c (verify_flow_info): New function.
* cfgcleanup.c (try_simplify_condjump, outgoing_edges_match,
try_crossjump_to_edge, try_optimize_cfg, delete_unreachable_blocks):
Use delete_block.
* cfglayout.c (function_footer): Rename to...
(cfg_layout_function_footer): ... this variable
(unlink_insn_chain): Make global.
(fixup_reorder_chain, record_effective_endpoints): Update.
(cleanup_unconditional_jumps): Use delete_block.
(cfg_layout_redirect_edge, cfg_layout_split_block): Move to cfgrtl.c
(cfg_layout_duplicate_bb): Use redirect_edge_and_branch_force.
(cfg_layout_initialize, cfg_layout_finalize): Update hooks.
* cfglayout.h (cfg_layout_redirect_edge, cfg_layout_split_block): Delete.
(cfg_layout_function_footer): Declare.
* cfgloopmanip (split_loop_bb): Do not update RBI.
(remove_bbs): Use delete_block.
(loop_reidrect_edge, loop_delete_branch_edge): Use
redirect_edge_and_branch.
(create_preheader): Use split_block and redirect_edge_and_branch_force.
(split_edge_with): Likewise.
* cfgrtl.c: Include cfglayout.h
(split_edge): Rename to ...
(rtl_split_edge) ... this one; make local.
(redirect_edge_and_branch): Rename to ...
(rtl_redirect_edge_and_branch) ... this one; make local.
(redirect_edge_and_branch_force): Rename to ...
(rtl_redirect_edge_and_branch_force) ... this one; make local.
(cfg_layout_delete_block, cfg_layout_delete_edge_and_branch_force): New.
(cfg_layout_redirect_edge_and_branch, cfg_layout_split_block): Move here from
cfglayout.c; update to directly call RTL counterparts.
(rtl_cfg_hooks, cfg_layout_rtl_cfg_hooks): New functions.
* ifcvt.c (find_cond_trap): Use delete_block.
(find_if_case_1): Use delete_block.
(find_if_case_2): Use delete_block.
* rtl.h (unlink_insn_chain): Declare.
* toplev.c (rtl_reigster_cfg_hooks): New.
From-SVN: r67535
Diffstat (limited to 'gcc/cfgloopmanip.c')
-rw-r--r-- | gcc/cfgloopmanip.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 70926f2ab7d..1e878a5b7d4 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -86,9 +86,6 @@ split_loop_bb (loops, bb, insn) free (dom_bbs); set_immediate_dominator (loops->cfg.dom, e->dest, e->src); - /* Take care of RBI. */ - alloc_aux_for_block (e->dest, sizeof (struct reorder_block_def)); - return e; } @@ -123,7 +120,7 @@ remove_bbs (dom, bbs, nbbs) { remove_bb_from_loops (bbs[i]); delete_from_dominance_info (dom, bbs[i]); - flow_delete_block (bbs[i]); + delete_block (bbs[i]); } } @@ -828,7 +825,7 @@ loop_redirect_edge (e, dest) if (e->dest == dest) return; - cfg_layout_redirect_edge (e, dest); + redirect_edge_and_branch_force (e, dest); } /* Deletes edge E from a branch if possible. Unless REALLY_DELETE is set, @@ -865,7 +862,7 @@ loop_delete_branch_edge (e, really_delete) /* Redirecting behaves wrongly wrto this flag. */ irr = snd->flags & EDGE_IRREDUCIBLE_LOOP; - if (!cfg_layout_redirect_edge (e, newdest)) + if (!redirect_edge_and_branch (e, newdest)) return false; src->succ->flags &= ~EDGE_IRREDUCIBLE_LOOP; src->succ->flags |= irr; @@ -1396,10 +1393,7 @@ create_preheader (loop, dom, flags) /* Split_block would not split block after its end. */ emit_note_after (NOTE_INSN_DELETED, insn); } - if (flags & CP_INSIDE_CFGLAYOUT) - fallthru = cfg_layout_split_block (loop->header, insn); - else - fallthru = split_block (loop->header, insn); + fallthru = split_block (loop->header, insn); dummy = fallthru->src; loop->header = fallthru->dest; @@ -1424,18 +1418,13 @@ create_preheader (loop, dom, flags) dummy->frequency -= EDGE_FREQUENCY (e); dummy->count -= e->count; fallthru->count -= e->count; - if (flags & CP_INSIDE_CFGLAYOUT) - cfg_layout_redirect_edge (e, loop->header); - else + jump = redirect_edge_and_branch_force (e, loop->header); + if (jump) { - jump = redirect_edge_and_branch_force (e, loop->header); - if (jump) - { - add_to_dominance_info (dom, jump); - set_immediate_dominator (dom, jump, src); - add_bb_to_loop (jump, loop); - loop->latch = jump; - } + add_to_dominance_info (dom, jump); + set_immediate_dominator (dom, jump, src); + add_bb_to_loop (jump, loop); + loop->latch = jump; } /* Update structures. */ @@ -1524,7 +1513,7 @@ loop_split_edge_with (e, insns, loops) new_bb->count = e->count; new_bb->frequency = EDGE_FREQUENCY (e); - cfg_layout_redirect_edge (e, new_bb); + redirect_edge_and_branch_force (e, new_bb); alloc_aux_for_block (new_bb, sizeof (struct reorder_block_def)); if (insns) |