diff options
author | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-30 10:40:56 +0000 |
---|---|---|
committer | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-30 10:40:56 +0000 |
commit | 0051c76acf69e4b8a5e9f2fadc6af1bd27399c0c (patch) | |
tree | 10047b16072acc29f1f177189825f45ac62aba97 /gcc/predict.c | |
parent | 59939326e8c8d082a53fe39198788a7c06d39a61 (diff) | |
download | gcc-0051c76acf69e4b8a5e9f2fadc6af1bd27399c0c.tar.gz |
Backport from tree-ssa (relevant changes only):
2003-12-18 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* et-forest.h (et_forest_create, et_forest_delete,
et_forest_add_node, et_forest_add_edge, et_forest_remove_node,
et_forest_remove_edge, et_forest_parent,
et_forest_common_ancestor, et_forest_node_value,
et_forest_enumerate_sons): Declarations removed.
(struct et_node): New.
(et_new_tree, et_free_tree, et_set_father, et_split, et_nca,
et_below): Declare.
* et-forest.c (struct et_forest_occurrence, struct et_forest,
struct et_forest_node): Removed.
(et_forest_create, et_forest_delete,
et_forest_add_node, et_forest_add_edge, et_forest_remove_node,
et_forest_remove_edge, et_forest_parent,
et_forest_common_ancestor, et_forest_node_value,
et_forest_enumerate_sons, splay, remove_all_occurrences,
find_leftmost_node, find_rightmost_node, calculate_value): Removed.
(struct et_occ): New.
(et_nodes, et_occurences): New.
(set_depth, set_depth_add, set_prev, set_next, et_recomp_min,
et_check_occ_sanity, et_check_sanity, et_check_tree_sanity,
record_path_before_1, record_path_before, check_path_after_1,
check_path_after, et_splay, et_new_occ, et_new_tree,
et_free_tree, et_set_father, et_split, et_nca, et_below): New.
* basic-block.h (struct basic_block_def): New field dom.
(struct dominance_info): Type removed.
(calculate_dominance_info, free_dominance_info,
nearest_common_dominator, set_immediate_dominator,
get_immediate_dominator, dominated_by_p, get_dominated_by,
add_to_dominance_info, delete_from_dominance_info,
recount_dominator, redirect_immediate_dominators,
iterate_fix_dominators, verify_dominators): Declarations
changed.
(enum dom_state): New.
(dom_computed): New variable.
(first_dom_son, next_dom_son): Declare.
* dominance.c (struct dominance_info): Removed.
(BB_NODE, SET_BB_NODE): Removed.
(calculate_dominance_info, free_dominance_info,
nearest_common_dominator, set_immediate_dominator,
get_immediate_dominator, dominated_by_p, get_dominated_by,
add_to_dominance_info, delete_from_dominance_info,
recount_dominator, redirect_immediate_dominators,
iterate_fix_dominators, verify_dominators,
debug_dominance_info): Work over new datastructure. Access
dominance datastructures through CFG.
(assign_dfs_numbers, compute_dom_fast_query, first_dom_son,
next_dom_son): New.
* bt-load.c (dom): Variable removed.
(augment_live_range, combine_btr_defs, migrate_btr_def,
migrate_btr_defs, branch_target_load_optimize): Updated for the
new interface for dominance information.
* cfg.c {exit_entry_blocks): Update initializer.
* cfglayout.c (copy_bbs): Removed loops argument. Updated for
the new interface for dominance information.
* cfglayout.h (copy_bbs): Declaration changed.
* cfgloop.c (flow_loop_pre_header_find, flow_loops_cfg_dump,
flow_loop_scan, canonicalize_loop_headers, flow_loops_find): Updated
for the new interface for dominance information.
(flow_loop_scan): Loops argument removed.
(flow_loops_free): Don't release dominators.
* cfgloop.h (struct cfg): Dom field removed.
(flow_loop_scan, loop_split_edge_with, simple_loop_p,
just_once_each_iteration_p, split_loop_bb): Declaration changed.
* cfgloopanal.c (simple_loop_exit_p, simple_increment,
just_once_each_iteration_p, simple_loop_p): Remove loops argument.
Updated for the new interface for dominance information.
* cfgloopmanip.c (remove_bbs, find_path, create_preheader,
split_loop_bb, loopify, duplicate_loop_to_header_edge,
force_single_succ_latches, loop_split_edge_with): Ditto.
* gcse.c (dominators): Variable removed.
(free_code_hoist_mem, compute_code_hoist_data, hoist_code):
Updated for the new interface for dominance information.
* ifcvt.c (post_dominators): Variable removed.
(mark_loop_exit_edges, merge_if_block, find_if_header,
find_cond_trap, find_if_case_1, find_if_case_2, if_convert):
Updated for the new interface for dominance information.
* loop-init.c (rtl_loop_optimizer_init,
rtl_loop_optimizer_finalize): Ditto.
* loop-unroll.c (decide_peel_simple, decide_peel_once_rolling,
decide_peel_completely, decide_unroll_stupid,
decide_unroll_constant_iterations,
decide_unroll_runtime_iterations): Loops argument removed.
Updated for the new interface for dominance information.
(unroll_and_peel_loops, peel_loops_completely,
unroll_loop_runtime_iterations): Updated for the new interface for
dominance information.
* loop-unswitch.c (may_unswitch_on_p, unswitch_loops,
unswitch_single_loop, unswitch_loop): Updated for the new
interface for dominance information.
* predict.c (process_note_predictions, process_note_prediction,
estimate_probability, note_prediction_to_br_prob): Ditto.
* sched-rgn.c (find_rgns, init_regions): Ditto.
* toplev.c (rest_of_handle_branch_prob): Free the dominators.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75226 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 60 |
1 files changed, 22 insertions, 38 deletions
diff --git a/gcc/predict.c b/gcc/predict.c index 30de8666e23..74a1f24c3ad 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -72,10 +72,8 @@ static void estimate_loops_at_level (struct loop *loop); static void propagate_freq (struct loop *); static void estimate_bb_frequencies (struct loops *); static void counts_to_freqs (void); -static void process_note_predictions (basic_block, int *, dominance_info, - dominance_info); -static void process_note_prediction (basic_block, int *, dominance_info, - dominance_info, int, int); +static void process_note_predictions (basic_block, int *); +static void process_note_prediction (basic_block, int *, int, int); static bool last_basic_block_p (basic_block); static void compute_function_frequency (void); static void choose_function_section (void); @@ -393,13 +391,12 @@ combine_predictions_for_insn (rtx insn, basic_block bb) void estimate_probability (struct loops *loops_info) { - dominance_info dominators, post_dominators; basic_block bb; unsigned i; connect_infinite_loops_to_exit (); - dominators = calculate_dominance_info (CDI_DOMINATORS); - post_dominators = calculate_dominance_info (CDI_POST_DOMINATORS); + calculate_dominance_info (CDI_DOMINATORS); + calculate_dominance_info (CDI_POST_DOMINATORS); /* Try to predict out blocks in a loop that are not part of a natural loop. */ @@ -412,11 +409,10 @@ estimate_probability (struct loops *loops_info) struct loop_desc desc; unsigned HOST_WIDE_INT niter; - flow_loop_scan (loops_info, loop, LOOP_EXIT_EDGES); + flow_loop_scan (loop, LOOP_EXIT_EDGES); exits = loop->num_exits; - if (simple_loop_p (loops_info, loop, &desc) - && desc.const_iter) + if (simple_loop_p (loop, &desc) && desc.const_iter) { int prob; niter = desc.niter + 1; @@ -500,8 +496,8 @@ estimate_probability (struct loops *loops_info) /* Look for block we are guarding (ie we dominate it, but it doesn't postdominate us). */ if (e->dest != EXIT_BLOCK_PTR && e->dest != bb - && dominated_by_p (dominators, e->dest, e->src) - && !dominated_by_p (post_dominators, e->src, e->dest)) + && dominated_by_p (CDI_DOMINATORS, e->dest, e->src) + && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest)) { rtx insn; @@ -618,8 +614,7 @@ estimate_probability (struct loops *loops_info) && bb->succ->succ_next != NULL) combine_predictions_for_insn (BB_END (bb), bb); - free_dominance_info (post_dominators); - free_dominance_info (dominators); + free_dominance_info (CDI_POST_DOMINATORS); remove_fake_edges (); estimate_bb_frequencies (loops_info); @@ -719,10 +714,7 @@ last_basic_block_p (basic_block bb) on demand, so -1 may be there in case this was not needed yet). */ static void -process_note_prediction (basic_block bb, int *heads, - dominance_info dominators, - dominance_info post_dominators, int pred, - int flags) +process_note_prediction (basic_block bb, int *heads, int pred, int flags) { edge e; int y; @@ -736,18 +728,18 @@ process_note_prediction (basic_block bb, int *heads, find first dominator that we do not post-dominate (we are using already known members of heads array). */ basic_block ai = bb; - basic_block next_ai = get_immediate_dominator (dominators, bb); + basic_block next_ai = get_immediate_dominator (CDI_DOMINATORS, bb); int head; while (heads[next_ai->index] < 0) { - if (!dominated_by_p (post_dominators, next_ai, bb)) + if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb)) break; heads[next_ai->index] = ai->index; ai = next_ai; - next_ai = get_immediate_dominator (dominators, next_ai); + next_ai = get_immediate_dominator (CDI_DOMINATORS, next_ai); } - if (!dominated_by_p (post_dominators, next_ai, bb)) + if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb)) head = next_ai->index; else head = heads[next_ai->index]; @@ -769,7 +761,7 @@ process_note_prediction (basic_block bb, int *heads, return; for (e = BASIC_BLOCK (y)->succ; e; e = e->succ_next) if (e->dest->index >= 0 - && dominated_by_p (post_dominators, e->dest, bb)) + && dominated_by_p (CDI_POST_DOMINATORS, e->dest, bb)) predict_edge_def (e, pred, taken); } @@ -778,9 +770,7 @@ process_note_prediction (basic_block bb, int *heads, process_note_prediction. */ static void -process_note_predictions (basic_block bb, int *heads, - dominance_info dominators, - dominance_info post_dominators) +process_note_predictions (basic_block bb, int *heads) { rtx insn; edge e; @@ -813,8 +803,6 @@ process_note_predictions (basic_block bb, int *heads, /* Process single prediction note. */ process_note_prediction (bb, heads, - dominators, - post_dominators, alg, (int) NOTE_PREDICTION_FLAGS (insn)); delete_insn (insn); } @@ -827,10 +815,7 @@ process_note_predictions (basic_block bb, int *heads, /* This block ended from other reasons than because of return. If it is because of noreturn call, this should certainly not be taken. Otherwise it is probably some error recovery. */ - process_note_prediction (bb, - heads, - dominators, - post_dominators, PRED_NORETURN, NOT_TAKEN); + process_note_prediction (bb, heads, PRED_NORETURN, NOT_TAKEN); } } @@ -841,15 +826,14 @@ void note_prediction_to_br_prob (void) { basic_block bb; - dominance_info post_dominators, dominators; int *heads; /* To enable handling of noreturn blocks. */ add_noreturn_fake_exit_edges (); connect_infinite_loops_to_exit (); - post_dominators = calculate_dominance_info (CDI_POST_DOMINATORS); - dominators = calculate_dominance_info (CDI_DOMINATORS); + calculate_dominance_info (CDI_POST_DOMINATORS); + calculate_dominance_info (CDI_DOMINATORS); heads = xmalloc (sizeof (int) * last_basic_block); memset (heads, -1, sizeof (int) * last_basic_block); @@ -858,10 +842,10 @@ note_prediction_to_br_prob (void) /* Process all prediction notes. */ FOR_EACH_BB (bb) - process_note_predictions (bb, heads, dominators, post_dominators); + process_note_predictions (bb, heads); - free_dominance_info (post_dominators); - free_dominance_info (dominators); + free_dominance_info (CDI_POST_DOMINATORS); + free_dominance_info (CDI_DOMINATORS); free (heads); remove_fake_edges (); |