From d4919e65cae926b962425ff3d8c71a668f63c209 Mon Sep 17 00:00:00 2001 From: Pat Haugen Date: Fri, 14 Oct 2016 17:10:18 +0000 Subject: re PR rtl-optimization/68212 (Loop unroller breaks basic block frequencies) PR rtl-optimization/68212 * cfgloopmanip.c (duplicate_loop_to_header_edge): Use preheader edge frequency when computing scale factor for peeled copies. * loop-unroll.c (unroll_loop_runtime_iterations): Fix freq/count values for switch/peel blocks/edges. From-SVN: r241170 --- gcc/cfgloopmanip.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'gcc/cfgloopmanip.c') diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 487b91df0e5..eb868393fac 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -1276,10 +1276,13 @@ duplicate_loop_to_header_edge (struct loop *loop, edge e, } else { + int preheader_freq = EDGE_FREQUENCY (e); scale_main = REG_BR_PROB_BASE; for (i = 0; i < ndupl; i++) scale_main = combine_probabilities (scale_main, scale_step[i]); - scale_act = REG_BR_PROB_BASE - prob_pass_thru; + if (preheader_freq > freq_in) + preheader_freq = freq_in; + scale_act = GCOV_COMPUTE_SCALE (preheader_freq, freq_in); } for (i = 0; i < ndupl; i++) gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE); -- cgit v1.2.1