I've updated the patch. Shall I move the check inside cgraph_clone_node?

Thanks,
Dehao

Index: gcc/ipa-inline-transform.c
===================================================================
--- gcc/ipa-inline-transform.c (revision 210535)
+++ gcc/ipa-inline-transform.c (working copy)
@@ -183,8 +183,9 @@ clone_inlined_nodes (struct cgraph_edge *e, bool d
   if (freq_scale == -1)
     freq_scale = e->frequency;
   n = cgraph_clone_node (e->callee, e->callee->decl,
- e->count, freq_scale, update_original,
- vNULL, true, inlining_into, NULL);
+ MIN (e->count, e->callee->count), freq_scale,
+ update_original, vNULL, true, inlining_into,
+ NULL);
   cgraph_redirect_edge_callee (e, n);
  }
     }
Index: gcc/tree-inline.c
===================================================================
--- gcc/tree-inline.c (revision 210535)
+++ gcc/tree-inline.c (working copy)
@@ -4355,7 +4355,7 @@ expand_call_inline (basic_block bb, gimple stmt, c
      function in any way before this point, as this CALL_EXPR may be
      a self-referential call; if we're calling ourselves, we need to
      duplicate our body before altering anything.  */
-  copy_body (id, bb->count,
+  copy_body (id, cg_edge->callee->count,
        GCOV_COMPUTE_SCALE (cg_edge->frequency, CGRAPH_FREQ_BASE),
      bb, return_block, NULL);


On Fri, May 16, 2014 at 6:41 PM, Jan Hubicka <hubi...@ucw.cz> wrote:
>> Do you mean adjusting bb->count? Because in
>> expand_call_inline(tree-inline.c), it will use bb->count to pass into
>> copy_body to calculate count_scale.
>
> What about taking here callee->count instead? For inline nodes without
> any capping hack, bb->count == edge->count = callee->count.
>
> When profile ends up being obviously inconsistent, I would say that
> inliner can cap callee->count during producing the clone...
>
> Honza
>>
>> Thanks,
>> Dehao
>>
>> On Fri, May 16, 2014 at 5:22 PM, Jan Hubicka <hubi...@ucw.cz> wrote:
>> >> In AutoFDO, a basic block's count can be much larger than it's actual
>> >> count because debug info might be incorrect. In this case, a call edge
>> >> count (calculated from BB count) could be much larger than callee's
>> >> header count, making the count_scale incorrectly large.
>> >
>> > In this case I still think we should handle this when producing the clone:
>> > we do not want to have clone's count much larger as well, so i think 
>> > inliner
>> > and ipa-cp needs to deal with capping here instead....
>> >
>> > Honza
>> >>
>> >> Dehao
>> >> >
>> >> >
>> >> > Honza

Reply via email to