diff options
author | Jan Hubicka <jh@suse.cz> | 2005-06-16 01:05:23 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2005-06-15 23:05:23 +0000 |
commit | 6580ee7781f9039547bd7e61c19064b4993227e9 (patch) | |
tree | 1d0023517e2f2d1588dbafdad22f8ee98e9d9ce8 /gcc/tree-cfg.c | |
parent | f652253b03b53794e5f2544ff1a05967a2070a56 (diff) | |
download | gcc-6580ee7781f9039547bd7e61c19064b4993227e9.zip gcc-6580ee7781f9039547bd7e61c19064b4993227e9.tar.gz gcc-6580ee7781f9039547bd7e61c19064b4993227e9.tar.bz2 |
Makefile.in (cfg.o): Add new dependencies.
* Makefile.in (cfg.o): Add new dependencies.
* basic-block.h (reorder_block_def): Kill
original/copy/duplicated/copy_number fields.
(BB_DUPLICATED): New flag.
(initialize_original_copy_tables, free_original_copy_tables,
set_bb_original, get_bb_original, set_bb_copy, get_bb_copy): New.
* cfg.c: Include hashtab.h and alloc-pool.h
(bb_original, bb_copy, original_copy_bb_pool): New static vars.
(htab_bb_copy_original_entry): New struct.
(bb_copy_original_hash, bb_copy_original_eq): New static functions.
(initialize_original_copy_tables, free_original_copy_tables,
set_bb_original, get_bb_original, set_bb_copy, get_bb_copy): New
global functions.
* cfghooks.c (duplicate_block): Update original/copy handling.
* cfglayout.c (fixup_reorder_chain): Likewise.
(cfg_layout_initialize): Initialize orignal_copy tables.
(cfg_layout_finalize): FInalize original_copy tables.
(can_copy_bbs_p): Use BB_DUPLICATED flag.
(copy_bbs): Likewise.
* cfgloopmanip.c (update-single_exits_after_duplication): Likewise.
(duplicate_loop_to_header_edge): Likewise; update handling of
copy_number.
(loop_version): Likewise.
* dominance.c (get_dominated_by_region): Use BB_DUPLICATED_FLAG.
* except.c (expand_resx_expr): Check that reg->resume is not set.
* loop-unroll.c (unroll_loop_constant_iterations,
unroll_loop_runtime_iterations, apply_opt_in_copies): Update
copy/original handling.
* loop-unwitch.c (unswitch_loop): Likewise.
* tree-cfg.c (create_bb): Do not initialize RBI.
(disband_implicit_edges): Do not kill RBI.
(add_phi_args_after_copy_bb): Use new original/copy mapping.
(add_phi_args_after_copy): Use BB_DUPLICATED flag.
(tree_duplicate_sese_region): Update original/copy handling.
* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Likewise.
* tree-ssa-loop-manip.c (copy_phi_node_args): Likewise.
* tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Likewise.
From-SVN: r101000
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 6108dd8..6a72250 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -390,7 +390,6 @@ create_bb (void *h, void *e, basic_block after) n_basic_blocks++; last_basic_block++; - initialize_bb_rbi (bb); return bb; } @@ -2569,11 +2568,7 @@ disband_implicit_edges (void) void delete_tree_cfg_annotations (void) { - basic_block bb; - label_to_block_map = NULL; - FOR_EACH_BB (bb) - bb->rbi = NULL; } @@ -4161,7 +4156,7 @@ tree_duplicate_bb (basic_block bb) /* Basic block BB_COPY was created by code duplication. Add phi node arguments for edges going out of BB_COPY. The blocks that were - duplicated have rbi->duplicated set to one. */ + duplicated have BB_DUPLICATED set. */ void add_phi_args_after_copy_bb (basic_block bb_copy) @@ -4171,15 +4166,15 @@ add_phi_args_after_copy_bb (basic_block bb_copy) edge_iterator ei; tree phi, phi_copy, phi_next, def; - bb = bb_copy->rbi->original; + bb = get_bb_original (bb_copy); FOR_EACH_EDGE (e_copy, ei, bb_copy->succs) { if (!phi_nodes (e_copy->dest)) continue; - if (e_copy->dest->rbi->duplicated) - dest = e_copy->dest->rbi->original; + if (e_copy->dest->flags & BB_DUPLICATED) + dest = get_bb_original (e_copy->dest); else dest = e_copy->dest; @@ -4190,8 +4185,8 @@ add_phi_args_after_copy_bb (basic_block bb_copy) In this case we are not looking for edge to dest, but to duplicated block whose original was dest. */ FOR_EACH_EDGE (e, ei, bb->succs) - if (e->dest->rbi->duplicated - && e->dest->rbi->original == dest) + if ((e->dest->flags & BB_DUPLICATED) + && get_bb_original (e->dest) == dest) break; gcc_assert (e != NULL); @@ -4218,13 +4213,13 @@ add_phi_args_after_copy (basic_block *region_copy, unsigned n_region) unsigned i; for (i = 0; i < n_region; i++) - region_copy[i]->rbi->duplicated = 1; + region_copy[i]->flags |= BB_DUPLICATED; for (i = 0; i < n_region; i++) add_phi_args_after_copy_bb (region_copy[i]); for (i = 0; i < n_region; i++) - region_copy[i]->rbi->duplicated = 0; + region_copy[i]->flags &= ~BB_DUPLICATED; } /* Duplicates a REGION (set of N_REGION basic blocks) with just a single @@ -4298,6 +4293,8 @@ tree_duplicate_sese_region (edge entry, edge exit, /* Record blocks outside the region that are dominated by something inside. */ doms = xmalloc (sizeof (basic_block) * n_basic_blocks); + initialize_original_copy_tables (); + n_doms = get_dominated_by_region (CDI_DOMINATORS, region, n_region, doms); total_freq = entry->dest->frequency; @@ -4321,7 +4318,7 @@ tree_duplicate_sese_region (edge entry, edge exit, } /* Redirect the entry and add the phi node arguments. */ - redirected = redirect_edge_and_branch (entry, entry->dest->rbi->copy); + redirected = redirect_edge_and_branch (entry, get_bb_copy (entry->dest)); gcc_assert (redirected != NULL); flush_pending_stmts (entry); @@ -4330,7 +4327,7 @@ tree_duplicate_sese_region (edge entry, edge exit, region, but was dominated by something inside needs recounting as well. */ set_immediate_dominator (CDI_DOMINATORS, entry->dest, entry->src); - doms[n_doms++] = entry->dest->rbi->original; + doms[n_doms++] = get_bb_original (entry->dest); iterate_fix_dominators (CDI_DOMINATORS, doms, n_doms); free (doms); @@ -4343,6 +4340,7 @@ tree_duplicate_sese_region (edge entry, edge exit, if (free_region_copy) free (region_copy); + free_original_copy_tables (); return true; } |