Hi, this patch fixes omission I noticed while debugging unrelated problem. While we compute jump functions for indirect calls (so they can possibly be used after the indirect calls become direct) we forget to stream them.
Fixed thus. Regtested/bootstrapped x86_64-linux, will commit it shortly. Honza * ipa-prop.c (ipa_write_node_info): Stream jump functions for indirect calls. (ipa_read_node_info): Likewise. Index: ipa-prop.c =================================================================== *** ipa-prop.c (revision 174911) --- ipa-prop.c (working copy) *************** ipa_write_node_info (struct output_block *** 2833,2839 **** ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j)); } for (e = node->indirect_calls; e; e = e->next_callee) ! ipa_write_indirect_edge_info (ob, e); } /* Stream in NODE info from IB. */ --- 2833,2847 ---- ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j)); } for (e = node->indirect_calls; e; e = e->next_callee) ! { ! struct ipa_edge_args *args = IPA_EDGE_REF (e); ! ! lto_output_uleb128_stream (ob->main_stream, ! ipa_get_cs_argument_count (args)); ! for (j = 0; j < ipa_get_cs_argument_count (args); j++) ! ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j)); ! ipa_write_indirect_edge_info (ob, e); ! } } /* Stream in NODE info from IB. */ *************** ipa_read_node_info (struct lto_input_blo *** 2871,2877 **** ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in); } for (e = node->indirect_calls; e; e = e->next_callee) ! ipa_read_indirect_edge_info (ib, data_in, e); } /* Write jump functions for nodes in SET. */ --- 2879,2898 ---- ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in); } for (e = node->indirect_calls; e; e = e->next_callee) ! { ! struct ipa_edge_args *args = IPA_EDGE_REF (e); ! int count = lto_input_uleb128 (ib); ! ! ipa_set_cs_argument_count (args, count); ! if (!count) ! continue; ! ! args->jump_functions = ggc_alloc_cleared_vec_ipa_jump_func ! (ipa_get_cs_argument_count (args)); ! for (k = 0; k < ipa_get_cs_argument_count (args); k++) ! ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in); ! ipa_read_indirect_edge_info (ib, data_in, e); ! } } /* Write jump functions for nodes in SET. */