On Fri, May 6, 2011 at 4:02 PM, Jan Hubicka <hubi...@ucw.cz> wrote: > Hi, > given that the patch has received feedback and I have weekend for fixing the > fallout, I decided to commit the following version today. It contains fix in > visibility handling of thunks that has shown in Mozilla build. > > > * cgraph.c (cgraph_add_thunk): Create real function node instead > of alias node; finalize it and mark needed/reachale; arrange visibility > to be right and add it into the corresponding same comdat group list. > (dump_cgraph_node): Dump thunks. > * cgraph.h (cgraph_first_defined_function, > cgraph_next_defined_function, > cgraph_function_with_gimple_body_p, > cgraph_first_function_with_gimple_body, > cgraph_next_function_with_gimple_body): New functions. > (FOR_EACH_FUNCTION_WITH_GIMPLE_BODY, FOR_EACH_DEFINED_FUNCTION): > New macros. > * ipa-cp.c (ipcp_need_redirect_p): Thunks can't be redirected. > (ipcp_generate_summary): Use FOR_EACH_FUNCTION_WITH_GIMPLE_BODY. > * cgraphunit.c (cgraph_finalize_function): Only look into possible > devirtualization when optimizing. > (verify_cgraph_node): Verify thunks. > (cgraph_analyze_function): Analyze thunks. > (cgraph_mark_functions_to_output): Output thunks only in combination > with function they are assigned to. > (assemble_thunk): Turn thunk into non-thunk; don't try to turn > alias into normal node. > (assemble_thunks): New functoin. > (cgraph_expand_function): Use it. > * lto-cgraph.c (lto_output_node): Stream thunks. > (input_overwrite_node): Stream in thunks. > * ipa-pure-const.c (analyze_function): Thunks do nothing interesting. > * lto-streamer-out.c (lto_output): Do not try to output thunk's body. > * ipa-inline.c (inline_small_functions): Use FOR_EACH_DEFINED_FUNCTION. > * ipa-inline-analysis.c (compute_inline_parameters): "Analyze" thunks. > (inline_analyze_function): Do not care about thunk jump functions. > (inline_generate_summary):Use FOR_EACH_DEFINED_FUNCTION. > * ipa-prop.c (ipa_prop_write_jump_functions): Use > cgraph_function_with_gimple_body_p. > * passes.c (do_per_function_toporder): Use > cgraph_function_with_gimple_body_p. > (execute_one_pass);Use FOR_EACH_FUNCTION_WITH_GIMPLE_BODY. > (ipa_write_summaries): Use cgraph_function_with_gimple_body_p. > (function_called_by_processed_nodes_p): Likewise. > > * lto.c (lto_materialize_function): Use > cgraph_function_with_gimple_body_p. > (add_cgraph_node_to_partition): Do not re-add items to partition; > handle thunks. > (add_varpool_node_to_partition): Do not re-add items to partition.
This caused: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48938 H.J.