[google] [4.6] fix a bug in capping bb count scaling (issue5786054)
Hi, This patch is for google-4_6 branch only. It fixes a bug in r184378 which makes some capping escape (like stale max_bb_count in cgraph node). Tested with the internal benchmark that exposes this issue. Tested with gcc bootstrap. -Rong 2012-03-08 Rong Xu x...@google.com * gcc/tree-inline.c (copy_cfg_body): fix the bug in r184378. Google ref b/6105259. Index: gcc/tree-inline.c === --- gcc/tree-inline.c (revision 185095) +++ gcc/tree-inline.c (working copy) @@ -2210,7 +2210,7 @@ struct cgraph_node *node = cgraph_node (callee_fndecl); double f_max; gcov_type max_count_scale; - gcov_type max_src_bb_cnt; + gcov_type max_src_bb_cnt = 0; gcov_type max_value = ((gcov_type) 1 ((sizeof(gcov_type) * 8) - 1)); max_value = ~max_value; count_scale = (REG_BR_PROB_BASE * (double)count @@ -2220,14 +2220,13 @@ This can happen for comdat functions where the counters are split. It's more likely for recursive inlines. */ gcc_assert (node); - max_src_bb_cnt = node-max_bb_count; /* Find the maximum count value to that will be copied. */ FOR_EACH_BB_FN (bb, cfun_to_copy) if (!blocks_to_copy || bitmap_bit_p (blocks_to_copy, bb-index)) { -if (bb-count node-max_bb_count) - max_src_bb_cnt = node-max_bb_count; +if (bb-count max_src_bb_cnt) + max_src_bb_cnt = bb-count; } f_max = (double) max_value * REG_BR_PROB_BASE / max_src_bb_cnt - 1; -- This patch is available for review at http://codereview.appspot.com/5786054
Re: [google] [4.6] fix a bug in capping bb count scaling (issue5786054)
ok. David On Thu, Mar 8, 2012 at 10:04 AM, Rong Xu x...@google.com wrote: Hi, This patch is for google-4_6 branch only. It fixes a bug in r184378 which makes some capping escape (like stale max_bb_count in cgraph node). Tested with the internal benchmark that exposes this issue. Tested with gcc bootstrap. -Rong 2012-03-08 Rong Xu x...@google.com * gcc/tree-inline.c (copy_cfg_body): fix the bug in r184378. Google ref b/6105259. Index: gcc/tree-inline.c === --- gcc/tree-inline.c (revision 185095) +++ gcc/tree-inline.c (working copy) @@ -2210,7 +2210,7 @@ struct cgraph_node *node = cgraph_node (callee_fndecl); double f_max; gcov_type max_count_scale; - gcov_type max_src_bb_cnt; + gcov_type max_src_bb_cnt = 0; gcov_type max_value = ((gcov_type) 1 ((sizeof(gcov_type) * 8) - 1)); max_value = ~max_value; count_scale = (REG_BR_PROB_BASE * (double)count @@ -2220,14 +2220,13 @@ This can happen for comdat functions where the counters are split. It's more likely for recursive inlines. */ gcc_assert (node); - max_src_bb_cnt = node-max_bb_count; /* Find the maximum count value to that will be copied. */ FOR_EACH_BB_FN (bb, cfun_to_copy) if (!blocks_to_copy || bitmap_bit_p (blocks_to_copy, bb-index)) { - if (bb-count node-max_bb_count) - max_src_bb_cnt = node-max_bb_count; + if (bb-count max_src_bb_cnt) + max_src_bb_cnt = bb-count; } f_max = (double) max_value * REG_BR_PROB_BASE / max_src_bb_cnt - 1; -- This patch is available for review at http://codereview.appspot.com/5786054