diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-04 23:47:09 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-04 23:47:09 +0000 |
commit | 611d2ac17cbd3df0489cffe3fda88ec503a3e059 (patch) | |
tree | f496fa9bd8e7472a0092f253d2c670a09063973a /gcc/cfghooks.h | |
parent | 9606b4af46c2fe61092079ffd9bb3db991b9f615 (diff) | |
download | gcc-611d2ac17cbd3df0489cffe3fda88ec503a3e059.tar.gz |
* cfgloopmanip.c (loop_delete_branch_edge): Removed.
(remove_path): Use can_remove_branch_p and remove_branch instead
of loop_delete_branch_edge.
* tree-ssa-loop-manip.c (scale_dominated_blocks_in_loop): New function.
(tree_transform_and_unroll_loop): Remove dead branches immediately.
Update profile using scale_dominated_blocks_in_loop.
* cfghooks.c (can_remove_branch_p, remove_branch): New functions.
* cfghooks.h (struct cfg_hooks): Add can_remove_branch_p.
(can_remove_branch_p, remove_branch): Declare.
* tree-cfg.c (tree_can_remove_branch_p): New function.
(tree_cfg_hooks): Add tree_can_remove_branch_p.
* cfgrtl.c (rtl_can_remove_branch_p): New function.
(rtl_cfg_hooks, cfg_layout_rtl_cfg_hook): Add rtl_can_remove_branch_p.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121583 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfghooks.h')
-rw-r--r-- | gcc/cfghooks.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cfghooks.h b/gcc/cfghooks.h index fb6264df703..bd7d1b3195a 100644 --- a/gcc/cfghooks.h +++ b/gcc/cfghooks.h @@ -47,6 +47,10 @@ struct cfg_hooks not be abnormal. */ basic_block (*redirect_edge_and_branch_force) (edge, basic_block); + /* Returns true if it is possible to remove the edge by redirecting it + to the destination of the other edge going from its source. */ + bool (*can_remove_branch_p) (edge); + /* Remove statements corresponding to a given basic block. */ void (*delete_basic_block) (basic_block); @@ -138,6 +142,8 @@ extern void verify_flow_info (void); extern void dump_bb (basic_block, FILE *, int); extern edge redirect_edge_and_branch (edge, basic_block); extern basic_block redirect_edge_and_branch_force (edge, basic_block); +extern bool can_remove_branch_p (edge); +extern void remove_branch (edge); extern edge split_block (basic_block, void *); extern edge split_block_after_labels (basic_block); extern bool move_block_after (basic_block, basic_block); |