diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2017-07-01 22:46:40 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2017-07-01 20:46:40 +0000 |
commit | af2bbc51d3879b6e7a03b4dc2d4ab017a98270ba (patch) | |
tree | 7af6a2ca2adedc6bef10ea8e3c46425031abf858 /gcc/tree-ssa-loop-manip.c | |
parent | e39df5466d0cde13fd47e612f20ef2b0ac117e2b (diff) | |
download | gcc-af2bbc51d3879b6e7a03b4dc2d4ab017a98270ba.zip gcc-af2bbc51d3879b6e7a03b4dc2d4ab017a98270ba.tar.gz gcc-af2bbc51d3879b6e7a03b4dc2d4ab017a98270ba.tar.bz2 |
cfg.c (scale_bbs_frequencies): New function.
* cfg.c (scale_bbs_frequencies): New function.
* cfg.h (scale_bbs_frequencies): Declare it.
* cfgloopanal.c (single_likely_exit): Cleanup.
* cfgloopmanip.c (scale_loop_frequencies): Take profile_probability
as parameter.
(scale_loop_profile): Likewise.
(loop_version): Likewise.
(create_empty_loop_on_edge): Update.
* cfgloopmanip.h (scale_loop_frequencies, scale_loop_profile,
scale_loop_frequencies, scale_loop_profile, loopify,
loop_version): Update prototypes.
* modulo-sched.c (sms_schedule): Update.
* predict.c (unlikely_executed_edge_p): Also check probability.
(probably_never_executed_edge_p): Fix typo.
* tree-if-conv.c (version_loop_for_if_conversion): Update.
* tree-parloops.c (gen_parallel_loop): Update.
* tree-ssa-loop-ivcanon.c (try_peel_loop): Update.
* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Update.
* tree-ssa-loop-split.c (split_loop): Update.
* tree-ssa-loop-unswitch.c (tree_unswitch_loop): Update.
* tree-vect-loop-manip.c (vect_do_peeling): Update.
(vect_loop_versioning): Update.
* tree-vect-loop.c (scale_profile_for_vect_loop): Update.
From-SVN: r249872
Diffstat (limited to 'gcc/tree-ssa-loop-manip.c')
-rw-r--r-- | gcc/tree-ssa-loop-manip.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index b2c1ccd..b2f5f16 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -1212,7 +1212,7 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor, gimple_stmt_iterator bsi; use_operand_p op; bool ok; - unsigned i, prob, prob_entry, scale_unrolled, scale_rest; + unsigned i, prob, prob_entry, scale_unrolled; profile_count freq_e, freq_h; gcov_type new_est_niter = niter_for_unrolled_loop (loop, factor); unsigned irr = loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP; @@ -1241,14 +1241,16 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor, of this change (scale the frequencies of blocks before and after the exit by appropriate factors). */ scale_unrolled = prob_entry; - scale_rest = REG_BR_PROB_BASE; new_loop = loop_version (loop, enter_main_cond, NULL, profile_probability::from_reg_br_prob_base (prob_entry), profile_probability::from_reg_br_prob_base (REG_BR_PROB_BASE - prob_entry), - scale_unrolled, scale_rest, true); + profile_probability::from_reg_br_prob_base + (scale_unrolled), + profile_probability::guessed_always (), + true); gcc_assert (new_loop != NULL); update_ssa (TODO_update_ssa); @@ -1369,14 +1371,11 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor, } if (freq_h > 0) { - gcov_type scale; /* Avoid dropping loop body profile counter to 0 because of zero count in loop's preheader. */ if (freq_e == profile_count::zero ()) freq_e = profile_count::from_gcov_type (1); - /* This should not overflow. */ - scale = freq_e.probability_in (freq_h).to_reg_br_prob_base (); - scale_loop_frequencies (loop, scale, REG_BR_PROB_BASE); + scale_loop_frequencies (loop, freq_e.probability_in (freq_h)); } exit_bb = single_pred (loop->latch); |