http://codereview.appspot.com/5752064/diff/51001/gcc/cgraph.c File gcc/cgraph.c (right):
http://codereview.appspot.com/5752064/diff/51001/gcc/cgraph.c#newcode1282 gcc/cgraph.c:1282: is needed as the address can be used to do an indirect call. */ Extend the comment here. http://codereview.appspot.com/5752064/diff/51001/gcc/cgraph.h File gcc/cgraph.h (right): http://codereview.appspot.com/5752064/diff/51001/gcc/cgraph.h#newcode230 gcc/cgraph.h:230: /* Chains all the semantically identical function versions. The It is better to extend the comments on these two members because dispatcher and resolver seem to mean the same thing. http://codereview.appspot.com/5752064/diff/51001/gcc/cgraph.h#newcode236 gcc/cgraph.h:236: /* For functions with many calls sites it holds map from call expression It might be better to put the four fields into a separate data structure with only one pointer from cgraph_node to it. When the lowering completes, they can be destroyed to save memory consumption. http://codereview.appspot.com/5752064/diff/51001/gcc/cgraphbuild.c File gcc/cgraphbuild.c (right): http://codereview.appspot.com/5752064/diff/51001/gcc/cgraphbuild.c#newcode321 gcc/cgraphbuild.c:321: if (decl && cgraph_get_node (decl) There does not seem to a need to add this condition here -- newly created node would have the dispatch_function bit set any way. Besides, there are 3 calls to cgraph_get_node here. It is cleaner to sink this code into the following if (decl) .. if (decl) { struct cgraph_node *callee = cgraph_get_create_node (decl); if (callee->dispatch_function) { build_resolver_for_function_versions (node); gcc_assert (get_mv_resolver (node)); } cgraph_create_edge (node, callee, stmt, bb->count, freq); } else ... http://codereview.appspot.com/5752064/diff/51001/gcc/cgraphunit.c File gcc/cgraphunit.c (right): http://codereview.appspot.com/5752064/diff/51001/gcc/cgraphunit.c#newcode942 gcc/cgraphunit.c:942: enqueue_node ((symtab_node)edge->callee); This change is irrelevant. http://codereview.appspot.com/5752064/