In the current implementation, update_all_callee_keys only invokes update_caller_keys for one edge. For the AutoFDO case, it could cause important edges not being updated because top-down inline pattern is very popular in AutoFDO. This patch ensures all edges are updated in update_caller_keys.
Bootstrapped and passed gcc regression tests. Is it okay for google-4_7 branch? Thanks, Dehao --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -1234,7 +1234,8 @@ update_all_callee_keys (fibheap_t heap, struct cgraph_node *node, Reset their caches */ reset_node_growth_cache (callee); if (e->inline_failed) - update_caller_keys (heap, callee, updated_nodes, e); + update_caller_keys (heap, callee, updated_nodes, + flag_auto_profile ? NULL : e); if (e->next_callee) e = e->next_callee; else