diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-22 17:14:00 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-22 17:14:00 +0000 |
commit | c6356c1796657da2e0b31ea892ed768375c96ef1 (patch) | |
tree | e3538ca20caef7bf1f7f387c46b84c91cda52be6 /gcc/predict.c | |
parent | 3fc92937aad25385f5ae0e1e8525a8f05c5e0d1f (diff) | |
download | gcc-c6356c1796657da2e0b31ea892ed768375c96ef1.tar.gz |
* cfg.c (cached_make_edge): Use find_edge rather than an inlined
variant.
* cfgbuild.c (make_edges): Likewise.
* cfghooks.c (can_duplicate_block_p): Likewise.
* cfgloop.c (loop_latch_edge): Likewise.
* cfgloopmanip.c (force_single_succ_latches): Likewise.
* cfgrtl.c (rtl_flow_call_edges_add): Likewise.
* predict.c (predict_loops, propagate_freq): Likewise.
* tracer.c (tail_duplicate): Likewise.
* tree-cfg.c (disband_implicit_edges): Likewise.
(tree_forwarder_block_p, tree_flow_call_edges_add): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91019 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/gcc/predict.c b/gcc/predict.c index 432e8373f38..daf98398f29 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -669,13 +669,15 @@ predict_loops (struct loops *loops_info, bool rtlsimpleloops) /* Loop branch heuristics - predict an edge back to a loop's head as taken. */ - FOR_EACH_EDGE (e, ei, bb->succs) - if (e->dest == loop->header - && e->src == loop->latch) - { - header_found = 1; - predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN); - } + if (bb == loop->latch) + { + e = find_edge (loop->latch, loop->header); + if (e) + { + header_found = 1; + predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN); + } + } /* Loop exit heuristics - predict an edge exiting the loop if the conditional has no loop header successors as not taken. */ @@ -1660,21 +1662,20 @@ propagate_freq (struct loop *loop, bitmap tovisit) bitmap_clear_bit (tovisit, bb->index); - /* Compute back edge frequencies. */ - FOR_EACH_EDGE (e, ei, bb->succs) - if (e->dest == head) - { - sreal tmp; + e = find_edge (bb, head); + if (e) + { + sreal tmp; - /* EDGE_INFO (e)->back_edge_prob - = ((e->probability * BLOCK_INFO (bb)->frequency) - / REG_BR_PROB_BASE); */ + /* EDGE_INFO (e)->back_edge_prob + = ((e->probability * BLOCK_INFO (bb)->frequency) + / REG_BR_PROB_BASE); */ - sreal_init (&tmp, e->probability, 0); - sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency); - sreal_mul (&EDGE_INFO (e)->back_edge_prob, - &tmp, &real_inv_br_prob_base); - } + sreal_init (&tmp, e->probability, 0); + sreal_mul (&tmp, &tmp, &BLOCK_INFO (bb)->frequency); + sreal_mul (&EDGE_INFO (e)->back_edge_prob, + &tmp, &real_inv_br_prob_base); + } /* Propagate to successor blocks. */ FOR_EACH_EDGE (e, ei, bb->succs) |